openapi: 3.0.2 info: title: NetXMS API version: 1.0.0 tags: - name: Authentication description: User authentication and session management - name: Alarms description: Alarm management operations - name: Objects description: Object management and queries - name: Data Collection description: Data collection items and historical data - name: TCP Proxy description: TCP proxy for remote access (VNC, SSH, etc.) - name: Grafana description: Grafana integration endpoints - name: Script Library description: NXSL script library management - name: Server Actions description: Server action management - name: Server description: Server information and status - name: AI Chat description: AI assistant chat sessions - name: Object Tools description: Object tool management - name: Find description: Network search operations - name: DCI Summary Tables description: DCI summary table operations - name: Event Templates description: Event template management - name: Users description: User management - name: User Groups description: User group management paths: /: get: summary: Root endpoint description: Root API endpoint providing basic API information. responses: '200': description: API root information content: application/json: schema: type: object properties: description: type: string description: API description version: type: string description: NetXMS version build: type: string description: Build tag apiVersion: type: integer description: API version number security: [] /v1/server-info: get: summary: Get server information description: Retrieve detailed server information including version, build, and configuration details. responses: '200': description: Server information retrieved successfully content: application/json: schema: type: object properties: version: type: string description: Server version build: type: string description: Build tag id: type: integer description: Server ID name: type: string description: Server name color: type: string description: Server color (for UI theming) messageOfTheDay: type: string description: Message of the day tz: type: string description: Server timezone options: type: object properties: zoningEnabled: type: boolean strictAlarmStatusFlow: type: boolean timedAlarmAckEnabled: type: boolean helpdeskLinkActive: type: boolean tileServerURL: type: string dateTimeFormat: type: object properties: date: type: string description: Date format string timeLong: type: string description: Long time format string timeShort: type: string description: Short time format string components: type: array items: type: object description: Registered server components '401': description: Unauthorized security: - BearerAuth: [] /v1/status: get: summary: Get session status description: Retrieve current session status including user information. responses: '200': description: Session status retrieved successfully content: application/json: schema: type: object properties: userId: type: integer description: Current user ID userName: type: string description: Current user login name systemAccessRights: type: integer description: User's system access rights bitmask '401': description: Unauthorized security: - BearerAuth: [] /v1/tcp-proxy: post: summary: Create TCP Proxy Session description: | Create a TCP proxy session and return a short-lived token for WebSocket connection. This is the first step in establishing a TCP proxy connection. The returned token should be used to connect to the WebSocket endpoint `/v1/tcp-proxy/{token}`. **Two-Phase Authorization Flow:** 1. Call this endpoint with Bearer token authentication to create a TCP tunnel 2. Server establishes connection to target via agent and returns a session token 3. Connect to `/v1/tcp-proxy/{token}` WebSocket endpoint (no auth header needed) This flow is designed to work with browser WebSocket API which cannot send custom Authorization headers. **Required Permissions:** - System access right: SYSTEM_ACCESS_SETUP_TCP_PROXY - Object access right: OBJECT_ACCESS_CONTROL on the target or proxy object requestBody: required: true content: application/json: schema: type: object required: - port properties: allowControlMessages: type: boolean description: If true, server will send JSON control messages in text frames (default is false) proxyId: type: integer description: | Proxy node ID or zone object ID. If specified, the connection will be established through this proxy node. Either proxyId or nodeId must be specified. nodeId: type: integer description: | Target node ID. If proxyId is not specified, the server will automatically select the appropriate proxy for this node. Either proxyId or nodeId must be specified. address: type: string format: ip-address description: | Target IP address. Required when proxyId is specified. When using nodeId, the node's primary IP address is used automatically. port: type: integer minimum: 1 maximum: 65535 description: Target TCP port number (required). example: nodeId: 123 port: 5900 responses: '201': description: TCP proxy session created successfully. content: application/json: schema: type: object properties: token: type: string format: uuid description: Session token for WebSocket connection expiresIn: type: integer description: Token validity period in seconds wsUrl: type: string description: WebSocket URL path to connect to example: token: "a1b2c3d4-e5f6-7890-abcd-ef1234567890" expiresIn: 30 wsUrl: "/v1/tcp-proxy/a1b2c3d4-e5f6-7890-abcd-ef1234567890" '400': description: | Bad Request - Invalid parameters. Possible reasons: - Port parameter missing - Invalid IP address format - Invalid proxy object type '401': description: Unauthorized - Authentication token missing or invalid '403': description: | Forbidden - User does not have required permissions. Either SYSTEM_ACCESS_SETUP_TCP_PROXY or OBJECT_ACCESS_CONTROL is missing. '404': description: Object not found - Invalid nodeId or proxyId '502': description: | Bad Gateway - Cannot establish connection to agent. Agent may be unreachable or TCP proxy setup failed. '503': description: Service Unavailable - No proxy node available in zone security: - BearerAuth: [] tags: - TCP Proxy /v1/tcp-proxy/{token}: get: summary: TCP Proxy WebSocket Connection description: | Establish a WebSocket connection for TCP proxy data transfer. This endpoint requires a valid session token obtained from `POST /v1/tcp-proxy`. **Token Properties:** - Single-use: token is invalidated upon WebSocket connection - Short-lived: expires after 30 seconds if not used - No authentication header needed: token in path serves as authorization **WebSocket Protocol:** - Binary frames (opcode 0x02) are used for data transfer in both directions - Text frames (opcode 0x01) are used for control messages (JSON format) - Close frame (opcode 0x08) terminates the connection **Control Messages (JSON):** - Connection ready: `{"type": "connected", "channelId": 12345}` - Close notification: `{"type": "close", "reason": "normal|error|agent_disconnect"}` parameters: - name: token in: path required: true schema: type: string format: uuid description: Session token obtained from POST /v1/tcp-proxy responses: '101': description: | Switching Protocols - WebSocket connection established successfully. After upgrade, the connection enters WebSocket mode for bidirectional data transfer. A JSON message `{"type": "connected", "channelId": N}` is sent after successful upgrade. headers: Upgrade: schema: type: string example: websocket Connection: schema: type: string example: Upgrade Sec-WebSocket-Accept: schema: type: string '401': description: | Unauthorized - Token is invalid, expired, or already used. WebSocket close frame with code 1008 (Policy Violation) is sent. security: [] tags: - TCP Proxy /v1/ai/chat: post: summary: Create AI chat session description: Create a new AI assistant chat session. requestBody: required: false content: application/json: schema: type: object properties: incidentId: type: integer description: Optional incident ID to associate with the chat session responses: '201': description: Chat session created successfully content: application/json: schema: type: object properties: chatId: type: integer description: ID of the created chat session created: type: string format: date-time description: Creation timestamp '400': description: Invalid incident ID '401': description: Unauthorized '500': description: Failed to create chat session security: - BearerAuth: [] tags: - AI Chat /v1/ai/chat/{chat-id}/message: post: summary: Send message to AI chat description: | Send a message to the AI assistant. Returns 202 Accepted and processes asynchronously. Use GET /v1/ai/chat/{chat-id}/status to poll for result. parameters: - name: chat-id in: path required: true schema: type: integer description: Chat session ID requestBody: required: true content: application/json: schema: type: object required: - message properties: message: type: string description: Message text to send to AI assistant context: type: object description: Optional context object passed to the AI assistant responses: '202': description: Message accepted for processing content: application/json: schema: type: object properties: status: type: string enum: [processing] '400': description: Invalid chat ID or missing message '401': description: Unauthorized '403': description: Access denied '404': description: Chat session not found '409': description: Another request is already in progress security: - BearerAuth: [] tags: - AI Chat /v1/ai/chat/{chat-id}/status: get: summary: Get AI chat processing status description: | Poll for the current processing status of an AI chat session. Returns the status (idle, processing, or completed) along with any pending question or completed response. parameters: - name: chat-id in: path required: true schema: type: integer description: Chat session ID responses: '200': description: Status retrieved successfully content: application/json: schema: type: object properties: status: type: string enum: [idle, processing, completed] description: Current processing state pendingQuestion: description: Pending question from AI (present when status is processing) nullable: true response: type: string description: AI response text (present when status is completed) nullable: true '400': description: Invalid chat ID '401': description: Unauthorized '403': description: Access denied '404': description: Chat session not found security: - BearerAuth: [] tags: - AI Chat /v1/ai/chat/{chat-id}/question: get: summary: Poll for pending AI question description: Check if the AI assistant has a pending question that needs user input. parameters: - name: chat-id in: path required: true schema: type: integer description: Chat session ID responses: '200': description: Question status retrieved content: application/json: schema: type: object properties: question: description: Pending question object, or null if no question is pending nullable: true '400': description: Invalid chat ID '401': description: Unauthorized '403': description: Access denied '404': description: Chat session not found security: - BearerAuth: [] tags: - AI Chat /v1/ai/chat/{chat-id}/answer: post: summary: Answer pending AI question description: Provide an answer to a pending question from the AI assistant. parameters: - name: chat-id in: path required: true schema: type: integer description: Chat session ID requestBody: required: true content: application/json: schema: type: object required: - questionId properties: questionId: type: integer format: int64 description: ID of the question being answered positive: type: boolean description: Whether the answer is positive (default false) selectedOption: type: integer description: Index of selected option (-1 if none) responses: '200': description: Answer accepted content: application/json: schema: type: object properties: success: type: boolean '400': description: Invalid chat ID or missing question ID '401': description: Unauthorized '403': description: Access denied '404': description: Chat session not found security: - BearerAuth: [] tags: - AI Chat /v1/ai/chat/{chat-id}/clear: post: summary: Clear AI chat history description: Clear the conversation history of an AI chat session. parameters: - name: chat-id in: path required: true schema: type: integer description: Chat session ID responses: '204': description: Chat history cleared successfully '400': description: Invalid chat ID '401': description: Unauthorized '403': description: Access denied '404': description: Chat session not found security: - BearerAuth: [] tags: - AI Chat /v1/ai/chat/{chat-id}: delete: summary: Delete AI chat session description: Delete an AI chat session and all its history. parameters: - name: chat-id in: path required: true schema: type: integer description: Chat session ID responses: '204': description: Chat session deleted successfully '400': description: Invalid chat ID '401': description: Unauthorized '403': description: Access denied '404': description: Chat session not found security: - BearerAuth: [] tags: - AI Chat /v1/alarms: get: summary: List Alarms description: Retrieve a list of alarms. parameters: - name: rootObject in: query schema: type: integer description: ID of root object for alarm retrieval (0 to retrieve all alarms) - name: includeObjectDetails in: query schema: type: boolean description: If true, include full source object details in response responses: '200': description: Successful retrieval of alarms. content: application/json: schema: type: array items: type: object properties: id: type: integer severity: type: integer state: type: integer source: type: integer message: type: string lastChangeTime: type: string format: date-time security: - BearerAuth: [] /v1/alarms/{alarm-id}: get: summary: Get details of specific alarm parameters: - name: alarm-id in: path required: true schema: type: integer responses: '200': description: Details of given alarm '401': description: Unauthorized '403': description: User does not have read access to alarm or alarm's source object '404': description: Alarm with given ID does not exist security: - BearerAuth: [] /v1/alarms/{alarm-id}/acknowledge: post: summary: Acknowledge Alarm description: Acknowledge an alarm. parameters: - name: alarm-id in: path required: true schema: type: integer responses: '204': description: Successful acknowledgement of alarm. '401': description: Unauthorized '403': description: User does not have read access to alarm or alarm's source object '404': description: Alarm with given ID does not exist security: - BearerAuth: [] /v1/alarms/{alarm-id}/resolve: post: summary: Resolve Alarm description: Resolve an alarm. parameters: - name: alarm-id in: path required: true schema: type: integer responses: '204': description: Successful resolve of alarm. '401': description: Unauthorized '403': description: User does not have read access to alarm or alarm's source object '404': description: Alarm with given ID does not exist security: - BearerAuth: [] /v1/alarms/{alarm-id}/terminate: post: summary: Terminate Alarm description: Terminate an alarm. parameters: - name: alarm-id in: path required: true schema: type: integer responses: '204': description: Successful termination of alarm. '401': description: Unauthorized '403': description: User does not have read access to alarm or alarm's source object '404': description: Alarm with given ID does not exist security: - BearerAuth: [] /v1/find/mac-address: get: summary: Find MAC address parameters: - name: macAddress in: query required: true schema: type: string description: Mac address or it's first part for search. - name: searchLimit in: query required: false schema: type: integer description: Optional. Number of results to be returned, default is 100. - name: includeObjects in: query required: false schema: type: boolean description: Optional. If provided, object information is included in response. responses: '200': description: Successful search of MAC address. content: application/json: schema: type: array items: type: object properties: localMacAddress: type: string description: Local mac address localNodeId: type: integer description: Local node id localInterfaceId: type: integer description: Local interface ID localIpAddress: type: object properties: family: type: integer description: IP address family address: type: integer description: IP address prefixLength: type: integer description: IP address prefix length type: type: string description: Connection type nodeId: type: integer description: Node or access point ID interfaceId: type: integer description: Interface ID interfaceIndex: type: integer description: Interface index '401': description: Unauthorized. security: - BearerAuth: [] /v1/grafana/infinity/alarms: post: summary: Retrieve alarms in format suitable for Grafana Infinity description: Retrieve alarms in format suitable for Grafana Infinity. requestBody: required: true content: application/json: schema: type: object properties: rootObjectId: type: integer description: Optional. ID of root object for alarm retrieval (0 to retrieve all alarms) responses: '200': description: Successful retrieval of alarms. content: application/json: schema: type: array items: $ref: '#/components/schemas/GrafanaAlarm' '401': description: Unauthorized. security: - BearerAuth: [] /v1/grafana/infinity/object-query: post: summary: Execute object query and return result in format suitable for Grafana Infinity description: Execute object query and return result in format suitable for Grafana Infinity. requestBody: required: true content: application/json: schema: type: object properties: rootObjectId: type: integer description: ID of root object for query execution queryId: type: integer description: ID of object query to be executed limit: type: integer description: Optional limit on number of retrieved objects. Limit is applied after ordering. inputFields: type: object description: User input fields (will be available in query script via global variable $INPUT). additionalProperties: type: string responses: '200': description: Successful retrieval of query results. content: application/json: schema: type: array items: type: object description: One row of result set with single object query result, fields depend on query definition '400': description: Query error '401': description: Unauthorized. security: - BearerAuth: [] /v1/grafana/infinity/summary-table: post: summary: Retrieve summary table in format suitable for Grafana Infinity description: Retrieve summary table in format suitable for Grafana Infinity. requestBody: required: true content: application/json: schema: type: object properties: rootObjectId: type: integer description: ID of root object for summary table retrieval tableId: type: integer description: ID of summary table to be retrieved responses: '200': description: Successful retrieval of summary table. content: application/json: schema: type: array items: type: object description: One row of summary table, fields depend on table definition (First column is always object name) '401': description: Unauthorized. security: - BearerAuth: [] /v1/grafana/objects/{object-id}/dci-list: get: summary: Get DCI list for Grafana description: Retrieve data collection items (DCIs) for a specific object formatted for Grafana. parameters: - name: object-id in: path required: true schema: type: integer description: Object ID responses: '200': description: DCI list retrieved successfully content: application/json: schema: type: object properties: objects: type: array items: type: object properties: id: type: integer description: DCI ID name: type: string description: DCI description '400': description: Object is not data collection target '401': description: Unauthorized '403': description: User does not have read access to given object '404': description: Object with given ID does not exist security: - BearerAuth: [] /v1/grafana/objects-status: post: summary: Get objects status for Grafana description: Retrieve status information for child objects of a root object formatted for Grafana. requestBody: required: true content: application/json: schema: type: object properties: rootObjectId: type: integer description: Root object ID to retrieve children status for required: - rootObjectId responses: '200': description: Objects status retrieved successfully content: application/json: schema: type: array items: type: object properties: Name: type: string description: Object name (may include alias in parentheses) Status: type: integer description: Object status '400': description: Invalid root object ID '401': description: Unauthorized '403': description: User does not have read access to root object '404': description: Root object with given ID does not exist security: - BearerAuth: [] /v1/grafana/object-list: get: summary: Get object list for Grafana description: Retrieve a list of objects formatted for Grafana with optional filtering. parameters: - name: filter in: query schema: type: string description: Filter type for objects (e.g., DataCollectionTarget, Summary, Alarm) responses: '200': description: Object list retrieved successfully content: application/json: schema: type: object properties: objects: type: array items: type: object properties: id: type: integer description: Object ID name: type: string description: Object name (may include alias) '401': description: Unauthorized security: - BearerAuth: [] /v1/grafana/summary-table-list: get: summary: Get summary table list for Grafana description: Retrieve a list of available DCI summary tables formatted for Grafana. responses: '200': description: Summary table list retrieved successfully content: application/json: schema: type: object properties: objects: type: array items: type: object properties: id: type: integer description: Summary table ID name: type: string description: Summary table name '401': description: Unauthorized '403': description: User does not have required system access rights security: - BearerAuth: [] /v1/grafana/query-list: get: summary: Get object query list for Grafana description: Retrieve a list of available object queries formatted for Grafana. responses: '200': description: Object query list retrieved successfully content: application/json: schema: type: object properties: objects: type: array items: type: object properties: id: type: integer description: Query ID name: type: string description: Query name '401': description: Unauthorized '403': description: User does not have required system access rights security: - BearerAuth: [] /v1/login: post: summary: User Login description: Authenticate a user and respond with a token. requestBody: required: true content: application/json: schema: type: object properties: username: type: string password: type: string method: type: string description: Choosen 2FA method. requestId: type: string description: Request ID provided by server in response to 2FA method selection. challenge: type: string description: 2FA challenge provided by server response: type: string description: 2FA response provided by client required: - username - password responses: '201': description: Successful login. content: application/json: schema: type: object properties: token: type: string description: Authentication token. userId: type: integer systemAccessRights: type: integer changePassword: type: boolean description: Indicates if password change is required for this user. graceLogins: type: integer description: Number of grace logins left if password change is required. '400': description: Bad Request - Invalid request body '401': description: Unauthorized. headers: WWW-Authenticate: description: Challenge "2FA" indicates that request should be repeated with one of provided 2FA methods. If method was provided, response will contain request ID and challenge. schema: type: string example: 2FA TOTP,Telegram '403': description: Forbidden content: application/json: schema: type: object properties: errorCode: type: integer description: Error code that can provide additional information on login failure reasons. security: [] /v1/logout: post: summary: User Logout description: Logout a user and invalidate their token. responses: '204': description: Successful logout. security: - BearerAuth: [] /v1/objects: get: summary: List objects description: Retrieve a list of objects (with optional filter). parameters: - name: filter in: query schema: type: string description: Optional filter string. If provided, only objects with name or alias containing given string will be returned. - name: parent in: query schema: type: integer description: Optional parent object ID. If provided, only child objects of given parent object will be returned, otherwise all top-level objects will be returned. responses: '200': description: Successful retrieval of objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/ObjectSummary' '401': description: Unauthorized. security: - BearerAuth: [] /v1/objects/{object-id}: get: summary: Get object details description: Retrieve specific object details. Contains data for object overview, alarms, and last values. parameters: - name: object-id in: path required: true schema: type: integer responses: '200': description: Successful retrieval of object details. content: application/json: schema: $ref: '#/components/schemas/ObjectDetails' '401': description: Unauthorized '403': description: User does not have read access to given object '404': description: Object with given ID does not exist security: - BearerAuth: [] /v1/objects/{object-id}/execute-agent-command: post: summary: Execute command on agent parameters: - name: object-id in: path required: true schema: type: integer responses: '201': description: Command executed successfully '401': description: Unauthorized '403': description: User does not have control access to given object '404': description: Object with given ID does not exist '500': description: Command execution failed content: application/json: schema: type: array items: type: object properties: reason: type: string description: Failure reason agentErrorCode: type: integer description: Error code returned by agent (if applicable) agentErrorText: type: string description: Textual description of agent error code (if applicable) security: - BearerAuth: [] /v1/objects/{object-id}/execute-script: post: summary: Execute script within context of given object parameters: - name: object-id in: path required: true schema: type: integer requestBody: required: true content: application/json: schema: type: object properties: parameters: type: array description: Optional list of parameters to be passed to the script items: type: string description: Single parameter entry resultAsMap: type: boolean description: If true, result will always be presented as a map (JSON object) script: type: string description: Source code of the script responses: '200': description: Script executed successfully '400': description: Invalid arguments '401': description: Unauthorized '403': description: User does not have control access to given object '404': description: Object with given ID does not exist '500': description: Script execution failed content: application/json: schema: type: object properties: diagnostic: type: object description: Additional diagnostic information, if available reason: type: string description: Failure reason security: - BearerAuth: [] /v1/objects/{object-id}/data-collection/current-values: get: summary: Get current DCI values description: Retrieve current values for all data collection items (DCIs) of a given object. parameters: - name: object-id in: path required: true schema: type: integer description: Object ID responses: '200': description: Current DCI values retrieved successfully content: application/json: schema: type: object properties: objectId: type: integer description: Object ID objectName: type: string description: Object name values: type: array items: $ref: '#/components/schemas/DCIValue' '400': description: Object is not data collection target '401': description: Unauthorized '403': description: User does not have read access to given object '404': description: Object with given ID does not exist security: - BearerAuth: [] /v1/objects/{object-id}/data-collection/{dci-id}/history: get: summary: Get data collection history description: Retrieve historical data for a specific DCI (Data Collection Item). parameters: - name: object-id in: path required: true schema: type: integer description: Object ID - name: dci-id in: path required: true schema: type: integer description: DCI (Data Collection Item) ID - name: timeFrom in: query schema: type: integer description: Start time for data retrieval (Unix timestamp) - name: timeTo in: query schema: type: integer description: End time for data retrieval (Unix timestamp) - name: maxRows in: query schema: type: integer description: Maximum number of data points to return - name: historicalDataType in: query schema: type: integer description: Type of historical data (0=raw, 1=processed, 2=full table, 3=raw and processed) responses: '200': description: Data collection history retrieved successfully content: application/json: schema: type: object properties: description: type: string description: DCI description unitName: type: string description: Unit name for the value values: type: array items: type: object properties: timestamp: type: string format: date-time value: type: string description: Data value '400': description: Object is not data collection target or DCI type not supported '401': description: Unauthorized '403': description: User does not have read access to given object '404': description: Object or DCI with given ID does not exist '500': description: Database failure security: - BearerAuth: [] /v1/objects/{object-id}/data-collection/performance-view: get: summary: Get performance view DCIs description: Retrieve data collection items configured for the performance view tab, including parsed chart configuration settings. parameters: - name: object-id in: path required: true schema: type: integer description: Object ID responses: '200': description: Performance view DCIs retrieved successfully content: application/json: schema: type: object properties: dcis: type: array items: type: object properties: id: type: integer description: DCI ID name: type: string description: DCI name description: type: string description: DCI description instance: type: string description: Instance value instanceName: type: string description: Instance display name dataType: type: integer description: Data type (0=integer, 1=unsigned integer, 2=int64, 3=unsigned int64, 4=string, 5=float, 6=null, 7=counter32, 8=counter64) templateDciId: type: integer description: Template DCI ID (0 if not from template) rootTemplateDciId: type: integer description: Root template DCI ID for instance discovery chartConfig: type: object description: Chart configuration parsed from perfTabSettings XML properties: enabled: type: boolean type: type: integer description: Chart type title: type: string name: type: string description: Legend name groupName: type: string nullable: true description: Chart group name order: type: integer description: Display order within group color: type: string description: Line color (e.g. "0x00C000") automaticColor: type: boolean autoScale: type: boolean minYScaleValue: type: number maxYScaleValue: type: number logScaleEnabled: type: boolean stacked: type: boolean showLegendAlways: type: boolean extendedLegend: type: boolean useMultipliers: type: boolean showThresholds: type: boolean timeRange: type: integer timeUnits: type: integer description: Time units (0=minutes, 1=hours, 2=days) yAxisLabel: type: string invertedValues: type: boolean translucent: type: boolean modifyYBase: type: boolean parentDciId: type: integer '400': description: Object is not data collection target '401': description: Unauthorized '403': description: User does not have read access to given object '404': description: Object with given ID does not exist security: - BearerAuth: [] /v1/objects/{object-id}/expand-text: post: summary: Expand text macros description: Expand text containing NetXMS macros in the context of a given object. parameters: - name: object-id in: path required: true schema: type: integer description: Object ID requestBody: required: true content: application/json: schema: type: object required: - text properties: text: type: string description: Text containing macros to expand alarmId: type: integer description: Optional alarm ID for alarm-related macro expansion inputFields: type: object description: Optional key-value pairs for custom macro substitution additionalProperties: type: string responses: '200': description: Text expanded successfully content: application/json: schema: type: object properties: expandedText: type: string description: Text with all macros expanded '400': description: Invalid request or missing text parameter '401': description: Unauthorized '403': description: User does not have read access to given object or alarm '404': description: Object with given ID does not exist security: - BearerAuth: [] /v1/objects/{object-id}/remote-control: post: summary: Create Remote Control Session description: | Create a remote control (VNC) session for a node and return a short-lived token for WebSocket connection. This is a convenience endpoint that automatically determines VNC connection parameters based on the node's configuration. The endpoint uses the node's configured VNC port and proxy settings to establish a TCP tunnel. The returned token should be used to connect to the WebSocket endpoint `/v1/tcp-proxy/{token}`. **Two-Phase Authorization Flow:** 1. Call this endpoint with Bearer token authentication 2. Server establishes VNC tunnel via agent and returns a session token 3. Connect to `/v1/tcp-proxy/{token}` WebSocket endpoint (no auth header needed) **Required Permissions:** - System access right: SYSTEM_ACCESS_SETUP_TCP_PROXY - Object access rights: OBJECT_ACCESS_READ and OBJECT_ACCESS_CONTROL on the node tags: - Objects - TCP Proxy parameters: - name: object-id in: path required: true schema: type: integer description: Node object ID requestBody: required: true content: application/json: schema: type: object properties: allowControlMessages: type: boolean description: If true, server will send JSON control messages in text frames (default is false) responses: '201': description: Remote control session created successfully. content: application/json: schema: type: object properties: token: type: string format: uuid description: Session token for WebSocket connection expiresIn: type: integer description: Token validity period in seconds wsUrl: type: string description: WebSocket URL path to connect to example: token: "a1b2c3d4-e5f6-7890-abcd-ef1234567890" expiresIn: 30 wsUrl: "/v1/tcp-proxy/a1b2c3d4-e5f6-7890-abcd-ef1234567890" '400': description: | Bad Request - Object is not a node or VNC port not configured. '401': description: Unauthorized - Authentication token missing or invalid '403': description: | Forbidden - User does not have required permissions. Either SYSTEM_ACCESS_SETUP_TCP_PROXY, OBJECT_ACCESS_READ, or OBJECT_ACCESS_CONTROL is missing. '404': description: Object not found - Invalid object ID '502': description: | Bad Gateway - Cannot establish connection to agent. Agent may be unreachable or TCP proxy setup failed. '503': description: Service Unavailable - No proxy node available security: - BearerAuth: [] /v1/objects/{object-id}/set-maintenance: post: summary: Make object enter or leave maintenance mode parameters: - name: object-id in: path required: true schema: type: integer requestBody: required: true content: application/json: schema: type: object properties: maintenance: type: boolean description: true - if object should enter maintenance mode, false - if leave comments: type: string description: Optional maintenance comments responses: '200': description: Maintenance mode changed successfully '400': description: Invalid arguments '401': description: Unauthorized '403': description: User does not have control access to given object '404': description: Object with given ID does not exist security: - BearerAuth: [] /v1/objects/{object-id}/set-managed: post: summary: Manage or unmanage object parameters: - name: object-id in: path required: true schema: type: integer requestBody: required: true content: application/json: schema: type: object properties: managed: type: boolean description: true - for manage object, false - for object unmanage responses: '200': description: Object successfully managed/unmanaged '400': description: Invalid arguments '401': description: Unauthorized '403': description: User does not have control access to given object '404': description: Object with given ID does not exist security: - BearerAuth: [] /v1/objects/{object-id}/take-screenshot: get: summary: Take screenshot from remote system via NetXMS agent parameters: - name: object-id in: path required: true schema: type: integer - name: sessionName description: Session name to take screenshot from. If not provided screenshot will be taken from console session. in: query required: false schema: type: string responses: '200': description: Screenshot successfully taken. content: image/png: schema: type: string '401': description: Unauthorized '403': description: User does not have read access to given object '404': description: Object with given ID does not exist '500': description: Server side error (common reason is failed communication to agent). Response document may contain detailed failure reason. security: - BearerAuth: [] /v1/objects/{object-id}/status-explanation: get: summary: Get object status explanation description: Retrieve a detailed explanation of how the object's status was calculated, including the algorithm used, child object statuses, and status propagation details. parameters: - name: object-id in: path required: true schema: type: integer description: Object ID responses: '200': description: Status explanation retrieved successfully content: application/json: schema: type: object properties: objectId: type: integer description: Object ID objectName: type: string description: Object name status: type: integer description: Current object status statusText: type: string description: Human-readable status name unmanaged: type: boolean description: Present and true if object is unmanaged algorithm: type: string description: Status calculation algorithm name childStatuses: type: array description: Status information for child objects items: type: object properties: objectId: type: integer objectName: type: string status: type: integer statusText: type: string '400': description: Invalid object ID '401': description: Unauthorized '403': description: User does not have read access to given object '404': description: Object with given ID does not exist security: - BearerAuth: [] tags: - Objects /v1/objects/{object-id}/sub-tree: get: summary: Get object sub-tree description: Retrieve a sub-tree of objects starting from the specified parent object. parameters: - name: object-id in: path required: true schema: type: integer description: Parent object ID - name: filter in: query schema: type: string description: Optional filter string. If provided, only objects with name or alias containing given string will be returned. responses: '200': description: Object sub-tree retrieved successfully content: application/json: schema: type: array items: $ref: '#/components/schemas/ObjectSummary' '401': description: Unauthorized '403': description: User does not have read access to given object '404': description: Object with given ID does not exist security: - BearerAuth: [] /v1/objects/query: post: summary: Execute object query description: Execute object query (specialized NXSL script) and return all matching objects along with additional data fields. requestBody: required: true content: application/json: schema: type: object properties: fields: type: array description: List of additional fields to be retrieved. items: type: string inputFields: type: array description: List of user input fields (will be available in query script via global variable $INPUT). items: type: object additionalProperties: type: string description: Set of key-value pairs where key is input field name and value is actual value provided by user. limit: type: integer description: Optional limit on number of retrieved objects. Limit is applied after ordering. orderBy: type: array description: List of object attributes to be used for ordering result. items: type: string query: type: string description: Object query script example: type == NODE responses: '200': description: Query successfully executed. content: application/json: schema: type: array items: $ref: '#/components/schemas/ObjectQueryResult' '401': description: Unauthorized. security: - BearerAuth: [] /v1/objects/search: post: summary: Search objects description: Search for objects matching certain criteria. Multiple criterias will be combined with logical AND. requestBody: required: true content: application/json: schema: type: object properties: class: type: array items: $ref: '#/components/schemas/ObjectClass' ipAddress: type: string format: ip-address description: IP address filter string. If provided, only objects with matching primary IP address will be returned. name: type: string description: Name filter string. If provided, only objects with name or alias containing given string will be returned. parent: type: integer description: Parent object ID. If provided, only child objects (both direct and indirect) of given parent object will be returned. zoneUIN: type: integer description: Zone UIN. If provided, only objects within given zone will be returned. responses: '200': description: Successful retrieval of objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/ObjectSummary' '401': description: Unauthorized. security: - BearerAuth: [] /v1/script-library: get: summary: List all scripts description: Retrieve a list of all scripts in the script library (ID and name only). responses: '200': description: Script list retrieved successfully content: application/json: schema: type: array items: $ref: '#/components/schemas/ScriptSummary' '401': description: Unauthorized '403': description: User does not have SYSTEM_ACCESS_MANAGE_SCRIPTS permission security: - BearerAuth: [] tags: - Script Library post: summary: Create new script description: Create a new script in the script library. requestBody: required: true content: application/json: schema: type: object required: - name - code properties: name: type: string description: Script name (alphanumeric, underscore, colon; must not start with digit or colon) code: type: string description: NXSL source code responses: '201': description: Script created successfully content: application/json: schema: type: object properties: id: type: integer description: ID of the newly created script '400': description: Missing or invalid name/code, or invalid script name format '401': description: Unauthorized '403': description: User does not have SYSTEM_ACCESS_MANAGE_SCRIPTS permission '500': description: Database failure security: - BearerAuth: [] tags: - Script Library /v1/script-library/{script-id}: get: summary: Get script details description: Retrieve a script with its full source code. parameters: - name: script-id in: path required: true schema: type: integer description: Script ID responses: '200': description: Script details retrieved successfully content: application/json: schema: $ref: '#/components/schemas/ScriptDetails' '400': description: Invalid script ID '401': description: Unauthorized '403': description: User does not have SYSTEM_ACCESS_MANAGE_SCRIPTS permission '404': description: Script with given ID does not exist security: - BearerAuth: [] tags: - Script Library put: summary: Update script description: Update an existing script's name and/or code. parameters: - name: script-id in: path required: true schema: type: integer description: Script ID requestBody: required: true content: application/json: schema: type: object required: - name - code properties: name: type: string description: Script name (alphanumeric, underscore, colon; must not start with digit or colon) code: type: string description: NXSL source code responses: '200': description: Script updated successfully content: application/json: schema: type: object properties: id: type: integer description: ID of the updated script '400': description: Missing or invalid name/code, or invalid script name format '401': description: Unauthorized '403': description: User does not have SYSTEM_ACCESS_MANAGE_SCRIPTS permission '404': description: Script with given ID does not exist '500': description: Database failure security: - BearerAuth: [] tags: - Script Library delete: summary: Delete script description: Delete a script from the script library. parameters: - name: script-id in: path required: true schema: type: integer description: Script ID responses: '204': description: Script deleted successfully '400': description: Invalid script ID '401': description: Unauthorized '403': description: User does not have SYSTEM_ACCESS_MANAGE_SCRIPTS permission '404': description: Script with given ID does not exist '500': description: Database failure security: - BearerAuth: [] tags: - Script Library /v1/server-actions: get: summary: List server actions description: Retrieve a list of all server actions defined in the system. responses: '200': description: Server actions retrieved successfully content: application/json: schema: type: array items: $ref: '#/components/schemas/ServerAction' '401': description: Unauthorized '403': description: User does not have MANAGE_ACTIONS or EPP access rights security: - BearerAuth: [] tags: - Server Actions post: summary: Create server action description: | Create a new server action. Only the name field is required. Additional fields (type, data, etc.) can optionally be included to configure the action immediately after creation. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ServerActionCreate' example: name: "Send email notification" responses: '201': description: Server action created successfully content: application/json: schema: $ref: '#/components/schemas/ServerAction' '400': description: Missing or invalid name field '401': description: Unauthorized '403': description: User does not have MANAGE_ACTIONS access right '409': description: Action with this name already exists '500': description: Database failure security: - BearerAuth: [] tags: - Server Actions /v1/server-actions/{action-id}: get: summary: Get server action details description: Retrieve details of a specific server action by its ID. parameters: - name: action-id in: path required: true schema: type: integer description: Action ID responses: '200': description: Server action retrieved successfully content: application/json: schema: $ref: '#/components/schemas/ServerAction' '400': description: Invalid action ID '401': description: Unauthorized '403': description: User does not have MANAGE_ACTIONS or EPP access rights '404': description: Server action not found security: - BearerAuth: [] tags: - Server Actions put: summary: Update server action description: Update an existing server action. Only the fields provided in the request body will be modified. parameters: - name: action-id in: path required: true schema: type: integer description: Action ID requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ServerActionUpdate' responses: '200': description: Server action updated successfully content: application/json: schema: $ref: '#/components/schemas/ServerAction' '400': description: Invalid action ID '401': description: Unauthorized '403': description: User does not have MANAGE_ACTIONS access right '404': description: Server action not found '409': description: Action with this name already exists '500': description: Database failure security: - BearerAuth: [] tags: - Server Actions delete: summary: Delete server action description: | Delete a server action. The action cannot be deleted if it is currently used in any event processing policy rule. parameters: - name: action-id in: path required: true schema: type: integer description: Action ID responses: '204': description: Server action deleted successfully '400': description: Invalid action ID '401': description: Unauthorized '403': description: User does not have MANAGE_ACTIONS access right '404': description: Server action not found '409': description: Action is used in event processing policy '500': description: Database failure security: - BearerAuth: [] tags: - Server Actions /v1/object-tools: get: summary: List available object tools description: Retrieve a list of object tools with basic information. parameters: - name: types in: query required: false schema: type: string description: Comma-separated list of tool types to filter by. Uses kebab-case format (e.g., "action,command,server-script,agent-list,file-download") responses: '200': description: Successful retrieval of object tools. content: application/json: schema: type: array items: $ref: '#/components/schemas/ObjectToolSummary' '500': description: Database failure. security: - BearerAuth: [] /v1/object-tools/{tool-id}: get: summary: Get object tool details description: Retrieve full details of a specific object tool. parameters: - name: tool-id in: path required: true schema: type: integer description: Object tool ID responses: '200': description: Successful retrieval of object tool details. content: application/json: schema: $ref: '#/components/schemas/ObjectToolDetails' '400': description: Invalid tool ID. '403': description: Access denied. '404': description: Tool not found. '500': description: Database failure. security: - BearerAuth: [] /v1/object-tools/{tool-id}/execute: post: summary: Execute an object tool description: | Execute a server-capable object tool on the specified object. Supported tool types: action (agent action), server-command, server-script, snmp-table, agent-table, agent-list, ssh-command. Client-only tool types (internal, url, command, file-download) are rejected with 400. tags: - Object Tools parameters: - name: tool-id in: path required: true schema: type: integer description: Object tool ID requestBody: required: true content: application/json: schema: type: object required: - objectId properties: objectId: type: integer description: ID of the target object to execute the tool on alarmId: type: integer description: Optional alarm ID for macro expansion context default: 0 inputFields: type: object additionalProperties: type: string description: Optional input field values for macro expansion responses: '200': description: Tool executed successfully content: application/json: schema: oneOf: - $ref: '#/components/schemas/ObjectToolTextResult' - $ref: '#/components/schemas/ObjectToolTableResult' - $ref: '#/components/schemas/ObjectToolNoResult' discriminator: propertyName: type mapping: text: '#/components/schemas/ObjectToolTextResult' table: '#/components/schemas/ObjectToolTableResult' none: '#/components/schemas/ObjectToolNoResult' '400': description: | Invalid request. Possible reasons: - Invalid or missing tool-id - Missing or invalid objectId - Tool type is client-only (internal, url, command, file-download) - Incompatible object class for the tool type - Object is not a node (for tools requiring a node target) '403': description: | Access denied. Possible reasons: - User does not have access to the tool (tool ACL) - User does not have OBJECT_ACCESS_CONTROL on the target object - User does not have access to the specified alarm '404': description: | Not found. Possible reasons: - Object tool with the given ID does not exist - Target object with the given objectId does not exist - Script not found in library (for server-script tools) '500': description: | Execution failed. Possible reasons: - Database failure loading tool metadata - Cannot connect to agent - Command execution failed - Script execution failed - Table tool execution failed - SSH proxy not available '504': description: Server command execution timed out. security: - BearerAuth: [] /v1/event-templates: get: summary: List event templates description: Retrieve a list of all event templates defined in the system. responses: '200': description: Event templates retrieved successfully content: application/json: schema: type: array items: $ref: '#/components/schemas/EventTemplate' '401': description: Unauthorized '403': description: User does not have VIEW_EVENT_DB, EDIT_EVENT_DB, or EPP access rights security: - BearerAuth: [] tags: - Event Templates post: summary: Create event template description: Create a new event template. The server assigns a unique event code automatically. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/EventTemplateInput' example: name: MY_CUSTOM_EVENT severity: 2 flags: 1 message: "Custom event: %1" description: "Custom event template for testing" tags: "tag1,tag2" responses: '201': description: Event template created successfully content: application/json: schema: $ref: '#/components/schemas/EventTemplate' '400': description: Invalid event name '401': description: Unauthorized '403': description: User does not have EDIT_EVENT_DB access right '409': description: Event with this name already exists '500': description: Database failure security: - BearerAuth: [] tags: - Event Templates /v1/event-templates/{event-code}: get: summary: Get event template details description: Retrieve details of a specific event template by its event code. parameters: - name: event-code in: path required: true schema: type: integer description: Event code responses: '200': description: Event template retrieved successfully content: application/json: schema: $ref: '#/components/schemas/EventTemplate' '400': description: Invalid event code '401': description: Unauthorized '403': description: User does not have VIEW_EVENT_DB, EDIT_EVENT_DB, or EPP access rights '404': description: Event template not found security: - BearerAuth: [] tags: - Event Templates put: summary: Update event template description: Update an existing event template. Only the fields provided in the request body will be modified. parameters: - name: event-code in: path required: true schema: type: integer description: Event code requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/EventTemplateInput' responses: '200': description: Event template updated successfully content: application/json: schema: $ref: '#/components/schemas/EventTemplate' '400': description: Invalid event code or invalid event name '401': description: Unauthorized '403': description: User does not have EDIT_EVENT_DB access right '404': description: Event template not found '409': description: Event with this name already exists '500': description: Database failure security: - BearerAuth: [] tags: - Event Templates delete: summary: Delete event template description: | Delete an event template. Only user-defined event templates (event code >= 100000) can be deleted. System event templates cannot be deleted. parameters: - name: event-code in: path required: true schema: type: integer description: Event code (must be >= 100000) responses: '204': description: Event template deleted successfully '400': description: Invalid event code or attempt to delete a system event template '401': description: Unauthorized '403': description: User does not have EDIT_EVENT_DB access right '404': description: Event template not found '500': description: Database failure security: - BearerAuth: [] tags: - Event Templates /v1/dci-summary-tables: get: summary: List DCI summary tables description: Retrieve a list of available DCI summary tables. responses: '200': description: DCI summary tables retrieved successfully content: application/json: schema: type: array items: $ref: '#/components/schemas/SummaryTableListEntry' '401': description: Unauthorized '500': description: Database failure security: - BearerAuth: [] tags: - DCI Summary Tables post: summary: Create DCI summary table description: Create a new DCI summary table. Requires MANAGE_SUMMARY_TBLS access right. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SummaryTableInput' responses: '201': description: Summary table created successfully content: application/json: schema: type: object properties: id: type: integer description: ID of the newly created summary table '400': description: Invalid request or missing title field '401': description: Unauthorized '403': description: User does not have MANAGE_SUMMARY_TBLS access right '500': description: Database failure security: - BearerAuth: [] tags: - DCI Summary Tables /v1/dci-summary-tables/{table-id}: get: summary: Get DCI summary table details description: Retrieve full details of a specific DCI summary table including columns and filter. Requires MANAGE_SUMMARY_TBLS access right. parameters: - name: table-id in: path required: true schema: type: integer description: Summary table ID responses: '200': description: Summary table details retrieved successfully content: application/json: schema: $ref: '#/components/schemas/SummaryTableDetails' '400': description: Invalid summary table ID '401': description: Unauthorized '403': description: User does not have MANAGE_SUMMARY_TBLS access right '404': description: Summary table not found '500': description: Database failure security: - BearerAuth: [] tags: - DCI Summary Tables put: summary: Update DCI summary table description: Update an existing DCI summary table. Requires MANAGE_SUMMARY_TBLS access right. parameters: - name: table-id in: path required: true schema: type: integer description: Summary table ID requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SummaryTableInput' responses: '200': description: Summary table updated successfully '400': description: Invalid summary table ID or missing title field '401': description: Unauthorized '403': description: User does not have MANAGE_SUMMARY_TBLS access right '404': description: Summary table not found '500': description: Database failure security: - BearerAuth: [] tags: - DCI Summary Tables delete: summary: Delete DCI summary table description: Delete a DCI summary table. Requires MANAGE_SUMMARY_TBLS access right. parameters: - name: table-id in: path required: true schema: type: integer description: Summary table ID responses: '204': description: Summary table deleted successfully '400': description: Invalid summary table ID '401': description: Unauthorized '403': description: User does not have MANAGE_SUMMARY_TBLS access right '500': description: Database failure security: - BearerAuth: [] tags: - DCI Summary Tables /v1/dci-summary-tables/{table-id}/query: post: summary: Query specific DCI summary table description: Execute a query on a specific DCI summary table. parameters: - name: table-id in: path required: true schema: type: integer description: Summary table ID requestBody: required: true content: application/json: schema: type: object properties: objectId: type: integer description: Root object ID for table query responses: '200': description: Summary table query executed successfully content: application/json: schema: type: array items: type: object description: Summary table row data '400': description: Invalid request or invalid summary table ID '401': description: Unauthorized '403': description: Access denied '500': description: Query execution failed security: - BearerAuth: [] tags: - DCI Summary Tables /v1/dci-summary-tables/adhoc-query: post: summary: Execute ad-hoc DCI summary table query description: Execute an ad-hoc query on DCI summary tables. requestBody: required: true content: application/json: schema: type: object required: - tableDefinition properties: tableDefinition: type: object description: Summary table definition object objectId: type: integer description: Root object ID for table query responses: '200': description: Ad-hoc query executed successfully content: application/json: schema: type: array items: type: object description: Query result row data '400': description: Invalid request or missing table definition '401': description: Unauthorized '403': description: Access denied '500': description: Query execution failed security: - BearerAuth: [] tags: - DCI Summary Tables /v1/users: get: summary: List users description: Retrieve a list of all users defined in the system. Requires MANAGE_USERS access right. responses: '200': description: Users retrieved successfully content: application/json: schema: type: array items: $ref: '#/components/schemas/User' '401': description: Unauthorized '403': description: User does not have MANAGE_USERS access right security: - BearerAuth: [] tags: - Users post: summary: Create user description: Create a new user. Requires MANAGE_USERS access right. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UserCreateInput' example: name: jdoe responses: '201': description: User created successfully content: application/json: schema: $ref: '#/components/schemas/User' '400': description: Invalid or missing name '401': description: Unauthorized '403': description: User does not have MANAGE_USERS access right '409': description: User with this name already exists '500': description: Database failure security: - BearerAuth: [] tags: - Users /v1/users/{user-id}: get: summary: Get user details description: Retrieve details of a specific user by ID. Requires MANAGE_USERS access right. parameters: - name: user-id in: path required: true schema: type: integer description: User ID responses: '200': description: User retrieved successfully content: application/json: schema: $ref: '#/components/schemas/User' '401': description: Unauthorized '403': description: User does not have MANAGE_USERS access right '404': description: User not found security: - BearerAuth: [] tags: - Users put: summary: Update user description: Update an existing user. Only the fields provided in the request body will be modified. Requires MANAGE_USERS access right. parameters: - name: user-id in: path required: true schema: type: integer description: User ID requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UserUpdateInput' responses: '200': description: User updated successfully content: application/json: schema: $ref: '#/components/schemas/User' '400': description: Invalid user ID or invalid user name '401': description: Unauthorized '403': description: User does not have MANAGE_USERS access right '404': description: User not found '409': description: User with this name already exists '500': description: Database failure security: - BearerAuth: [] tags: - Users delete: summary: Delete user description: | Delete a user. The system user (ID 0) cannot be deleted. Users that are currently logged in cannot be deleted. parameters: - name: user-id in: path required: true schema: type: integer description: User ID responses: '204': description: User deleted successfully '400': description: Invalid user ID or attempt to delete system user '401': description: Unauthorized '403': description: User does not have MANAGE_USERS access right '404': description: User not found '409': description: User is currently logged in '500': description: Database failure security: - BearerAuth: [] tags: - Users /v1/users/{user-id}/password: post: summary: Set user password description: | Set or change a user's password. If `oldPassword` is provided, it is treated as a self-change (user changing their own password). If `oldPassword` is omitted, it is treated as an administrative password reset. Users can change their own password without MANAGE_USERS access right. Administrative password reset requires MANAGE_USERS access right. parameters: - name: user-id in: path required: true schema: type: integer description: User ID requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PasswordInput' responses: '200': description: Password changed successfully '400': description: Missing newPassword, weak password, or recently used password '401': description: Unauthorized '403': description: Access denied (wrong old password or insufficient rights) '404': description: User not found '500': description: Database failure security: - BearerAuth: [] tags: - Users /v1/user-groups: get: summary: List user groups description: Retrieve a list of all user groups defined in the system. Requires MANAGE_USERS access right. responses: '200': description: User groups retrieved successfully content: application/json: schema: type: array items: $ref: '#/components/schemas/UserGroup' '401': description: Unauthorized '403': description: User does not have MANAGE_USERS access right security: - BearerAuth: [] tags: - User Groups post: summary: Create user group description: Create a new user group. Requires MANAGE_USERS access right. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UserCreateInput' example: name: operators responses: '201': description: User group created successfully content: application/json: schema: $ref: '#/components/schemas/UserGroup' '400': description: Invalid or missing name '401': description: Unauthorized '403': description: User does not have MANAGE_USERS access right '409': description: Group with this name already exists '500': description: Database failure security: - BearerAuth: [] tags: - User Groups /v1/user-groups/{group-id}: get: summary: Get user group details description: Retrieve details of a specific user group by ID. Group IDs include the GROUP_FLAG bit (0x40000000). Requires MANAGE_USERS access right. parameters: - name: group-id in: path required: true schema: type: integer description: Group ID (includes GROUP_FLAG bit, e.g. 1073741824 for Everyone) responses: '200': description: User group retrieved successfully content: application/json: schema: $ref: '#/components/schemas/UserGroup' '400': description: Invalid group ID (missing GROUP_FLAG bit) '401': description: Unauthorized '403': description: User does not have MANAGE_USERS access right '404': description: User group not found security: - BearerAuth: [] tags: - User Groups put: summary: Update user group description: Update an existing user group. Only the fields provided in the request body will be modified. Requires MANAGE_USERS access right. parameters: - name: group-id in: path required: true schema: type: integer description: Group ID (includes GROUP_FLAG bit) requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UserGroupUpdateInput' responses: '200': description: User group updated successfully content: application/json: schema: $ref: '#/components/schemas/UserGroup' '400': description: Invalid group ID or invalid group name '401': description: Unauthorized '403': description: User does not have MANAGE_USERS access right '404': description: User group not found '409': description: Group with this name already exists '500': description: Database failure security: - BearerAuth: [] tags: - User Groups delete: summary: Delete user group description: | Delete a user group. The "Everyone" group (ID 1073741824) cannot be deleted. parameters: - name: group-id in: path required: true schema: type: integer description: Group ID (includes GROUP_FLAG bit) responses: '204': description: User group deleted successfully '400': description: Invalid group ID or attempt to delete Everyone group '401': description: Unauthorized '403': description: User does not have MANAGE_USERS access right '404': description: User group not found '500': description: Database failure security: - BearerAuth: [] tags: - User Groups components: schemas: Alarm: type: object properties: id: type: integer message: type: string severity: type: string User: type: object description: User account properties: id: type: integer description: User ID guid: type: string format: uuid description: User GUID name: type: string description: Login name description: type: string description: User description systemRights: type: integer description: System access rights bitmask uiAccessRules: type: string description: UI access rules flags: type: integer description: User flags bitmask attributes: type: object additionalProperties: type: string description: Custom attributes ldapDn: type: string nullable: true description: LDAP distinguished name ldapId: type: string nullable: true description: LDAP unique ID created: type: integer description: Account creation time (Unix timestamp) fullName: type: string description: Full name graceLogins: type: integer description: Remaining grace logins authMethod: type: integer description: "Authentication method (0=Local, 1=RADIUS, 2=Certificate, 3=Certificate or Local, 4=Certificate or RADIUS, 5=LDAP)" certMappingMethod: type: integer description: Certificate mapping method certMappingData: type: string nullable: true description: Certificate mapping data disabledUntil: type: integer description: Disabled until time (Unix timestamp, 0 if not temporarily disabled) lastPasswordChange: type: integer description: Last password change time (Unix timestamp) lastLogin: type: integer description: Last login time (Unix timestamp) minPasswordLength: type: integer description: Minimum password length (-1 for system default) authFailures: type: integer description: Consecutive authentication failure count email: type: string description: Email address phoneNumber: type: string description: Phone number UserGroup: type: object description: User group properties: id: type: integer description: Group ID (includes GROUP_FLAG bit 0x40000000) guid: type: string format: uuid description: Group GUID name: type: string description: Group name description: type: string description: Group description systemRights: type: integer description: System access rights bitmask uiAccessRules: type: string description: UI access rules flags: type: integer description: Group flags bitmask attributes: type: object additionalProperties: type: string description: Custom attributes ldapDn: type: string nullable: true description: LDAP distinguished name ldapId: type: string nullable: true description: LDAP unique ID created: type: integer description: Group creation time (Unix timestamp) members: type: array items: type: integer description: List of member user IDs UserCreateInput: type: object description: User or group creation request required: - name properties: name: type: string description: Login name (must be a valid object name) UserUpdateInput: type: object description: User update request. All fields are optional - only provided fields are modified. properties: name: type: string description: New login name description: type: string description: User description fullName: type: string description: Full name flags: type: integer description: User flags bitmask systemRights: type: integer description: System access rights bitmask uiAccessRules: type: string description: UI access rules authMethod: type: integer description: Authentication method minPasswordLength: type: integer description: Minimum password length disabledUntil: type: integer description: Disabled until time (Unix timestamp) certMappingMethod: type: integer description: Certificate mapping method certMappingData: type: string description: Certificate mapping data email: type: string description: Email address phoneNumber: type: string description: Phone number attributes: type: object additionalProperties: type: string description: Custom attributes (replaces all existing attributes) groupMembership: type: array items: type: integer description: List of group IDs the user should belong to (replaces current membership) UserGroupUpdateInput: type: object description: User group update request. All fields are optional - only provided fields are modified. properties: name: type: string description: New group name description: type: string description: Group description flags: type: integer description: Group flags bitmask systemRights: type: integer description: System access rights bitmask uiAccessRules: type: string description: UI access rules attributes: type: object additionalProperties: type: string description: Custom attributes (replaces all existing attributes) members: type: array items: type: integer description: List of member user IDs (replaces current members) PasswordInput: type: object description: Password change request required: - newPassword properties: newPassword: type: string description: The new password oldPassword: type: string description: Current password (required for self-change, omit for admin reset) EventTemplate: type: object description: Event template definition properties: code: type: integer description: Unique event code name: type: string description: Event name (unique identifier) guid: type: string format: uuid description: Event template GUID severity: type: integer description: "Default event severity (0=Normal, 1=Warning, 2=Minor, 3=Major, 4=Critical)" flags: type: integer description: Event flags bitmask (1=write to log) message: type: string description: Message template with %1..%n parameter placeholders description: type: string description: Detailed event description tags: type: array items: type: string description: List of event tags EventTemplateInput: type: object description: Event template create/update request body properties: name: type: string description: Event name (must be a valid object name, unique across all event templates) severity: type: integer description: "Default event severity (0=Normal, 1=Warning, 2=Minor, 3=Major, 4=Critical)" flags: type: integer description: Event flags bitmask (1=write to log) message: type: string description: Message template with %1..%n parameter placeholders description: type: string description: Detailed event description tags: type: string description: Comma-separated list of event tags SummaryTableListEntry: type: object description: DCI summary table list entry properties: id: type: integer description: Summary table ID menuPath: type: string description: Menu path for the summary table title: type: string description: Summary table title flags: type: integer description: Summary table flags guid: type: string format: uuid description: Summary table GUID SummaryTableDetails: type: object description: Full DCI summary table definition properties: id: type: integer description: Summary table ID guid: type: string format: uuid description: Summary table GUID menuPath: type: string description: Menu path for the summary table title: type: string description: Summary table title flags: type: integer description: Summary table flags nodeFilter: type: string description: NXSL filter script source tableDciName: type: string description: Table DCI name (for table-based summary tables) columns: type: array items: $ref: '#/components/schemas/SummaryTableColumn' description: Column definitions SummaryTableColumn: type: object description: DCI summary table column definition properties: name: type: string description: Column display name dciName: type: string description: DCI name to collect data from flags: type: integer description: Column flags separator: type: string description: Multi-value separator (default ";") SummaryTableInput: type: object description: DCI summary table create/update request body required: - title properties: title: type: string description: Summary table title menuPath: type: string description: Menu path for the summary table nodeFilter: type: string description: NXSL filter script source flags: type: integer description: Summary table flags tableDciName: type: string description: Table DCI name (for table-based summary tables) columns: type: array items: $ref: '#/components/schemas/SummaryTableColumn' description: Column definitions ScriptSummary: type: object properties: id: type: integer description: Script ID name: type: string description: Script name ScriptDetails: type: object properties: id: type: integer description: Script ID name: type: string description: Script name code: type: string description: NXSL source code ObjectToolType: type: string enum: - internal - action - snmp-table - agent-list - url - command - server-command - file-download - server-script - agent-table - ssh-command description: Type of object tool ObjectToolInputField: type: object properties: name: type: string description: Field name type: type: integer description: Field type displayName: type: string description: Display name for the field flags: type: integer description: Field flags sequence: type: integer description: Field sequence order ObjectToolSummary: type: object properties: id: type: integer description: Tool ID name: type: string description: Tool name type: $ref: '#/components/schemas/ObjectToolType' askConfirmation: type: boolean description: Whether to ask for user confirmation before execution generatesOutput: type: boolean description: Whether the tool generates output disabled: type: boolean description: Whether the tool is disabled showInCommands: type: boolean description: Whether to show in commands menu snmpIndexedByValue: type: boolean description: Whether SNMP is indexed by value runInContainerContext: type: boolean description: Whether to run in container context suppressSuccessMessage: type: boolean description: Whether to suppress success message setupTcpTunnel: type: boolean description: Whether to setup TCP tunnel confirmationMessage: type: string description: Confirmation message shown to user commandName: type: string description: Full command name commandShortName: type: string description: Short command name inputFields: type: array items: $ref: '#/components/schemas/ObjectToolInputField' description: Input field definitions ObjectToolDetails: allOf: - $ref: '#/components/schemas/ObjectToolSummary' - type: object properties: data: type: string description: Tool-specific data description: type: string description: Tool description filter: type: string description: Tool filter (matching OID for SNMP tools) icon: type: string description: Icon as hex-encoded image data remotePort: type: integer description: Remote port for TCP tunnel ObjectToolTextResult: type: object required: - type - output properties: type: type: string enum: [text] output: type: string description: Text output from tool execution (agent action output, server command output, or script output with result) ObjectToolTableResult: type: object required: - type - table properties: type: type: string enum: [table] table: type: object description: Table result from SNMP table, agent table, or agent list tool execution properties: extendedFormat: type: boolean source: type: integer title: type: string description: Table title columns: type: array items: type: object properties: name: type: string description: Column name dataType: type: integer description: Column data type code displayName: type: string description: Column display name instanceColumn: type: boolean unitName: type: string multiplier: type: integer useMultiplier: type: integer data: type: array items: type: object properties: objectId: type: integer baseRow: type: integer values: type: array items: type: object properties: status: type: integer description: Cell status code value: type: string description: Cell value ObjectToolNoResult: type: object required: - type properties: type: type: string enum: [none] description: Indicates tool executed successfully but produced no output ObjectClass: type: string enum: - AccessPoint - AgentPolicyLogParser - Asset - AssetGroup - AssetRoot - BusinessService - BusinessServiceProto - BusinessServiceRoot - Chassis - Cluster - Condition - Container - Dashboard - DashboardGroup - DashboardRoot - Generic - Interface - MobileDevice - Network - NetworkMap - NetworkMapGroup - NetworkMapRoot - NetworkService - Node - NodeLink - Rack - Report - ReportGroup - ReportRoot - Sensor - ServiceCheck - ServiceRoot - Subnet - Template - TemplateGroup - TemplateRoot - VPNConnector - Zone GrafanaAlarm: type: object properties: Id: type: integer description: Alarm ID Severity: type: string description: Alarm severity name (Normal, Warning, Minor, Major, Critical, etc.) State: type: string description: Alarm state name (Outstanding, Acknowledged, Resolved, Terminated) Source: type: string description: Source object name (may include alias in parentheses) Message: type: string description: Alarm message Count: type: integer description: Alarm repeat count Ack/Resolve by: type: string description: User who acknowledged/resolved the alarm Created: type: string format: date-time description: Alarm creation time Last Change: type: string format: date-time description: Last change time of the alarm ObjectDetails: type: object properties: alias: type: string description: Object alias category: type: integer description: Object category ID class: $ref: '#/components/schemas/ObjectClass' guid: type: string format: uuid description: Object GUID id: type: integer description: Object ID name: type: string description: Object name timestamp: type: string format: date-time description: Object last change timestamp status: $ref: '#/components/schemas/Status' ObjectQueryResult: type: object properties: fields: type: object additionalProperties: type: string description: Set of key-value pairs where key is object attribute name and value is actual value read from object. object: $ref: '#/components/schemas/ObjectSummary' ObjectSummary: type: object properties: alias: type: string description: Object alias category: type: integer description: Object category ID class: $ref: '#/components/schemas/ObjectClass' guid: type: string format: uuid description: Object GUID id: type: integer description: Object ID name: type: string description: Object name timestamp: type: string format: date-time description: Object last change timestamp status: $ref: '#/components/schemas/Status' Status: type: integer enum: - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 DCIValue: type: object description: Data Collection Item (DCI) current value properties: ownerId: type: integer description: Object ID that owns this DCI id: type: integer description: DCI ID name: type: string description: DCI name flags: type: integer description: DCI flags description: type: string description: DCI description sourceType: type: integer description: Data source type dataType: type: integer description: Data type value: type: string description: Current value as string timestamp: type: integer description: Timestamp of last value collection (Unix timestamp) status: type: integer description: Current DCI status type: type: integer description: DCI type errorCount: type: integer description: Number of consecutive collection errors templateItemId: type: integer description: Template item ID if DCI is created from template unitName: type: string description: Unit name for the value multiplier: type: integer description: Value multiplier noValue: type: boolean description: True if DCI has no collected value comments: type: string description: DCI comments anomalyDetected: type: boolean description: True if anomaly was detected in recent values userTag: type: string description: User-defined tag hasActiveThreshold: type: boolean description: True if DCI has active threshold threshold: type: object description: Active threshold information (present only if hasActiveThreshold is true) TcpProxyConnectedMessage: type: object description: WebSocket text message sent when TCP proxy connection is established properties: type: type: string enum: [connected] channelId: type: integer description: Channel ID for the established TCP proxy connection TcpProxyErrorMessage: type: object description: WebSocket text message sent when an error occurs properties: type: type: string enum: [error] code: type: integer description: | Error code (RCC - Request Completion Code): - 0: Success - 1: Component locked - 2: Access denied - 3: Invalid request - 4: Request timeout - 5: Access denied - 7: Communication failure - 8: Invalid object ID message: type: string description: Human-readable error message TcpProxyCloseMessage: type: object description: WebSocket text message sent when the TCP proxy connection is closed properties: type: type: string enum: [close] reason: type: string enum: [normal, error, agent_disconnect] description: | Reason for connection closure: - normal: Connection closed normally by remote end - error: Connection closed due to an error - agent_disconnect: Agent connection was lost ServerAction: type: object description: Server action configuration properties: id: type: integer description: Action ID guid: type: string format: uuid description: Action GUID name: type: string description: Action name type: type: integer description: "Action type: 0=execute command on server, 1=execute command on remote node via agent, 3=send notification, 4=forward event, 5=execute server-side script, 7=execute command via SSH" typeDescription: type: string description: Human-readable action type description isDisabled: type: boolean description: Whether the action is disabled recipientAddress: type: string description: Recipient address (supports macros) emailSubject: type: string description: Email subject (supports macros) notificationChannelName: type: string description: Notification channel name ServerActionCreate: type: object required: - name properties: name: type: string description: Action name type: type: integer description: Action type isDisabled: type: boolean description: Whether the action is disabled data: type: string description: Action data (command, message, or script name depending on type) recipientAddress: type: string description: Recipient address emailSubject: type: string description: Email subject notificationChannelName: type: string description: Notification channel name ServerActionUpdate: type: object properties: name: type: string description: Action name type: type: integer description: Action type isDisabled: type: boolean description: Whether the action is disabled data: type: string description: Action data (command, message, or script name depending on type) recipientAddress: type: string description: Recipient address emailSubject: type: string description: Email subject notificationChannelName: type: string description: Notification channel name securitySchemes: BearerAuth: type: http scheme: bearer