openapi: 3.0.2 info: title: NetXMS API description: REST API for NetXMS network monitoring server 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: Scheduled Tasks description: Scheduled task management - 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: AI Management description: AI skills and functions management - name: AI Saved Prompts description: Per-user saved prompts for the AI assistant - name: Object Tools description: Object tool management - name: Find description: Network search operations - name: Geo Areas description: Geographic area management - name: Object Categories description: Object category management - name: Image Library description: Image library management - name: DCI Summary Tables description: DCI summary table operations - name: Event Templates description: Event template management - name: Event Processing Policy description: Event processing policy management - name: Users description: User management - name: User Groups description: User group management - name: Notification Channels description: Notification channel and driver management - name: Event Forwarders description: Event forwarder and driver management - name: SNMP MIB description: Browse the server's compiled SNMP MIB tree - name: SSH Keys description: SSH key management - name: Two-Factor Authentication description: Two-factor authentication method management and user bindings - name: Web Service Definitions description: Web service definition management paths: /: get: operationId: getRoot 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: [] tags: - Server /v1/server-info: get: operationId: getServerInfo 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 dciAggregationEnabled: type: boolean description: True if DCI data aggregation (hourly/daily tiers) is enabled on the server 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: [] tags: - Server /v1/status: get: operationId: getSessionStatus 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: [] tags: - Server /v1/tcp-proxy: post: operationId: createTcpProxySession 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: operationId: connectTcpProxy 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: operationId: createAiChat 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: operationId: sendAiChatMessage 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: operationId: getAiChatStatus summary: Get AI chat processing status description: | Poll for the current processing status of an AI chat session. Returns the status (idle, processing, completed, or error) along with any pending question, completed response, or error message. 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, error] description: Current processing state pendingQuestion: description: Pending question from AI (present when status is processing) nullable: true currentFunction: type: string description: Name of the function currently being executed by AI (present when status is processing) nullable: true response: type: string description: AI response text (present when status is completed) nullable: true errorMessage: type: string description: Error description (present when status is error) '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: operationId: getAiChatQuestion 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: operationId: answerAiChatQuestion 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: operationId: clearAiChatHistory 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: operationId: deleteAiChat 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/ai/skills-and-functions: get: operationId: getAiSkillsAndFunctions summary: Get AI skills, functions, and disabled items description: >- Returns all registered AI skills and functions with their disabled status, plus stop list entries that do not correspond to any registered entity. Requires MANAGE_AI_SKILLS or USE_AI_ASSISTANT access right. responses: '200': description: Skills, functions, and disabled extras retrieved successfully content: application/json: schema: type: object properties: skills: type: array items: type: object properties: name: type: string description: type: string disabled: type: boolean supportsDelegation: type: boolean defaultMode: type: string enum: [loaded, delegated] functions: type: array items: type: object properties: name: type: string description: type: string disabled: type: boolean parameters: type: array items: type: object properties: name: type: string type: type: string disabledExtras: type: array items: type: object properties: type: type: string enum: [S, F] name: type: string '401': description: Unauthorized '403': description: Insufficient access rights security: - BearerAuth: [] tags: - AI Management /v1/ai/disabled-items: post: operationId: addAiDisabledItem summary: Add item to AI disabled list description: >- Add a skill or function name to the stop list. The item does not need to correspond to a currently registered entity. Requires MANAGE_AI_SKILLS access right. requestBody: required: true content: application/json: schema: type: object required: [type, name] properties: type: type: string enum: [S, F] description: Item type - S for skill, F for function name: type: string description: Name of the skill or function to disable example: type: F name: some-function-name responses: '204': description: Item added to disabled list successfully '400': description: Invalid or missing type/name '401': description: Unauthorized '403': description: Insufficient access rights '500': description: Database failure security: - BearerAuth: [] tags: - AI Management /v1/ai/disabled-items/{item-type}/{item-name}: delete: operationId: removeAiDisabledItem summary: Remove item from AI disabled list description: >- Remove a skill or function name from the stop list. Requires MANAGE_AI_SKILLS access right. parameters: - name: item-type in: path required: true schema: type: string enum: [S, F] description: Item type - S for skill, F for function - name: item-name in: path required: true schema: type: string description: Name of the skill or function to re-enable responses: '204': description: Item removed from disabled list successfully '400': description: Invalid item type or name '401': description: Unauthorized '403': description: Insufficient access rights '500': description: Database failure security: - BearerAuth: [] tags: - AI Management /v1/ai/saved-prompts: get: operationId: listAiSavedPrompts summary: List saved prompts description: Retrieve all saved AI assistant prompts for the current user. responses: '200': description: List of saved prompts content: application/json: schema: type: array items: $ref: '#/components/schemas/AiSavedPrompt' '403': description: Insufficient access rights security: - BearerAuth: [] tags: - AI Saved Prompts post: operationId: createAiSavedPrompt summary: Create saved prompt description: Create a new saved AI assistant prompt for the current user. requestBody: required: true content: application/json: schema: type: object required: - name - promptText properties: name: type: string description: Display name for the saved prompt description: type: string description: Optional description promptText: type: string description: The prompt text responses: '201': description: Prompt created content: application/json: schema: $ref: '#/components/schemas/AiSavedPrompt' '400': description: Missing or invalid fields '403': description: Insufficient access rights '500': description: Database failure security: - BearerAuth: [] tags: - AI Saved Prompts /v1/ai/saved-prompts/{prompt-id}: get: operationId: getAiSavedPrompt summary: Get saved prompt details description: Retrieve a single saved AI assistant prompt by ID. parameters: - name: prompt-id in: path required: true schema: type: integer responses: '200': description: Saved prompt details content: application/json: schema: $ref: '#/components/schemas/AiSavedPrompt' '400': description: Invalid prompt ID '403': description: Insufficient access rights '404': description: Prompt not found security: - BearerAuth: [] tags: - AI Saved Prompts put: operationId: updateAiSavedPrompt summary: Update saved prompt description: Update an existing saved AI assistant prompt. parameters: - name: prompt-id in: path required: true schema: type: integer requestBody: required: true content: application/json: schema: type: object required: - name - promptText properties: name: type: string description: Display name for the saved prompt description: type: string description: Optional description promptText: type: string description: The prompt text responses: '200': description: Prompt updated content: application/json: schema: $ref: '#/components/schemas/AiSavedPrompt' '400': description: Missing or invalid fields '403': description: Insufficient access rights '500': description: Database failure security: - BearerAuth: [] tags: - AI Saved Prompts delete: operationId: deleteAiSavedPrompt summary: Delete saved prompt description: Delete a saved AI assistant prompt. parameters: - name: prompt-id in: path required: true schema: type: integer responses: '204': description: Prompt deleted '400': description: Invalid prompt ID '403': description: Insufficient access rights '500': description: Database failure security: - BearerAuth: [] tags: - AI Saved Prompts /v1/alarm-categories: get: operationId: listAlarmCategories tags: - Alarm Categories summary: Get all alarm categories description: Retrieve the list of all configured alarm categories. Requires EPP system access right. responses: '200': description: List of alarm categories. content: application/json: schema: type: array items: $ref: '#/components/schemas/AlarmCategory' '401': description: Unauthorized. '403': description: Access denied. security: - BearerAuth: [] post: operationId: createAlarmCategory tags: - Alarm Categories summary: Create a new alarm category description: Create a new alarm category. Requires EPP system access right. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AlarmCategoryCreateUpdate' responses: '201': description: Alarm category created successfully. content: application/json: schema: $ref: '#/components/schemas/AlarmCategory' '400': description: Invalid request (missing or empty name). '401': description: Unauthorized. '403': description: Access denied. '500': description: Internal server error. security: - BearerAuth: [] /v1/alarm-categories/{category-id}: get: operationId: getAlarmCategory tags: - Alarm Categories summary: Get alarm category details description: Retrieve details of a specific alarm category. Requires EPP system access right. parameters: - name: category-id in: path required: true schema: type: integer description: Alarm category ID. responses: '200': description: Alarm category details. content: application/json: schema: $ref: '#/components/schemas/AlarmCategory' '400': description: Invalid category ID. '401': description: Unauthorized. '403': description: Access denied. '404': description: Alarm category not found. security: - BearerAuth: [] put: operationId: updateAlarmCategory tags: - Alarm Categories summary: Update an alarm category description: Update an existing alarm category. Requires EPP system access right. parameters: - name: category-id in: path required: true schema: type: integer description: Alarm category ID. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AlarmCategoryCreateUpdate' responses: '200': description: Alarm category updated successfully. content: application/json: schema: $ref: '#/components/schemas/AlarmCategory' '400': description: Invalid request (missing or empty name). '401': description: Unauthorized. '403': description: Access denied. '404': description: Alarm category not found. '500': description: Internal server error. security: - BearerAuth: [] delete: operationId: deleteAlarmCategory tags: - Alarm Categories summary: Delete an alarm category description: Delete an alarm category. Requires EPP system access right. Returns 409 if the category is referenced by any event processing policy rule. parameters: - name: category-id in: path required: true schema: type: integer description: Alarm category ID. responses: '204': description: Alarm category deleted successfully. '400': description: Invalid category ID. '401': description: Unauthorized. '403': description: Access denied. '404': description: Alarm category not found. '409': description: Alarm category is in use by one or more event processing policy rules. '500': description: Internal server error. security: - BearerAuth: [] /v1/alarms: get: operationId: listAlarms 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: [] tags: - Alarms /v1/alarms/{alarm-id}: get: operationId: getAlarm 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: [] tags: - Alarms /v1/alarms/{alarm-id}/acknowledge: post: operationId: acknowledgeAlarm 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: [] tags: - Alarms /v1/alarms/{alarm-id}/resolve: post: operationId: resolveAlarm 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: [] tags: - Alarms /v1/alarms/{alarm-id}/terminate: post: operationId: terminateAlarm 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: [] tags: - Alarms /v1/connection-history: get: operationId: getConnectionHistory tags: - Find summary: Get connection history description: Query the connection history table for MAC address connection/disconnection events. Requires SYSTEM_ACCESS_SEARCH_NETWORK. parameters: - name: macAddress in: query required: false schema: type: string description: Filter by MAC address. - name: nodeId in: query required: false schema: type: integer description: Filter by node ID (matches switch_id or node_id). - name: switchId in: query required: false schema: type: integer description: Filter by switch ID. - name: interfaceId in: query required: false schema: type: integer description: Filter by interface ID. - name: from in: query required: false schema: type: integer description: Start of time range (unix timestamp). - name: to in: query required: false schema: type: integer description: End of time range (unix timestamp). - name: limit in: query required: false schema: type: integer default: 1000 maximum: 10000 description: Maximum number of records to return (default 1000, max 10000). responses: '200': description: Connection history records. content: application/json: schema: type: array items: type: object properties: recordId: type: integer format: int64 description: Record ID timestamp: type: integer description: Event timestamp (unix) macAddress: type: string description: MAC address ipAddress: type: string description: IP address nodeId: type: integer description: Node ID switchId: type: integer description: Switch ID interfaceId: type: integer description: Interface ID vlanId: type: integer description: VLAN ID eventType: type: integer description: Event type oldSwitchId: type: integer description: Previous switch ID oldInterfaceId: type: integer description: Previous interface ID '401': description: Unauthorized '403': description: User does not have SEARCH_NETWORK access security: - BearerAuth: [] /v1/find/mac-address: get: operationId: findMacAddress 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: $ref: '#/components/schemas/InetAddress' 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: [] tags: - Find /v1/geo-areas: get: operationId: listGeoAreas tags: - Geo Areas summary: Get all geo areas description: Retrieve the list of all configured geographic areas. responses: '200': description: List of geo areas. content: application/json: schema: type: array items: $ref: '#/components/schemas/GeoArea' '401': description: Unauthorized. security: - BearerAuth: [] post: operationId: createGeoArea tags: - Geo Areas summary: Create a new geo area description: Create a new geographic area. Requires MANAGE_GEO_AREAS system access right. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/GeoAreaCreateUpdate' responses: '201': description: Geo area created successfully. content: application/json: schema: $ref: '#/components/schemas/GeoArea' '400': description: Invalid request (missing or empty name). '401': description: Unauthorized. '403': description: Access denied. '500': description: Internal server error. security: - BearerAuth: [] /v1/geo-areas/{area-id}: get: operationId: getGeoArea tags: - Geo Areas summary: Get geo area details description: Retrieve details of a specific geographic area. parameters: - name: area-id in: path required: true schema: type: integer description: Geo area ID. responses: '200': description: Geo area details. content: application/json: schema: $ref: '#/components/schemas/GeoArea' '400': description: Invalid area ID. '401': description: Unauthorized. '404': description: Geo area not found. security: - BearerAuth: [] put: operationId: updateGeoArea tags: - Geo Areas summary: Update a geo area description: Update an existing geographic area. Requires MANAGE_GEO_AREAS system access right. parameters: - name: area-id in: path required: true schema: type: integer description: Geo area ID. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/GeoAreaCreateUpdate' responses: '200': description: Geo area updated successfully. content: application/json: schema: $ref: '#/components/schemas/GeoArea' '400': description: Invalid request (missing or empty name). '401': description: Unauthorized. '403': description: Access denied. '404': description: Geo area not found. '500': description: Internal server error. security: - BearerAuth: [] delete: operationId: deleteGeoArea tags: - Geo Areas summary: Delete a geo area description: Delete a geographic area. Requires MANAGE_GEO_AREAS system access right. Use force=true to delete even if the area is referenced by objects. parameters: - name: area-id in: path required: true schema: type: integer description: Geo area ID. - name: force in: query required: false schema: type: boolean description: Force deletion even if the area is referenced by objects. responses: '204': description: Geo area deleted successfully. '400': description: Invalid area ID. '401': description: Unauthorized. '403': description: Access denied. '404': description: Geo area not found. '409': description: Geo area is in use by one or more objects. '500': description: Internal server error. security: - BearerAuth: [] /v1/object-categories: get: operationId: listObjectCategories tags: - Object Categories summary: Get all object categories description: Retrieve the list of all configured object categories. responses: '200': description: List of object categories. content: application/json: schema: type: array items: $ref: '#/components/schemas/ObjectCategory' '401': description: Unauthorized. security: - BearerAuth: [] post: operationId: createObjectCategory tags: - Object Categories summary: Create a new object category description: Create a new object category. Requires MANAGE_OBJECT_CATEGORIES system access right. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ObjectCategoryCreateUpdate' responses: '201': description: Object category created successfully. content: application/json: schema: $ref: '#/components/schemas/ObjectCategory' '400': description: Invalid request (missing or empty name). '401': description: Unauthorized. '403': description: Access denied. '500': description: Internal server error. security: - BearerAuth: [] /v1/object-categories/{category-id}: get: operationId: getObjectCategory tags: - Object Categories summary: Get object category details description: Retrieve details of a specific object category. parameters: - name: category-id in: path required: true schema: type: integer description: Object category ID. responses: '200': description: Object category details. content: application/json: schema: $ref: '#/components/schemas/ObjectCategory' '400': description: Invalid category ID. '401': description: Unauthorized. '404': description: Object category not found. security: - BearerAuth: [] put: operationId: updateObjectCategory tags: - Object Categories summary: Update an object category description: Update an existing object category. Requires MANAGE_OBJECT_CATEGORIES system access right. parameters: - name: category-id in: path required: true schema: type: integer description: Object category ID. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ObjectCategoryCreateUpdate' responses: '200': description: Object category updated successfully. content: application/json: schema: $ref: '#/components/schemas/ObjectCategory' '400': description: Invalid request (missing or empty name). '401': description: Unauthorized. '403': description: Access denied. '404': description: Object category not found. '500': description: Internal server error. security: - BearerAuth: [] delete: operationId: deleteObjectCategory tags: - Object Categories summary: Delete an object category description: Delete an object category. Requires MANAGE_OBJECT_CATEGORIES system access right. Use force=true to delete even if the category is assigned to objects (resets those objects to no category). parameters: - name: category-id in: path required: true schema: type: integer description: Object category ID. - name: force in: query required: false schema: type: boolean description: Force deletion even if the category is assigned to objects. responses: '204': description: Object category deleted successfully. '400': description: Invalid category ID. '401': description: Unauthorized. '403': description: Access denied. '404': description: Object category not found. '409': description: Object category is in use by one or more objects. '500': description: Internal server error. security: - BearerAuth: [] /v1/image-library: get: operationId: listImages tags: - Image Library summary: Get image library listing description: Retrieve list of all images in the library (metadata only). Optionally filter by category. parameters: - name: category in: query required: false schema: type: string description: Filter by image category name. responses: '200': description: List of images. content: application/json: schema: type: array items: $ref: '#/components/schemas/LibraryImage' '401': description: Unauthorized. security: - BearerAuth: [] post: operationId: createImage tags: - Image Library summary: Create a library image description: >- Create a new image library entry. The request body must be the raw image bytes and the Content-Type header becomes the stored MIME type. The image name is passed as the "name" query parameter and is required. Requires the MANAGE_IMAGE_LIB system access right. parameters: - name: name in: query required: true schema: type: string description: Image display name. - name: category in: query required: false schema: type: string default: Default description: Image category (defaults to "Default"). requestBody: required: true content: image/png: schema: type: string format: binary image/jpeg: schema: type: string format: binary image/svg+xml: schema: type: string format: binary application/octet-stream: schema: type: string format: binary responses: '201': description: Image created. content: application/json: schema: $ref: '#/components/schemas/LibraryImage' '400': description: Missing name, empty body, or invalid parameters. '401': description: Unauthorized. '403': description: Insufficient access rights. '500': description: Database or filesystem failure. security: - BearerAuth: [] /v1/image-library/{guid}: get: operationId: getImageMetadata tags: - Image Library summary: Get image metadata description: Retrieve metadata for a specific image in the library. parameters: - name: guid in: path required: true schema: type: string format: uuid description: Image GUID. responses: '200': description: Image metadata. content: application/json: schema: $ref: '#/components/schemas/LibraryImage' '400': description: Invalid GUID. '401': description: Unauthorized. '404': description: Image not found. security: - BearerAuth: [] put: operationId: updateImage tags: - Image Library summary: Update a library image description: >- Update an existing image library entry. If the request body is non-empty the binary data is replaced and the stored MIME type is taken from the Content-Type header. The "name" and "category" query parameters, if present, update the corresponding metadata fields; when absent the existing values are retained. Protected images cannot be modified. Requires the MANAGE_IMAGE_LIB system access right. parameters: - name: guid in: path required: true schema: type: string format: uuid description: Image GUID. - name: name in: query required: false schema: type: string description: New image display name. - name: category in: query required: false schema: type: string description: New image category. requestBody: required: false content: image/png: schema: type: string format: binary image/jpeg: schema: type: string format: binary image/svg+xml: schema: type: string format: binary application/octet-stream: schema: type: string format: binary responses: '200': description: Image updated. content: application/json: schema: $ref: '#/components/schemas/LibraryImage' '400': description: Invalid GUID. '401': description: Unauthorized. '403': description: Insufficient access rights or image is protected. '404': description: Image not found. '500': description: Database or filesystem failure. security: - BearerAuth: [] delete: operationId: deleteImage tags: - Image Library summary: Delete a library image description: >- Remove an image library entry and its backing file. Protected images cannot be deleted. Requires the MANAGE_IMAGE_LIB system access right. parameters: - name: guid in: path required: true schema: type: string format: uuid description: Image GUID. responses: '204': description: Image deleted. '400': description: Invalid GUID. '401': description: Unauthorized. '403': description: Insufficient access rights or image is protected. '404': description: Image not found. '500': description: Database failure. security: - BearerAuth: [] /v1/image-library/{guid}/data: get: operationId: getImageData tags: - Image Library summary: Get image data description: Download the raw image binary data with correct Content-Type header. SVG images are served as image/svg+xml, raster images as their respective MIME type (image/png, image/jpeg, etc.). parameters: - name: guid in: path required: true schema: type: string format: uuid description: Image GUID. responses: '200': description: Image binary data. content: image/svg+xml: schema: type: string format: binary image/png: schema: type: string format: binary image/jpeg: schema: type: string format: binary '400': description: Invalid GUID. '401': description: Unauthorized. '404': description: Image not found. security: - BearerAuth: [] /v1/grafana/infinity/alarms: post: operationId: grafanaQueryAlarms 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: [] tags: - Grafana /v1/grafana/infinity/object-query: post: operationId: grafanaQueryObjects 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: [] tags: - Grafana /v1/grafana/infinity/summary-table: post: operationId: grafanaQuerySummaryTable 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: [] tags: - Grafana /v1/grafana/objects/{object-id}/dci-list: get: operationId: grafanaGetDciList 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: [] tags: - Grafana /v1/grafana/objects-status: post: operationId: grafanaGetObjectsStatus 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: [] tags: - Grafana /v1/grafana/object-list: get: operationId: grafanaGetObjectList 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: [] tags: - Grafana /v1/grafana/summary-table-list: get: operationId: grafanaGetSummaryTableList 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: [] tags: - Grafana /v1/grafana/query-list: get: operationId: grafanaGetQueryList 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: [] tags: - Grafana /v1/login: post: operationId: login 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: [] tags: - Authentication /v1/logout: post: operationId: logout summary: User Logout description: Logout a user and invalidate their token. responses: '204': description: Successful logout. security: - BearerAuth: [] tags: - Authentication /v1/objects: get: operationId: listObjects 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: [] tags: - Objects /v1/objects/{object-id}: get: operationId: getObject 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: [] tags: - Objects patch: operationId: updateObjectProperties summary: Update common object properties description: | Update common scalar properties on any NetObj. Request body uses JSON merge-patch semantics (RFC 7396) — fields present in the body are updated, fields omitted are left untouched, and explicit `null` clears the field. Returns the updated object in the same shape as `GET /v1/objects/{object-id}`. Class-specific property groups (snmp, agent, polling, etc.) are exposed as separate sub-resources. parameters: - name: object-id in: path required: true schema: type: integer requestBody: required: true content: application/json: schema: type: object description: Merge-patch document with any subset of the listed properties. additionalProperties: false properties: name: type: string description: Object name (control characters are replaced with spaces). alias: type: string nullable: true description: Object alias. `null` or empty string clears the alias. nameOnMap: type: string nullable: true description: Display name used on network maps. `null` clears the override. comments: type: string nullable: true description: Free-form object comments. `null` or empty string clears them. category: type: integer nullable: true description: Object category ID. `null` or `0` clears the category. mapImage: type: string format: uuid nullable: true description: Image library UUID for the object on maps. `null` clears the image. drilldownObjectId: type: integer nullable: true description: ID of the object opened on drill-down. `null` or `0` clears the link. responses: '200': description: Object updated; full updated object returned. content: application/json: schema: $ref: '#/components/schemas/ObjectDetails' '400': description: Malformed request body or invalid property value. '401': description: Unauthorized '403': description: User does not have modify access to the object '404': description: Object with given ID does not exist security: - BearerAuth: [] tags: - Objects /v1/objects/{object-id}/location: patch: operationId: updateObjectLocation summary: Update object geo location and postal address description: | Update the object's geo location and/or postal address. Body uses JSON merge-patch semantics — present fields are applied, omitted fields are left alone. Setting `geoLocation` to `null` clears the location (type becomes UNSET); setting `postalAddress` to `null` clears every postal field. Updating `geoLocation` also queues an entry in the object's geo-location history. parameters: - name: object-id in: path required: true schema: type: integer requestBody: required: true content: application/json: schema: type: object additionalProperties: false properties: geoLocation: type: object nullable: true additionalProperties: false properties: type: type: integer description: 0=unset, 1=manual, 2=GPS, 3=network. latitude: type: number longitude: type: number accuracy: type: integer timestamp: type: integer description: Seconds since epoch. postalAddress: type: object nullable: true additionalProperties: false properties: country: type: string nullable: true region: type: string nullable: true city: type: string nullable: true district: type: string nullable: true streetAddress: type: string nullable: true postcode: type: string nullable: true responses: '200': description: Location updated; full updated object returned. content: application/json: schema: $ref: '#/components/schemas/ObjectDetails' '400': description: Malformed request body or invalid value. '401': description: Unauthorized '403': description: User does not have modify access to the object '404': description: Object with given ID does not exist security: - BearerAuth: [] tags: - Objects /v1/objects/{object-id}/status-calculation: patch: operationId: updateObjectStatusCalculation summary: Update object status calculation/propagation parameters description: | Update the algorithms and thresholds used to derive the object's compound status from its children, and to propagate that status upward. Merge-patch semantics: any subset of fields can be sent; omitted fields are unchanged. The four-element `translation` and `thresholds` arrays must be sent as complete four-element arrays. parameters: - name: object-id in: path required: true schema: type: integer requestBody: required: true content: application/json: schema: type: object additionalProperties: false properties: calcAlg: type: integer description: Status calculation algorithm. propAlg: type: integer description: Status propagation algorithm. fixedStatus: type: integer description: Fixed status value used with the "fixed" propagation algorithm. shift: type: integer description: Status shift used with the "relative" propagation algorithm. singleThreshold: type: integer description: Single percentage threshold used with the "single threshold" calc algorithm. translation: type: array description: Four-element status translation table (used with the "translated" propagation algorithm). minItems: 4 maxItems: 4 items: type: integer thresholds: type: array description: Four-element percentage thresholds (used with the "multiple thresholds" calc algorithm). minItems: 4 maxItems: 4 items: type: integer responses: '200': description: Status calculation updated; full updated object returned. content: application/json: schema: $ref: '#/components/schemas/ObjectDetails' '400': description: Malformed request body or invalid value. '401': description: Unauthorized '403': description: User does not have modify access to the object '404': description: Object with given ID does not exist security: - BearerAuth: [] tags: - Objects /v1/objects/{object-id}/polling: patch: operationId: updateObjectPolling summary: Update node polling configuration description: | Update the node's polling settings: poller node, required poll count for status change, expected capabilities bitmask, and the per-protocol / per-poll-type disable flags. Merge-patch semantics: any subset of fields can be sent; omitted fields are left unchanged. Within the `flags` object only the named booleans that are present are modified; the rest are preserved. This property group applies to Node objects only; sending it to any other object class returns 400. parameters: - name: object-id in: path required: true schema: type: integer requestBody: required: true content: application/json: schema: type: object additionalProperties: false properties: pollerNode: type: integer description: ID of the node used for polling, or 0 to poll from the server. Must reference a node object. requiredPollCount: type: integer description: Number of consecutive polls required before a status change is registered. expectedCapabilities: type: integer description: Expected capabilities bitmask. flags: type: object additionalProperties: false description: Poll-type and per-protocol disable flags. Only present keys are changed. properties: disableAgent: type: boolean description: Disable usage of NetXMS agent for all polls. disableSNMP: type: boolean description: Disable usage of SNMP for all polls. disableICMP: type: boolean description: Disable usage of ICMP pings for status polling. disableSSH: type: boolean description: Disable SSH usage for all polls. disableVNC: type: boolean description: Disable VNC detection. disableSMCLPProperties: type: boolean description: Disable reading of SM-CLP available properties metadata. disableEtherNetIP: type: boolean description: Disable usage of EtherNet/IP for all polls. disableModbus: type: boolean description: Disable usage of Modbus for all polls. disable8021xStatusPoll: type: boolean description: Disable 802.1x port state checking during status poll. disableRoutePoll: type: boolean description: Disable routing table polling. disableTopologyPoll: type: boolean description: Disable topology polling. disableDiscoveryPoll: type: boolean description: Disable network discovery polling. disablePerfCount: type: boolean description: Disable reading of Windows performance counters metadata. disableStatusPoll: type: boolean description: Disable status polling. disableConfigurationPoll: type: boolean description: Disable configuration polling. disableDataCollection: type: boolean description: Disable data collection. responses: '200': description: Polling configuration updated; full updated object returned. content: application/json: schema: $ref: '#/components/schemas/ObjectDetails' '400': description: Malformed request body, invalid value, or property group not applicable to object class. '401': description: Unauthorized '403': description: User does not have modify access to the object '404': description: Object with given ID does not exist security: - BearerAuth: [] tags: - Objects /v1/objects/{object-id}/auto-bind: patch: operationId: updateObjectAutoBind summary: Update object auto-bind configuration description: | Update the auto-bind filters of an auto-bind-capable object (Container, Collector, Circuit, Cluster, NetworkMap, Template, Dashboard, BusinessService and business service prototype). Each object supports up to two filter slots; entries in the `autoBindFilters` array are applied positionally to slots 0, 1, … Within each entry omitted keys are left unchanged; a `null` or omitted `source` clears that slot's filter script. Filter scripts are compiled and validated by default; a compilation failure returns 400 with a `diagnostic` object. Pass `?validate=false` to store work-in-progress or intentionally broken scripts (matches the NXCP "always store" behavior). This property group applies only to auto-bind-capable object classes; sending it to any other class returns 400. parameters: - name: object-id in: path required: true schema: type: integer - name: validate in: query required: false description: When false, skip compilation of filter scripts. schema: type: boolean default: true requestBody: required: true content: application/json: schema: type: object additionalProperties: false properties: autoBindFilters: type: array description: Per-slot auto-bind filter configuration, applied positionally. maxItems: 2 items: type: object additionalProperties: false properties: autoBind: type: boolean description: Automatically bind matching objects. autoUnbind: type: boolean description: Automatically unbind objects that no longer match (only effective when autoBind is enabled). source: type: string nullable: true description: NXSL filter script source; null clears the slot. responses: '200': description: Auto-bind configuration updated; full updated object returned. content: application/json: schema: $ref: '#/components/schemas/ObjectDetails' '400': description: Malformed request body, filter script compilation failure, or property group not applicable to object class. '401': description: Unauthorized '403': description: User does not have modify access to the object '404': description: Object with given ID does not exist security: - BearerAuth: [] tags: - Objects /v1/objects/{object-id}/custom-attributes: get: operationId: getObjectCustomAttributes summary: Get object custom attributes description: | Retrieve the object's custom attributes as an array. Each element carries the attribute name, value, flags and the source object. This is the same representation that is embedded as the `customAttributes` array in the full object document. Inherited attributes are included; the `sourceObject` field identifies the object an inherited attribute originates from (0 when the attribute is defined directly on this object). parameters: - name: object-id in: path required: true schema: type: integer responses: '200': description: Array of custom attributes. content: application/json: schema: type: array items: $ref: '#/components/schemas/CustomAttribute' example: - name: rack value: A12 flags: inheritable: false redefined: false conflict: false sourceObject: 0 '401': description: Unauthorized '403': description: User does not have modify access to the object '404': description: Object with given ID does not exist security: - BearerAuth: [] tags: - Objects /v1/objects/{object-id}/custom-attributes/{name}: put: operationId: updateObjectCustomAttribute summary: Create or update a single custom attribute description: | Upsert a single custom attribute identified by name. The name is taken from the URL path (URL-encoded). It must be 1-127 characters, must not contain a slash or any control character; spaces, dots, dashes, colons and unicode are allowed. parameters: - name: object-id in: path required: true schema: type: integer - name: name in: path required: true schema: type: string description: Custom attribute name (URL-encoded). requestBody: required: true content: application/json: schema: type: object properties: value: type: string nullable: true description: Attribute value. Null or absent is treated as an empty string. inheritable: type: boolean description: Whether the attribute is inherited by child objects. Defaults to false. responses: '200': description: Attribute created or updated. content: application/json: schema: type: object properties: name: type: string value: type: string inheritable: type: boolean '400': description: Invalid attribute name or request body. '401': description: Unauthorized '403': description: User does not have modify access to the object '404': description: Object with given ID does not exist security: - BearerAuth: [] tags: - Objects delete: operationId: deleteObjectCustomAttribute summary: Delete a single custom attribute description: | Remove a custom attribute by name. Idempotent — deleting an attribute that does not exist still returns 204. parameters: - name: object-id in: path required: true schema: type: integer - name: name in: path required: true schema: type: string description: Custom attribute name (URL-encoded). responses: '204': description: Attribute deleted (or was already absent). '400': description: Invalid attribute name. '401': description: Unauthorized '403': description: User does not have modify access to the object '404': description: Object with given ID does not exist security: - BearerAuth: [] tags: - Objects /v1/objects/{object-id}/responsible-users: get: operationId: getObjectResponsibleUsers summary: Get object responsible users description: | Retrieve the object's own responsible users (users inherited from parent objects are not included). Each entry pairs a user or group ID with its tag. parameters: - name: object-id in: path required: true schema: type: integer responses: '200': description: Array of responsible users. content: application/json: schema: type: array items: type: object properties: userId: type: integer tag: type: string '401': description: Unauthorized '403': description: User does not have modify access to the object '404': description: Object with given ID does not exist security: - BearerAuth: [] tags: - Objects /v1/objects/{object-id}/responsible-users/{user-id}: put: operationId: updateObjectResponsibleUser summary: Add or update a responsible user description: | Set the tag for a single responsible user or group. If the user is not yet responsible for the object it is added; otherwise its tag is updated. The user or group must exist. An absent or null tag is treated as an empty string. parameters: - name: object-id in: path required: true schema: type: integer - name: user-id in: path required: true schema: type: integer description: User or group ID. requestBody: required: false content: application/json: schema: type: object properties: tag: type: string nullable: true description: Responsible user tag (max 31 characters). Null or absent is treated as empty. responses: '200': description: Responsible user added or updated. content: application/json: schema: type: object properties: userId: type: integer tag: type: string '400': description: User or group does not exist, or tag is too long. '401': description: Unauthorized '403': description: User does not have modify access to the object '404': description: Object with given ID does not exist security: - BearerAuth: [] tags: - Objects delete: operationId: deleteObjectResponsibleUser summary: Remove a responsible user description: | Remove a user or group from the object's responsible users. Idempotent — removing a user that is not responsible still returns 204. parameters: - name: object-id in: path required: true schema: type: integer - name: user-id in: path required: true schema: type: integer description: User or group ID. responses: '204': description: Responsible user removed (or was already absent). '400': description: Invalid user ID. '401': description: Unauthorized '403': description: User does not have modify access to the object '404': description: Object with given ID does not exist security: - BearerAuth: [] tags: - Objects /v1/objects/{object-id}/dashboards: put: operationId: updateObjectDashboards summary: Replace associated dashboards description: | Replace the full list of dashboards and network maps associated with the object. The body is a JSON array of object IDs; the previous list is replaced entirely. An empty array clears all associations. parameters: - name: object-id in: path required: true schema: type: integer requestBody: required: true content: application/json: schema: type: array items: type: integer description: Object IDs of associated dashboards / network maps. responses: '200': description: Dashboard associations replaced; full updated object returned. content: application/json: schema: $ref: '#/components/schemas/ObjectDetails' '400': description: Malformed request body (not a JSON array of integers). '401': description: Unauthorized '403': description: User does not have modify access to the object '404': description: Object with given ID does not exist security: - BearerAuth: [] tags: - Objects /v1/objects/{object-id}/trusted-objects: put: operationId: updateObjectTrustedObjects summary: Replace trusted objects description: | Replace the full list of trusted object IDs. The body is a JSON array of object IDs; the previous list is replaced entirely. An empty array clears the trust list. The list may not contain the object's own ID or references to non-existent objects. parameters: - name: object-id in: path required: true schema: type: integer requestBody: required: true content: application/json: schema: type: array items: type: integer description: Object IDs of trusted objects. responses: '200': description: Trusted objects replaced; full updated object returned. content: application/json: schema: $ref: '#/components/schemas/ObjectDetails' '400': description: | Malformed request body, the list contains the object's own ID ("Cannot trust object itself"), or a referenced object does not exist ("Trusted object N not found"). '401': description: Unauthorized '403': description: User does not have modify access to the object '404': description: Object with given ID does not exist security: - BearerAuth: [] tags: - Objects /v1/objects/{object-id}/urls: get: operationId: getObjectUrls summary: Get object URLs description: Retrieve the list of URLs associated with the object. parameters: - name: object-id in: path required: true schema: type: integer responses: '200': description: Array of associated URLs. content: application/json: schema: type: array items: $ref: '#/components/schemas/ObjectUrl' '401': description: Unauthorized '403': description: User does not have read access to the object '404': description: Object with given ID does not exist security: - BearerAuth: [] tags: - Objects post: operationId: createObjectUrl summary: Add an object URL description: | Add a new URL to the object. The server assigns the URL ID. The created resource is returned and its location is provided in the `Location` header. parameters: - name: object-id in: path required: true schema: type: integer requestBody: required: true content: application/json: schema: type: object required: - url properties: url: type: string description: The URL (1-2000 characters). description: type: string nullable: true description: Optional human-readable description (max 2000 characters). responses: '201': description: URL created. headers: Location: schema: type: string description: Path of the created URL resource. content: application/json: schema: $ref: '#/components/schemas/ObjectUrl' '400': description: Missing or invalid url/description. '401': description: Unauthorized '403': description: User does not have modify access to the object '404': description: Object with given ID does not exist security: - BearerAuth: [] tags: - Objects /v1/objects/{object-id}/urls/{url-id}: put: operationId: updateObjectUrl summary: Update an object URL description: Update an existing associated URL identified by its ID. parameters: - name: object-id in: path required: true schema: type: integer - name: url-id in: path required: true schema: type: integer requestBody: required: true content: application/json: schema: type: object required: - url properties: url: type: string description: The URL (1-2000 characters). description: type: string nullable: true description: Optional human-readable description (max 2000 characters). responses: '200': description: URL updated. content: application/json: schema: $ref: '#/components/schemas/ObjectUrl' '400': description: Missing or invalid url/description. '401': description: Unauthorized '403': description: User does not have modify access to the object '404': description: Object or URL with given ID does not exist security: - BearerAuth: [] tags: - Objects delete: operationId: deleteObjectUrl summary: Delete an object URL description: Remove an associated URL identified by its ID. parameters: - name: object-id in: path required: true schema: type: integer - name: url-id in: path required: true schema: type: integer responses: '204': description: URL deleted. '400': description: Invalid URL ID. '401': description: Unauthorized '403': description: User does not have modify access to the object '404': description: Object or URL with given ID does not exist security: - BearerAuth: [] tags: - Objects /v1/objects/{object-id}/children: get: operationId: getObjectChildren summary: Get full details of direct child objects description: Retrieve full details of all direct (non-recursive) child objects of the specified parent object. Children that the user does not have read access to are omitted. parameters: - name: object-id in: path required: true schema: type: integer description: Parent object ID - name: class in: query required: false schema: type: string description: Optional comma-separated list of object class names to filter children by (e.g. "Node,Container"). - name: filter in: query required: false schema: type: string description: Optional case-insensitive substring; only children whose name or alias contains this value are returned. responses: '200': description: Successful retrieval of direct child object details. content: application/json: schema: type: array items: $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: [] tags: - Objects /v1/objects/{object-id}/children/{child-id}: put: operationId: bindObjectChild summary: Bind child object to parent description: Bind the object identified by child-id to the object identified by object-id as a parent. When the parent is a template the template is applied to the child. Requires modify access to both the parent and the child object. parameters: - name: object-id in: path required: true schema: type: integer description: Parent object ID - name: child-id in: path required: true schema: type: integer description: Child object ID - name: force in: query required: false schema: type: boolean description: When true, override a template exclusion group conflict by removing the conflicting template first. responses: '200': description: Child object bound successfully. Returns full details of the child object. content: application/json: schema: $ref: '#/components/schemas/ObjectDetails' '400': description: Invalid request or incompatible parent/child object classes '401': description: Unauthorized '403': description: User does not have modify access to parent or child object '404': description: Parent or child object with given ID does not exist '409': description: Binding would create a loop, or conflicts with a template from the same exclusion group '500': description: Errors occurred while copying data collection configuration from template security: - BearerAuth: [] tags: - Objects delete: operationId: unbindObjectChild summary: Unbind child object from parent description: Unbind the object identified by child-id from the object identified by object-id. Requires modify access to both the parent and the child object. parameters: - name: object-id in: path required: true schema: type: integer description: Parent object ID - name: child-id in: path required: true schema: type: integer description: Child object ID - name: remove-dci in: query required: false schema: type: boolean description: When true and unbinding a template from a data collection target, remove data collection items that were created from the template. responses: '204': description: Child object unbound successfully '400': description: Invalid request, or child object is not a direct child of the parent '401': description: Unauthorized '403': description: User does not have modify access to parent or child object '404': description: Parent or child object with given ID does not exist security: - BearerAuth: [] tags: - Objects /v1/objects/{object-id}/execute-agent-command: post: operationId: executeAgentCommand 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: [] tags: - Objects /v1/objects/{object-id}/execute-dashboard-script: post: operationId: executeDashboardScript summary: Execute dashboard element script within context of given object description: Execute an NXSL script embedded in a dashboard element against a context object and return the result as a string map. parameters: - name: object-id in: path required: true schema: type: integer description: Dashboard or dashboard template object ID requestBody: required: true content: application/json: schema: type: object required: - objectId - elementIndex properties: objectId: type: integer description: Context object ID for script execution elementIndex: type: integer description: Index of the dashboard element containing the script responses: '200': description: Script executed successfully content: application/json: schema: type: object properties: result: type: object additionalProperties: type: string description: Map of string key-value pairs with script execution results '400': description: Invalid arguments or script compilation error content: application/json: schema: type: object properties: diagnostic: type: object description: Additional diagnostic information, if available reason: type: string description: Failure reason '401': description: Unauthorized '403': description: User does not have read access to the dashboard or context object '404': description: Dashboard or context 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: [] tags: - Objects /v1/objects/{object-id}/execute-script: post: operationId: executeScript 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: [] tags: - Objects /v1/objects/{object-id}/data-collection/current-values: get: operationId: getDciCurrentValues 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: [] tags: - Data Collection /v1/objects/{object-id}/data-collection/{dci-id}/history: get: operationId: getDciHistory summary: Get data collection history description: | Retrieve historical data for a specific DCI (Data Collection Item). The server can serve data from one of three storage tiers: raw samples, hourly aggregates, or daily aggregates. The `tier` query parameter selects which tier to read from (default `auto`, which picks the densest tier whose point count fits within the server-side `DataCollection.Aggregation.MaxAutoSelectPoints` threshold). When the resolved tier is hourly or daily, each row carries pre-computed avg/min/max and a `sampleCount` of raw samples that contributed to the bucket. The `function` query parameter selects which value column(s) the server returns from the aggregate tables (`minmax` returns both min and max in a single response for band rendering). 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: maxDataPoints in: query schema: type: integer description: | When the request resolves to the raw tier, perform on-the-fly bucketing into this many points and return avg/min/max per bucket. Ignored on hourly/daily tier reads (those already serve pre-computed buckets). - name: historicalDataType in: query schema: type: integer description: Type of historical data (0=raw, 1=processed, 2=full table, 3=raw and processed) - name: tier in: query schema: type: string enum: [auto, raw, hourly, daily] default: auto description: | Storage tier to read from. `auto` picks the densest tier whose point count fits the server-side auto-select threshold. Explicit tiers are downgraded to raw when the requested aggregate is not available for the DCI (e.g. string DCIs, or non-TSDB targets where the per-object aggregate table has not been created yet). The actually-served tier is reported in `tierServed`. - name: function in: query schema: type: string enum: [avg, min, max, minmax] default: avg description: | Aggregation function for hourly/daily tier reads. `minmax` returns both `min` and `max` columns in a single response, suitable for band-graph rendering. Ignored when `tierServed` is `raw`. 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 tierServed: type: string enum: [raw, hourly, daily] description: | Storage tier the server actually read from. May differ from the requested tier (e.g. `auto` resolves to a concrete tier; an unsupported tier downgrades to `raw`). aggregated: type: boolean description: | `true` when rows carry aggregate columns (avg/min/max). Set when the response is served from a hourly/daily tier or when `maxDataPoints` triggered on-the-fly bucketing on the raw tier. bucketSize: type: integer description: | On-the-fly bucket size in milliseconds. Only present when the raw tier was bucketed via `maxDataPoints`. values: type: array items: type: object properties: timestamp: type: string format: date-time value: type: string description: | Raw data value (only when `tierServed=raw` and no `maxDataPoints` bucketing). avg: type: number description: | Average value of the bucket. Present for `function=avg` tier reads and for on-the-fly raw bucketing. min: type: number description: | Minimum value of the bucket. Present for `function=min` / `function=minmax` tier reads and for on-the-fly raw bucketing. max: type: number description: | Maximum value of the bucket. Present for `function=max` / `function=minmax` tier reads and for on-the-fly raw bucketing. sampleCount: type: integer description: | Number of raw samples that contributed to the bucket. Only populated when reading from a hourly/daily tier. '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: [] tags: - Data Collection /v1/objects/{object-id}/data-collection/performance-view: get: operationId: getDciPerformanceView 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: [] tags: - Data Collection /v1/objects/{object-id}/expand-text: post: operationId: expandText 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: [] tags: - Objects /v1/objects/{object-id}/remote-control: post: operationId: createRemoteControlSession 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: operationId: setObjectMaintenance 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: [] tags: - Objects /v1/objects/{object-id}/set-managed: post: operationId: setObjectManaged 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: [] tags: - Objects /v1/objects/{object-id}/take-screenshot: get: operationId: takeScreenshot 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: [] tags: - Objects /v1/objects/{object-id}/topology/l2: get: operationId: getL2Topology summary: Get L2 (link layer) topology description: Build an ad-hoc Layer 2 topology map centered on the given node. Returns the set of discovered objects and the links between them. tags: - Objects parameters: - name: object-id in: path required: true schema: type: integer description: Node object ID - name: radius in: query required: false schema: type: integer default: 0 description: Discovery radius (number of hops from the root node). 0 means server default. - name: useL1Topology in: query required: false schema: type: boolean default: false description: Include physical (L1) topology information responses: '200': description: L2 topology retrieved successfully content: application/json: schema: $ref: '#/components/schemas/TopologyMap' '400': description: Invalid object ID or object is not a node '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: Unable to build L2 topology security: - BearerAuth: [] /v1/objects/{object-id}/topology/ip: get: operationId: getIpTopology summary: Get IP topology description: Build an ad-hoc IP topology map centered on the given node. Returns routers and subnets connected to the node. tags: - Objects parameters: - name: object-id in: path required: true schema: type: integer description: Node object ID - name: radius in: query required: false schema: type: integer default: 0 description: Discovery radius (number of hops from the root node). 0 means server default. responses: '200': description: IP topology retrieved successfully content: application/json: schema: $ref: '#/components/schemas/TopologyMap' '400': description: Invalid object ID or object is not a node '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}/topology/ospf: get: operationId: getOspfTopology summary: Get OSPF topology description: Build an ad-hoc OSPF topology map centered on the given node. Returns the OSPF routing domain topology. tags: - Objects parameters: - name: object-id in: path required: true schema: type: integer description: Node object ID responses: '200': description: OSPF topology retrieved successfully content: application/json: schema: $ref: '#/components/schemas/TopologyMap' '400': description: Invalid object ID or object is not a node '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: Unable to build OSPF topology security: - BearerAuth: [] /v1/objects/{object-id}/topology/internal: get: operationId: getInternalTopology summary: Get internal communication topology description: Build an ad-hoc internal communication topology map for the given object. Shows proxy relationships and agent tunnels. tags: - Objects parameters: - name: object-id in: path required: true schema: type: integer description: Data collection target object ID responses: '200': description: Internal communication topology retrieved successfully content: application/json: schema: $ref: '#/components/schemas/TopologyMap' '400': description: Invalid object ID or object is not a 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 '500': description: Unable to build internal communication topology security: - BearerAuth: [] /v1/objects/{object-id}/status-explanation: get: operationId: getObjectStatusExplanation 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: operationId: getObjectSubTree 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: [] tags: - Objects /v1/objects/{object-id}/object-tools: get: operationId: listObjectToolsForObject summary: List object tools applicable to an object description: Retrieve a list of object tools that are applicable to the specified object, filtered by tool ACL, container context, disabled status, and the tool's menu filter (SNMP/agent requirements, OID match, OS match, template match, custom attribute match). parameters: - name: object-id in: path required: true schema: type: integer description: Object ID to filter tools for - 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,server-script,ssh-command") responses: '200': description: Successful retrieval of applicable object tools. content: application/json: schema: type: array items: $ref: '#/components/schemas/ObjectToolSummary' '400': description: Invalid object ID. '403': description: User does not have read access to the object. '404': description: Object with given ID does not exist. '500': description: Database failure. security: - BearerAuth: [] tags: - Object Tools /v1/objects/query: post: operationId: queryObjects 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: [] tags: - Objects /v1/objects/search: post: operationId: searchObjects 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: [] tags: - Objects /v1/scheduled-task-handlers: get: operationId: listScheduledTaskHandlers summary: List available task handlers description: Retrieve a list of registered scheduled task handler names accessible to the current user. responses: '200': description: Handler list retrieved successfully content: application/json: schema: type: array items: type: string '401': description: Unauthorized '403': description: User does not have any scheduled task access rights security: - BearerAuth: [] tags: - Scheduled Tasks /v1/scheduled-tasks: get: operationId: listScheduledTasks summary: List all accessible scheduled tasks description: Retrieve all scheduled tasks accessible to the current user based on system access rights. responses: '200': description: Task list retrieved successfully content: application/json: schema: type: array items: $ref: '#/components/schemas/ScheduledTask' '401': description: Unauthorized '403': description: User does not have any scheduled task access rights security: - BearerAuth: [] tags: - Scheduled Tasks post: operationId: createScheduledTask summary: Create a new scheduled task description: Create a recurrent (cron-based) or one-time scheduled task. Provide `schedule` for recurrent tasks or `executionTime` for one-time tasks. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ScheduledTaskCreateUpdate' responses: '201': description: Task created successfully '400': description: Invalid request body or missing required fields '401': description: Unauthorized '403': description: Insufficient access rights '500': description: Database failure security: - BearerAuth: [] tags: - Scheduled Tasks /v1/scheduled-tasks/{task-id}: get: operationId: getScheduledTask summary: Get scheduled task details description: Retrieve details of a specific scheduled task by ID. parameters: - name: task-id in: path required: true schema: type: integer format: int64 responses: '200': description: Task details retrieved successfully content: application/json: schema: $ref: '#/components/schemas/ScheduledTask' '400': description: Invalid task ID '401': description: Unauthorized '403': description: Insufficient access rights '404': description: Task not found or not accessible security: - BearerAuth: [] tags: - Scheduled Tasks put: operationId: updateScheduledTask summary: Update a scheduled task description: Update an existing scheduled task. Provide `schedule` for recurrent tasks or `executionTime` for one-time tasks. parameters: - name: task-id in: path required: true schema: type: integer format: int64 requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ScheduledTaskCreateUpdate' responses: '200': description: Task updated successfully content: application/json: schema: $ref: '#/components/schemas/ScheduledTask' '400': description: Invalid request body or missing required fields '401': description: Unauthorized '403': description: Insufficient access rights '404': description: Task not found '500': description: Database failure security: - BearerAuth: [] tags: - Scheduled Tasks delete: operationId: deleteScheduledTask summary: Delete a scheduled task description: Delete a scheduled task by ID. parameters: - name: task-id in: path required: true schema: type: integer format: int64 responses: '204': description: Task deleted successfully '400': description: Invalid task ID '401': description: Unauthorized '403': description: Insufficient access rights '404': description: Task not found '500': description: Database failure security: - BearerAuth: [] tags: - Scheduled Tasks /v1/script-library: get: operationId: listScripts 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: operationId: createScript 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: operationId: getScript 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: operationId: updateScript 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: operationId: deleteScript 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/notification-channels: get: operationId: listNotificationChannels summary: List notification channels description: Retrieve a list of all notification channels configured on the server. responses: '200': description: Notification channels retrieved successfully content: application/json: schema: type: array items: $ref: '#/components/schemas/NotificationChannel' '403': description: Access denied security: - BearerAuth: [] tags: - Notification Channels post: operationId: createNotificationChannel summary: Create a notification channel description: Create a new notification channel with the specified driver and configuration. requestBody: required: true content: application/json: schema: type: object required: - name - driverName properties: name: type: string description: Unique channel name description: type: string description: Channel description driverName: type: string description: Notification driver name configuration: type: string description: Driver-specific configuration (XML or NXSL script) responses: '201': description: Notification channel created successfully content: application/json: schema: $ref: '#/components/schemas/NotificationChannel' '400': description: Invalid or missing required fields '403': description: Access denied '409': description: Channel with this name already exists security: - BearerAuth: [] tags: - Notification Channels /v1/notification-channels/{channel-name}: get: operationId: getNotificationChannel summary: Get notification channel details description: Retrieve details of a specific notification channel. parameters: - name: channel-name in: path required: true schema: type: string description: Channel name responses: '200': description: Notification channel details retrieved successfully content: application/json: schema: $ref: '#/components/schemas/NotificationChannel' '403': description: Access denied '404': description: Notification channel not found security: - BearerAuth: [] tags: - Notification Channels put: operationId: updateNotificationChannel summary: Update a notification channel description: Update an existing notification channel. Only provided fields are updated. parameters: - name: channel-name in: path required: true schema: type: string description: Channel name requestBody: required: true content: application/json: schema: type: object properties: description: type: string description: Channel description driverName: type: string description: Notification driver name configuration: type: string description: Driver-specific configuration (XML or NXSL script) responses: '200': description: Notification channel updated successfully content: application/json: schema: $ref: '#/components/schemas/NotificationChannel' '400': description: Invalid request '403': description: Access denied '404': description: Notification channel not found security: - BearerAuth: [] tags: - Notification Channels delete: operationId: deleteNotificationChannel summary: Delete a notification channel description: Delete a notification channel. Fails if the channel is used in server actions. parameters: - name: channel-name in: path required: true schema: type: string description: Channel name responses: '204': description: Notification channel deleted successfully '403': description: Access denied '404': description: Notification channel not found '409': description: Channel is used in server actions security: - BearerAuth: [] tags: - Notification Channels /v1/notification-channels/{channel-name}/rename: post: operationId: renameNotificationChannel summary: Rename a notification channel description: Rename an existing notification channel. Also updates references in server actions. parameters: - name: channel-name in: path required: true schema: type: string description: Current channel name requestBody: required: true content: application/json: schema: type: object required: - newName properties: newName: type: string description: New channel name responses: '200': description: Notification channel renamed successfully '400': description: Invalid or missing new name '403': description: Access denied '404': description: Notification channel not found '409': description: Channel with the new name already exists security: - BearerAuth: [] tags: - Notification Channels /v1/notification-channels/{channel-name}/clear-queue: post: operationId: clearNotificationChannelQueue summary: Clear notification channel queue description: Clear all pending messages in the notification channel's queue. parameters: - name: channel-name in: path required: true schema: type: string description: Channel name responses: '204': description: Queue cleared successfully '403': description: Access denied '404': description: Notification channel not found security: - BearerAuth: [] tags: - Notification Channels /v1/notification-channels/{channel-name}/send: post: operationId: sendNotification summary: Send a notification description: Send a test notification message through the specified channel. parameters: - name: channel-name in: path required: true schema: type: string description: Channel name requestBody: required: true content: application/json: schema: type: object required: - recipient - body properties: recipient: type: string description: Message recipient subject: type: string description: Message subject body: type: string description: Message body responses: '204': description: Notification queued for sending '400': description: Invalid or missing required fields '403': description: Access denied '404': description: Notification channel not found security: - BearerAuth: [] tags: - Notification Channels /v1/notification-drivers: get: operationId: listNotificationDrivers summary: List notification drivers description: Retrieve a list of all loaded notification channel driver names. responses: '200': description: Notification drivers retrieved successfully content: application/json: schema: type: array items: type: string '403': description: Access denied security: - BearerAuth: [] tags: - Notification Channels /v1/event-forwarders: get: operationId: listEventForwarders summary: List event forwarders description: Retrieve a list of all event forwarders configured on the server. responses: '200': description: Event forwarders retrieved successfully content: application/json: schema: type: array items: $ref: '#/components/schemas/EventForwarder' '403': description: Access denied security: - BearerAuth: [] tags: - Event Forwarders post: operationId: createEventForwarder summary: Create an event forwarder description: Create a new event forwarder with the specified driver and configuration. requestBody: required: true content: application/json: schema: type: object required: - name - driverName properties: name: type: string description: Unique event forwarder name description: type: string description: Event forwarder description driverName: type: string description: Event forwarder driver name configuration: type: object additionalProperties: true description: Driver-specific configuration object responses: '201': description: Event forwarder created successfully content: application/json: schema: $ref: '#/components/schemas/EventForwarder' '400': description: Invalid or missing required fields '403': description: Access denied '409': description: Event forwarder with this name already exists security: - BearerAuth: [] tags: - Event Forwarders /v1/event-forwarders/{forwarder-name}: get: operationId: getEventForwarder summary: Get event forwarder details description: Retrieve details of a specific event forwarder. parameters: - name: forwarder-name in: path required: true schema: type: string description: Event forwarder name responses: '200': description: Event forwarder details retrieved successfully content: application/json: schema: $ref: '#/components/schemas/EventForwarder' '403': description: Access denied '404': description: Event forwarder not found security: - BearerAuth: [] tags: - Event Forwarders put: operationId: updateEventForwarder summary: Update an event forwarder description: Update an existing event forwarder. Only provided fields are updated. parameters: - name: forwarder-name in: path required: true schema: type: string description: Event forwarder name requestBody: required: true content: application/json: schema: type: object properties: description: type: string description: Event forwarder description driverName: type: string description: Event forwarder driver name configuration: type: object additionalProperties: true description: Driver-specific configuration object responses: '200': description: Event forwarder updated successfully content: application/json: schema: $ref: '#/components/schemas/EventForwarder' '400': description: Invalid request '403': description: Access denied '404': description: Event forwarder not found security: - BearerAuth: [] tags: - Event Forwarders delete: operationId: deleteEventForwarder summary: Delete an event forwarder description: Delete an event forwarder. Fails if the forwarder is used in server actions. parameters: - name: forwarder-name in: path required: true schema: type: string description: Event forwarder name responses: '204': description: Event forwarder deleted successfully '403': description: Access denied '404': description: Event forwarder not found '409': description: Event forwarder is used in server actions security: - BearerAuth: [] tags: - Event Forwarders /v1/event-forwarders/{forwarder-name}/rename: post: operationId: renameEventForwarder summary: Rename an event forwarder description: Rename an existing event forwarder. Also updates references in server actions. parameters: - name: forwarder-name in: path required: true schema: type: string description: Current event forwarder name requestBody: required: true content: application/json: schema: type: object required: - newName properties: newName: type: string description: New event forwarder name responses: '200': description: Event forwarder renamed successfully '400': description: Invalid or missing new name '403': description: Access denied '404': description: Event forwarder not found '409': description: Event forwarder with the new name already exists security: - BearerAuth: [] tags: - Event Forwarders /v1/event-forwarder-drivers: get: operationId: listEventForwarderDrivers summary: List event forwarder drivers description: Retrieve a list of all registered event forwarder driver names. responses: '200': description: Event forwarder drivers retrieved successfully content: application/json: schema: type: array items: type: string '403': description: Access denied security: - BearerAuth: [] tags: - Event Forwarders /v1/snmp-mib: get: operationId: getMibRoot summary: Get MIB tree root description: Retrieve the synthetic root of the server's compiled SNMP MIB tree, including the list of immediate children (typically `ccitt(0)`, `iso(1)`, `joint-iso-ccitt(2)`). responses: '200': description: MIB root node retrieved successfully content: application/json: schema: $ref: '#/components/schemas/MibNode' '401': description: Unauthorized '503': description: MIB tree is not loaded security: - BearerAuth: [] tags: - SNMP MIB /v1/snmp-mib/{oid}: get: operationId: getMibNode summary: Get MIB node by OID description: Retrieve the MIB node identified by the given OID, including its immediate children. The OID is a dotted numeric path with no leading dot (for example `1.3.6.1.2.1.1.1`). parameters: - name: oid in: path required: true schema: type: string description: Dotted numeric OID without a leading dot (e.g. `1.3.6.1.2.1.1.1`). responses: '200': description: MIB node retrieved successfully content: application/json: schema: $ref: '#/components/schemas/MibNode' '400': description: Invalid OID '401': description: Unauthorized '404': description: No MIB object found with the given OID '503': description: MIB tree is not loaded security: - BearerAuth: [] tags: - SNMP MIB /v1/ssh-keys: get: operationId: listSshKeys summary: List SSH keys description: Retrieve a list of all SSH keys. Optionally include public key data. parameters: - name: includePublicKey in: query required: false schema: type: boolean description: Include public key data in the response responses: '200': description: SSH keys retrieved successfully content: application/json: schema: type: array items: $ref: '#/components/schemas/SshKey' '401': description: Unauthorized security: - BearerAuth: [] tags: - SSH Keys post: operationId: createSshKey summary: Create SSH key description: | Create a new SSH key. If only a name is provided, a new RSA key pair is generated. If publicKey and privateKey fields are also provided, the key pair is imported. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SshKeyCreate' responses: '201': description: SSH key created successfully content: application/json: schema: $ref: '#/components/schemas/SshKey' '400': description: Invalid request '401': description: Unauthorized '403': description: User does not have SSH key configuration access rights security: - BearerAuth: [] tags: - SSH Keys /v1/ssh-keys/{key-id}: get: operationId: getSshKey summary: Get SSH key details description: Retrieve details of a specific SSH key including its public key. parameters: - name: key-id in: path required: true schema: type: integer description: SSH key ID responses: '200': description: SSH key details retrieved successfully content: application/json: schema: $ref: '#/components/schemas/SshKey' '400': description: Invalid key ID '401': description: Unauthorized '404': description: SSH key not found security: - BearerAuth: [] tags: - SSH Keys put: operationId: updateSshKey summary: Update SSH key description: Update an existing SSH key's name and optionally its key data. parameters: - name: key-id in: path required: true schema: type: integer description: SSH key ID requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SshKeyUpdate' responses: '200': description: SSH key updated successfully content: application/json: schema: $ref: '#/components/schemas/SshKey' '400': description: Invalid request '401': description: Unauthorized '403': description: User does not have SSH key configuration access rights '404': description: SSH key not found security: - BearerAuth: [] tags: - SSH Keys delete: operationId: deleteSshKey summary: Delete SSH key description: | Delete an SSH key. If the key is in use by nodes, returns 409 with the list of node IDs. Use force=true to delete the key even if it is in use. parameters: - name: key-id in: path required: true schema: type: integer description: SSH key ID - name: force in: query required: false schema: type: boolean description: Force delete even if the key is in use by nodes responses: '204': description: SSH key deleted successfully '400': description: Invalid key ID '401': description: Unauthorized '403': description: User does not have SSH key configuration access rights '404': description: SSH key not found '409': description: SSH key is in use content: application/json: schema: $ref: '#/components/schemas/SshKeyInUse' security: - BearerAuth: [] tags: - SSH Keys /v1/web-service-definitions: get: operationId: listWebServiceDefinitions summary: List web service definitions description: Retrieve a list of all web service definitions. responses: '200': description: Web service definitions retrieved successfully content: application/json: schema: type: array items: $ref: '#/components/schemas/WebServiceDefinition' '401': description: Unauthorized '403': description: User does not have web service definitions access rights security: - BearerAuth: [] tags: - Web Service Definitions post: operationId: createWebServiceDefinition summary: Create web service definition description: Create a new web service definition. Name and URL are required. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/WebServiceDefinitionCreate' responses: '201': description: Web service definition created successfully content: application/json: schema: $ref: '#/components/schemas/WebServiceDefinition' '400': description: Invalid request (missing name or url) '401': description: Unauthorized '403': description: User does not have web service definitions access rights '409': description: Web service definition with this name already exists security: - BearerAuth: [] tags: - Web Service Definitions /v1/web-service-definitions/{definition-id}: get: operationId: getWebServiceDefinition summary: Get web service definition details description: Retrieve details of a specific web service definition. parameters: - name: definition-id in: path required: true schema: type: integer description: Web service definition ID responses: '200': description: Web service definition details retrieved successfully content: application/json: schema: $ref: '#/components/schemas/WebServiceDefinition' '400': description: Invalid definition ID '401': description: Unauthorized '403': description: User does not have web service definitions access rights '404': description: Web service definition not found security: - BearerAuth: [] tags: - Web Service Definitions put: operationId: updateWebServiceDefinition summary: Update web service definition description: Update an existing web service definition. parameters: - name: definition-id in: path required: true schema: type: integer description: Web service definition ID requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/WebServiceDefinitionCreate' responses: '200': description: Web service definition updated successfully content: application/json: schema: $ref: '#/components/schemas/WebServiceDefinition' '400': description: Invalid request '401': description: Unauthorized '403': description: User does not have web service definitions access rights '404': description: Web service definition not found '409': description: Web service definition with this name already exists security: - BearerAuth: [] tags: - Web Service Definitions delete: operationId: deleteWebServiceDefinition summary: Delete web service definition description: Delete a web service definition. parameters: - name: definition-id in: path required: true schema: type: integer description: Web service definition ID responses: '204': description: Web service definition deleted successfully '400': description: Invalid definition ID '401': description: Unauthorized '403': description: User does not have web service definitions access rights '404': description: Web service definition not found security: - BearerAuth: [] tags: - Web Service Definitions /v1/server-actions: get: operationId: listServerActions 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: operationId: createServerAction 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: operationId: getServerAction 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: operationId: updateServerAction 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: operationId: deleteServerAction 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: operationId: listObjectTools 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: [] tags: - Object Tools post: operationId: createObjectTool summary: Create a new object tool description: | Create a new object tool. The server assigns the tool ID and GUID. Requires SYSTEM_ACCESS_MANAGE_TOOLS. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ObjectToolWrite' responses: '201': description: Object tool created. content: application/json: schema: $ref: '#/components/schemas/ObjectToolDetails' '400': description: Missing or invalid request body, tool name, or tool type. '403': description: Insufficient access rights (SYSTEM_ACCESS_MANAGE_TOOLS required). '500': description: Database failure. security: - BearerAuth: [] tags: - Object Tools /v1/object-tools/{tool-id}: get: operationId: getObjectTool summary: Get object tool details description: | Retrieve full details of a specific object tool. When the caller has SYSTEM_ACCESS_MANAGE_TOOLS rights the response additionally includes the `acl` and (for snmp-table / agent-list tools) `columns` fields. 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: [] tags: - Object Tools put: operationId: updateObjectTool summary: Update an existing object tool description: | Whole-record replace of an existing object tool. Requires SYSTEM_ACCESS_MANAGE_TOOLS. The ACL, table columns, and input field definitions are all replaced by the values in the request body. parameters: - name: tool-id in: path required: true schema: type: integer description: Object tool ID requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ObjectToolWrite' responses: '200': description: Object tool updated. content: application/json: schema: $ref: '#/components/schemas/ObjectToolDetails' '400': description: Missing or invalid request body, tool name, or tool type. '403': description: Insufficient access rights (SYSTEM_ACCESS_MANAGE_TOOLS required). '404': description: Tool not found. '500': description: Database failure. security: - BearerAuth: [] tags: - Object Tools delete: operationId: deleteObjectTool summary: Delete an object tool description: | Delete an object tool along with its ACL, table columns and input field definitions. Requires SYSTEM_ACCESS_MANAGE_TOOLS. parameters: - name: tool-id in: path required: true schema: type: integer description: Object tool ID responses: '204': description: Object tool deleted. '400': description: Invalid tool ID. '403': description: Insufficient access rights (SYSTEM_ACCESS_MANAGE_TOOLS required). '500': description: Database failure. security: - BearerAuth: [] tags: - Object Tools /v1/object-tools/{tool-id}/disable: post: operationId: disableObjectTool summary: Disable an object tool description: | Sets the `disabled` flag on the tool so that it is hidden from per-object tool lists and cannot be executed. Requires SYSTEM_ACCESS_MANAGE_TOOLS. parameters: - name: tool-id in: path required: true schema: type: integer description: Object tool ID responses: '204': description: Object tool disabled. '400': description: Invalid tool ID. '403': description: Insufficient access rights (SYSTEM_ACCESS_MANAGE_TOOLS required). '500': description: Database failure. security: - BearerAuth: [] tags: - Object Tools /v1/object-tools/{tool-id}/enable: post: operationId: enableObjectTool summary: Enable an object tool description: | Clears the `disabled` flag on the tool. Requires SYSTEM_ACCESS_MANAGE_TOOLS. parameters: - name: tool-id in: path required: true schema: type: integer description: Object tool ID responses: '204': description: Object tool enabled. '400': description: Invalid tool ID. '403': description: Insufficient access rights (SYSTEM_ACCESS_MANAGE_TOOLS required). '500': description: Database failure. security: - BearerAuth: [] tags: - Object Tools /v1/object-tools/{tool-id}/execute: post: operationId: executeObjectTool 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, url. Client-only tool types (internal, 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 maskedFields: type: array items: type: string description: | Optional list of input field names whose values must be masked in the audit log and in user-visible context such as the result table title for table tools (typically password-type fields). Names not present in inputFields are ignored. stream: type: boolean description: | If true and the tool generates output, execution starts asynchronously and a WebSocket token is returned for streaming output. Supported for tool types: action, server-command, server-script, ssh-command. default: false responses: '200': description: Tool executed successfully (synchronous mode) content: application/json: schema: oneOf: - $ref: '#/components/schemas/ObjectToolTextResult' - $ref: '#/components/schemas/ObjectToolTableResult' - $ref: '#/components/schemas/ObjectToolNoResult' - $ref: '#/components/schemas/ObjectToolUrlResult' discriminator: propertyName: type mapping: text: '#/components/schemas/ObjectToolTextResult' table: '#/components/schemas/ObjectToolTableResult' none: '#/components/schemas/ObjectToolNoResult' url: '#/components/schemas/ObjectToolUrlResult' '202': description: | Tool execution started in streaming mode. Connect to the returned WebSocket URL to receive output in real-time. content: application/json: schema: $ref: '#/components/schemas/ObjectToolStreamingResult' '400': description: | Invalid request. Possible reasons: - Invalid or missing tool-id - Missing or invalid objectId - Tool type is client-only (internal, command, file-download) - Tool is disabled - Incompatible object class for the tool type - SSH command target has no owning node (standalone access point, sensor without gateway) '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 (or on the owning node for SSH tools on interface/sensor/access point) - 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/object-tools/output/{token}: get: operationId: connectObjectToolOutput summary: Connect to tool output stream (WebSocket) description: | WebSocket endpoint for receiving streaming output from an object tool execution. The token is obtained from POST /v1/object-tools/{tool-id}/execute with stream=true. Token is single-use and expires after 30 seconds. Server sends JSON text frames: - `{"type":"output","data":"..."}` - output chunk - `{"type":"result","data":"..."}` - script return value (server-script tools only) - `{"type":"completed"}` - execution finished successfully - `{"type":"error","message":"..."}` - execution failed tags: - Object Tools parameters: - name: token in: path required: true schema: type: string format: uuid description: Single-use token from the streaming execute response responses: '101': description: Switching protocols to WebSocket /v1/event-processing-policy: get: operationId: getEventProcessingPolicy summary: Get event processing policy description: | Retrieve the complete event processing policy as an ordered list of rules. The returned `version` value should be sent back unchanged in a subsequent update request to detect concurrent modifications (optimistic concurrency control). responses: '200': description: Event processing policy retrieved successfully content: application/json: schema: $ref: '#/components/schemas/EventProcessingPolicy' '401': description: Unauthorized '403': description: User does not have EPP access right security: - BearerAuth: [] tags: - Event Processing Policy put: operationId: updateEventProcessingPolicy summary: Replace event processing policy description: | Replace the entire event processing policy with the supplied ordered list of rules. If `version` is present in the request body it must match the current policy version, otherwise the request is rejected with status 409 and the body contains the current `currentVersion`. If `version` is omitted the policy is replaced unconditionally. Each rule may be supplied either in the form produced by this API (object IDs and event codes as plain integers) or as a configuration export record (object/event references as objects carrying name and GUID); the latter form is resolved on import and any references that cannot be resolved are dropped, with details returned in the optional `warnings` field. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/EventProcessingPolicyUpdateRequest' responses: '200': description: Event processing policy updated successfully content: application/json: schema: $ref: '#/components/schemas/EventProcessingPolicyUpdateResult' '400': description: Invalid event processing policy data '401': description: Unauthorized '403': description: User does not have EPP access right '409': description: Version conflict - the policy was modified by another client content: application/json: schema: type: object properties: error: type: string currentVersion: type: integer description: Current policy version on the server '500': description: Database failure security: - BearerAuth: [] tags: - Event Processing Policy /v1/event-processing-policy/rules/{rule-guid}: get: operationId: getEventProcessingPolicyRule summary: Get event processing policy rule description: Retrieve a single event processing policy rule by its GUID. parameters: - name: rule-guid in: path required: true schema: type: string format: uuid description: Rule GUID responses: '200': description: Rule retrieved successfully content: application/json: schema: $ref: '#/components/schemas/EventProcessingPolicyRule' '400': description: Invalid rule GUID '401': description: Unauthorized '403': description: User does not have EPP access right '404': description: Rule not found security: - BearerAuth: [] tags: - Event Processing Policy /v1/event-templates: get: operationId: listEventTemplates 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: operationId: createEventTemplate 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: operationId: getEventTemplate 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: operationId: updateEventTemplate 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: operationId: deleteEventTemplate 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: operationId: listDciSummaryTables 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: operationId: createDciSummaryTable 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: operationId: getDciSummaryTable 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: operationId: updateDciSummaryTable 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: operationId: deleteDciSummaryTable 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: operationId: queryDciSummaryTable 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: operationId: adhocQueryDciSummaryTable 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: operationId: listUsers 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: operationId: createUser 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: operationId: getUser 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: operationId: updateUser 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: operationId: deleteUser 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: operationId: setUserPassword 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: operationId: listUserGroups 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: operationId: createUserGroup 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: operationId: getUserGroup 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: operationId: updateUserGroup 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: operationId: deleteUserGroup 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 /v1/users/{user-id}/2fa-bindings: get: operationId: listUser2faBindings summary: List user's 2FA bindings description: | Retrieve the list of two-factor authentication method bindings for a specific user. Users can view their own bindings; viewing other users' bindings requires MANAGE_USERS access right. parameters: - name: user-id in: path required: true schema: type: integer description: User ID responses: '200': description: 2FA bindings retrieved successfully content: application/json: schema: type: array items: $ref: '#/components/schemas/TwoFactorBinding' '400': description: Invalid user ID '403': description: Access denied (not own user and no MANAGE_USERS right) '404': description: User not found security: - BearerAuth: [] tags: - Two-Factor Authentication /v1/users/{user-id}/2fa-bindings/{method-name}: put: operationId: setUser2faBinding summary: Create or update user 2FA binding description: | Create or update a two-factor authentication method binding for a specific user. Users can manage their own bindings; managing other users' bindings requires MANAGE_USERS access right. parameters: - name: user-id in: path required: true schema: type: integer description: User ID - name: method-name in: path required: true schema: type: string description: 2FA method name requestBody: required: true content: application/json: schema: type: object additionalProperties: type: string description: Method-specific configuration as key-value pairs responses: '200': description: 2FA binding updated successfully '400': description: Invalid user ID or missing method name '403': description: Access denied (not own user and no MANAGE_USERS right) '404': description: User not found or unknown 2FA method '500': description: Internal error security: - BearerAuth: [] tags: - Two-Factor Authentication delete: operationId: deleteUser2faBinding summary: Delete user 2FA binding description: | Delete a two-factor authentication method binding for a specific user. Users can manage their own bindings; managing other users' bindings requires MANAGE_USERS access right. parameters: - name: user-id in: path required: true schema: type: integer description: User ID - name: method-name in: path required: true schema: type: string description: 2FA method name responses: '204': description: 2FA binding deleted successfully '400': description: Invalid user ID or missing method name '403': description: Access denied (not own user and no MANAGE_USERS right) '404': description: User not found or binding not found '500': description: Internal error security: - BearerAuth: [] tags: - Two-Factor Authentication /v1/2fa/drivers: get: operationId: list2faDrivers summary: List available 2FA drivers description: Retrieve the list of available two-factor authentication drivers. Requires MANAGE_2FA_METHODS access right. responses: '200': description: 2FA drivers retrieved successfully content: application/json: schema: type: array items: type: string example: ["TOTP", "Message"] '403': description: User does not have MANAGE_2FA_METHODS access right security: - BearerAuth: [] tags: - Two-Factor Authentication /v1/2fa/methods: get: operationId: list2faMethods summary: List 2FA methods description: Retrieve the list of configured two-factor authentication methods. Requires MANAGE_2FA_METHODS access right. responses: '200': description: 2FA methods retrieved successfully content: application/json: schema: type: array items: $ref: '#/components/schemas/TwoFactorMethod' '403': description: User does not have MANAGE_2FA_METHODS access right security: - BearerAuth: [] tags: - Two-Factor Authentication post: operationId: create2faMethod summary: Create 2FA method description: Create a new two-factor authentication method. Requires MANAGE_2FA_METHODS access right. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/TwoFactorMethodInput' responses: '201': description: 2FA method created successfully content: application/json: schema: $ref: '#/components/schemas/TwoFactorMethod' '400': description: Missing or invalid required fields, or unknown driver '403': description: User does not have MANAGE_2FA_METHODS access right '409': description: Method with this name already exists '500': description: Database failure security: - BearerAuth: [] tags: - Two-Factor Authentication /v1/2fa/methods/{method-name}: get: operationId: get2faMethod summary: Get 2FA method details description: Retrieve details of a specific two-factor authentication method. Requires MANAGE_2FA_METHODS access right. parameters: - name: method-name in: path required: true schema: type: string description: 2FA method name responses: '200': description: 2FA method retrieved successfully content: application/json: schema: $ref: '#/components/schemas/TwoFactorMethod' '400': description: Missing method name '403': description: User does not have MANAGE_2FA_METHODS access right '404': description: Method not found security: - BearerAuth: [] tags: - Two-Factor Authentication put: operationId: update2faMethod summary: Update 2FA method description: | Update an existing two-factor authentication method. Only the fields provided in the request body will be modified. Requires MANAGE_2FA_METHODS access right. parameters: - name: method-name in: path required: true schema: type: string description: 2FA method name requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/TwoFactorMethodInput' responses: '200': description: 2FA method updated successfully content: application/json: schema: $ref: '#/components/schemas/TwoFactorMethod' '400': description: Unknown driver '403': description: User does not have MANAGE_2FA_METHODS access right '404': description: Method not found '500': description: Database failure security: - BearerAuth: [] tags: - Two-Factor Authentication delete: operationId: delete2faMethod summary: Delete 2FA method description: Delete a two-factor authentication method. Requires MANAGE_2FA_METHODS access right. parameters: - name: method-name in: path required: true schema: type: string description: 2FA method name responses: '204': description: 2FA method deleted successfully '400': description: Missing method name '403': description: User does not have MANAGE_2FA_METHODS access right '500': description: Database failure security: - BearerAuth: [] tags: - Two-Factor Authentication components: schemas: AiSavedPrompt: type: object properties: id: type: integer description: Unique prompt identifier name: type: string description: Display name for the saved prompt description: type: string nullable: true description: Optional description promptText: type: string description: The prompt text InetAddress: type: object properties: family: type: integer description: IP address family address: type: integer description: IP address prefixLength: type: integer description: IP address prefix length LibraryImage: type: object properties: guid: type: string format: uuid description: Unique image identifier. name: type: string description: Image display name. category: type: string description: Image category. mimeType: type: string description: Image MIME type (e.g. image/png, image/svg+xml). isProtected: type: boolean description: Whether the image is a system-protected image that cannot be modified or deleted. GeoArea: type: object properties: id: type: integer description: Unique geo area identifier. name: type: string description: Geo area name. comments: type: string description: Optional comments. border: type: array description: List of border coordinates defining the area polygon. items: type: object properties: latitude: type: number format: double description: Latitude in decimal degrees. longitude: type: number format: double description: Longitude in decimal degrees. GeoAreaCreateUpdate: type: object required: - name properties: name: type: string description: Geo area name (cannot be empty). comments: type: string description: Optional comments. border: type: array description: List of border coordinates defining the area polygon. items: type: object required: - latitude - longitude properties: latitude: type: number format: double description: Latitude in decimal degrees. longitude: type: number format: double description: Longitude in decimal degrees. MibNode: type: object description: A node in the SNMP MIB tree, including its immediate children. properties: oid: type: string description: Full dotted OID for this node. Empty string for the synthetic root. name: type: string nullable: true description: Symbolic name of the node (e.g. `sysDescr`). Null if the node has no name (synthetic root). type: type: string nullable: true description: Symbolic name of the MIB type (e.g. `COUNTER32`). Null if the type code is unknown. enum: - OTHER - IMPORT_ITEM - OBJID - BITSTRING - INTEGER - INTEGER32 - INTEGER64 - UNSIGNED32 - COUNTER - COUNTER32 - COUNTER64 - GAUGE - GAUGE32 - TIMETICKS - OCTETSTR - OPAQUE - IPADDR - PHYSADDR - NETADDR - NAMED_TYPE - SEQID - SEQUENCE - CHOICE - TEXTUAL_CONVENTION - MACRO_DEFINITION - MODCOMP - TRAPTYPE - NOTIFTYPE - MODID - NSAPADDRESS - AGENTCAP - UINTEGER - "NULL" - OBJGROUP - NOTIFGROUP typeCode: type: integer description: Numeric MIB type code as defined in `nxsnmp.h` (MIB_TYPE_*). status: type: string nullable: true description: Symbolic name of the MIB status. Null if the status code is unknown. enum: - MANDATORY - OPTIONAL - OBSOLETE - DEPRECATED - CURRENT statusCode: type: integer description: Numeric MIB status code as defined in `nxsnmp.h` (MIB_STATUS_*). access: type: string nullable: true description: Symbolic name of the MIB access mode. Null if the access code is unknown. enum: - READONLY - READWRITE - WRITEONLY - NOACCESS - NOTIFY - CREATE accessCode: type: integer description: Numeric MIB access code as defined in `nxsnmp.h` (MIB_ACCESS_*). description: type: string nullable: true description: DESCRIPTION clause from the MIB module. textualConvention: type: string nullable: true description: Name of the textual convention applied to this object, if any. displayHint: type: string nullable: true description: DISPLAY-HINT clause for formatting raw values. enumValues: type: string nullable: true description: Comma-separated list of named enumeration values, if defined. index: type: string nullable: true description: INDEX clause for SMIv2 table entries. parent: type: string nullable: true description: Full dotted OID of the parent node. Null for the synthetic root. children: type: array description: Immediate child nodes (one level deep). items: $ref: '#/components/schemas/MibNodeChild' MibNodeChild: type: object description: Summary of a child node, used inside `MibNode.children`. Fetch `/v1/snmp-mib/{oid}` to retrieve full details. properties: subId: type: integer description: Sub-identifier under the parent (last component of the child's OID). oid: type: string description: Full dotted OID of the child node. name: type: string nullable: true description: Symbolic name of the child node, if defined. hasChildren: type: boolean description: True if this child has further descendants. ObjectCategory: type: object properties: id: type: integer description: Unique object category identifier. name: type: string description: Object category name. icon: type: string format: uuid description: UUID of the icon image from the image library. mapImage: type: string format: uuid description: UUID of the map image from the image library. ObjectCategoryCreateUpdate: type: object required: - name properties: name: type: string description: Object category name (cannot be empty). icon: type: string format: uuid description: UUID of the icon image from the image library. mapImage: type: string format: uuid description: UUID of the map image from the image library. ScheduledTask: type: object properties: id: type: integer format: int64 description: Unique task identifier taskHandlerId: type: string description: Task handler identifier schedule: type: string description: Cron-style schedule expression (for recurrent tasks) parameters: type: string description: Task-specific persistent data scheduledExecutionTime: type: string format: date-time nullable: true description: Scheduled execution time in ISO 8601 format, or null if not set lastExecutionTime: type: string format: date-time nullable: true description: Last execution time in ISO 8601 format, or null if never executed recurrent: type: boolean description: Whether this is a recurrent (cron-based) task disabled: type: boolean description: Whether the task is disabled completed: type: boolean description: Whether the task has completed running: type: boolean description: Whether the task is currently running system: type: boolean description: Whether this is a system task userId: type: integer description: Owner user ID objectId: type: integer description: Associated NetXMS object ID comments: type: string description: Task comments taskKey: type: string description: Optional task key for identification ScheduledTaskCreateUpdate: type: object required: - taskHandlerId properties: taskHandlerId: type: string description: Task handler identifier schedule: type: string description: Cron-style schedule expression (for recurrent tasks) executionTime: oneOf: - type: integer format: int64 - type: string format: date-time description: Execution time for one-time tasks. Accepts Unix timestamp (integer) or ISO 8601 string. parameters: type: string description: Task-specific persistent data objectId: type: integer description: Associated NetXMS object ID comments: type: string description: Task comments taskKey: type: string description: Optional task key for identification disabled: type: boolean description: Whether the task should be disabled NotificationChannel: type: object properties: name: type: string description: Channel name description: type: string description: Channel description driverName: type: string description: Notification driver name configuration: type: string description: Driver-specific configuration driverInitialized: type: boolean description: Whether the driver was initialized successfully needSubject: type: boolean description: Whether the driver requires a subject field needRecipient: type: boolean description: Whether the driver requires a recipient field errorMessage: type: string description: Last error message sendStatus: type: integer description: Last send status code healthCheckStatus: type: boolean description: Health check status lastMessageTime: type: string description: Timestamp of last sent message messageCount: type: integer description: Total messages sent failureCount: type: integer description: Total send failures digestedCount: type: integer description: Total messages absorbed into digest queueSize: type: integer description: Current message queue size EventForwarder: type: object properties: name: type: string description: Event forwarder name description: type: string description: Event forwarder description driverName: type: string description: Event forwarder driver name configuration: type: object additionalProperties: true description: Driver-specific configuration object driverInitialized: type: boolean description: Whether the driver was initialized successfully errorMessage: type: string description: Last error message sendStatus: type: integer description: Last delivery status code healthCheckStatus: type: boolean description: Health check status lastMessageTime: type: string description: Timestamp of last forwarded event messageCount: type: integer description: Total events forwarded failureCount: type: integer description: Total delivery failures droppedCount: type: integer description: Total events dropped queueSize: type: integer description: Current event queue size AlarmCategory: type: object properties: id: type: integer description: Unique alarm category identifier. name: type: string description: Alarm category name. description: type: string description: Alarm category description. accessControl: type: array description: User/group IDs allowed to see alarms in this category. Group IDs have the high bit set. items: type: integer AlarmCategoryCreateUpdate: type: object required: - name properties: name: type: string description: Alarm category name (cannot be empty). description: type: string description: Alarm category description. accessControl: type: array description: User/group IDs allowed to see alarms in this category. Group IDs have the high bit set. items: type: integer 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: $ref: '#/components/schemas/UserFlags' 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 groups: type: array items: type: integer description: List of group identifiers this user belongs to 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: $ref: '#/components/schemas/UserFlags' 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: $ref: '#/components/schemas/UserFlags' 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: $ref: '#/components/schemas/UserFlags' 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) UserFlags: type: object description: User or group flags. When used in update requests, only the specified boolean fields are modified (PATCH semantics). properties: disabled: type: boolean description: Whether the account is disabled changePassword: type: boolean description: Must change password at next login cannotChangePassword: type: boolean description: Cannot change own password intruderLockout: type: boolean description: Account locked out due to repeated authentication failures passwordNeverExpires: type: boolean description: Password never expires ldapUser: type: boolean description: Synchronized from LDAP syncException: type: boolean description: Excluded from LDAP synchronization closeOtherSessions: type: boolean description: Close other sessions on login tokenAuthOnly: type: boolean description: Can only authenticate using API tokens twoFAExempt: type: boolean description: Exempt from two-factor authentication twoFAEnforce: type: boolean description: Two-factor authentication is enforced serviceAccount: type: boolean description: Service account (can only authenticate via API tokens, interactive login rejected) TwoFactorMethod: type: object description: Two-factor authentication method properties: name: type: string description: Method name (unique identifier) driver: type: string description: Driver name (e.g., "TOTP", "Message") description: type: string description: Method description isValid: type: boolean description: Whether the method configuration is valid configuration: type: object description: Driver-specific configuration (structure depends on the driver) TwoFactorMethodInput: type: object description: Two-factor authentication method create/update request required: - name - driver properties: name: type: string description: Method name driver: type: string description: Driver name (e.g., "TOTP", "Message") description: type: string description: Method description configuration: type: object description: Driver-specific configuration TwoFactorBinding: type: object description: User's two-factor authentication method binding properties: methodName: type: string description: Name of the 2FA method configuration: type: object additionalProperties: type: string description: Method-specific binding configuration as key-value pairs 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) EventProcessingPolicy: type: object description: Event processing policy - an ordered list of rules plus a version for optimistic concurrency control properties: version: type: integer description: Policy version, incremented on every change. Send this value back when updating the policy to detect concurrent modifications. ruleCount: type: integer description: Number of rules in the policy rules: type: array description: Rules in evaluation order items: $ref: '#/components/schemas/EventProcessingPolicyRule' EventProcessingPolicyUpdateRequest: type: object description: Request body for replacing the entire event processing policy required: - rules properties: version: type: integer description: | Expected current policy version. If present, the update is applied only if it matches the server-side version, otherwise the request is rejected with status 409. If omitted, the policy is replaced unconditionally. rules: type: array description: New rule list in evaluation order (the existing policy is fully replaced) items: $ref: '#/components/schemas/EventProcessingPolicyRule' EventProcessingPolicyUpdateResult: type: object description: Result of a successful event processing policy update properties: version: type: integer description: New policy version ruleCount: type: integer description: Number of rules now in the policy warnings: type: string description: Human-readable text describing any issues encountered while applying the rules (e.g. references to objects that no longer exist). Present only if there were warnings. EventProcessingPolicyRule: type: object description: | A single event processing policy rule. On output, object and event references are plain numeric identifiers. On input, they may also be supplied as configuration export records (objects/events as nested objects carrying `name` and `guid`); such references are resolved by GUID or name. properties: guid: type: string format: uuid description: Rule GUID. A new random GUID is generated on input if omitted. ruleNumber: type: integer description: 1-based position of the rule in the policy (output only; ignored on input - array order is authoritative) flags: type: integer description: | Rule flags bitmask: 0x000001 stop processing, 0x000002 negated source match, 0x000004 negated event match, 0x000008 generate alarm, 0x000010 disabled, 0x000020 terminate alarms by regular expression, 0x000100..0x001000 match severity (info/warning/minor/major/critical), 0x002000 create helpdesk ticket, 0x004000 accept correlated events, 0x008000 negated time frame match, 0x010000 start downtime, 0x020000 end downtime, 0x040000 request AI comment, 0x080000 create incident, 0x100000 AI analyze incident, 0x200000 AI auto-assign incident sources: type: array description: Source object IDs the rule matches (empty = match any source) items: type: integer sourceExclusions: type: array description: Source object IDs explicitly excluded from matching items: type: integer events: type: array description: Event codes the rule matches (empty = match any event) items: type: integer timeFrames: type: array description: Time frames during which the rule is active (empty = always active) items: type: object properties: time: type: integer description: Time-of-day filter bitmask date: type: integer description: Date filter bitmask (day of month / month / day of week) filterScript: type: string description: NXSL filter script source; rule matches only if the script returns true alarmSeverity: type: integer description: "Severity of the generated alarm: 0=Normal, 1=Warning, 2=Minor, 3=Major, 4=Critical, 5=same as event, 6=terminate alarms, 7=resolve alarms" alarmKey: type: string description: Alarm key template (supports macro expansion) alarmMessage: type: string description: Alarm message template (supports macro expansion) alarmImpact: type: string description: Alarm impact description template alarmTimeout: type: integer description: Alarm timeout in seconds (0 = no timeout) alarmTimeoutEvent: type: integer description: Event code generated when the alarm times out alarmCategories: type: array description: Alarm category IDs assigned to the generated alarm items: type: integer rootCauseAnalysisScript: type: string description: Name of the library script used for root cause analysis actions: type: array description: Server actions executed when the rule matches items: type: object properties: id: type: integer description: Server action ID timerDelay: type: string description: Delay before executing the action (seconds; supports macro expansion). Empty for immediate execution. timerKey: type: string description: Timer key (supports macro expansion); used together with timerCancellations blockingTimerKey: type: string description: Action is suppressed while a timer with this key is active snoozeTime: type: string description: Minimum interval between repeated executions (seconds; supports macro expansion) active: type: boolean description: Whether the action is enabled timerCancellations: type: array description: Timer keys to cancel when the rule matches items: type: string actionScript: type: string description: NXSL action script executed when the rule matches pstorageSetActions: type: object additionalProperties: type: string description: Persistent storage entries to set (key/value pairs; values support macro expansion) pstorageDeleteActions: type: array description: Persistent storage keys to delete items: type: string customAttributeSetActions: type: object additionalProperties: type: string description: Custom attributes to set on the source object (key/value pairs; values support macro expansion) customAttributeDeleteActions: type: array description: Custom attribute names to delete from the source object items: type: string downtimeTag: type: string description: Downtime tag used when starting or ending maintenance downtime incidentDelay: type: integer description: Delay in seconds before an incident is created (0 = immediate) incidentTitle: type: string description: Incident title template (empty = use alarm message) incidentDescription: type: string description: Incident description template incidentAIAnalysisDepth: type: integer description: Depth of AI incident analysis (0=quick, 1=standard, 2=thorough) incidentAIPrompt: type: string description: Custom AI analysis instructions for the incident aiAgentInstructions: type: string description: Instructions for the AI agent when generating an alarm comment comments: type: string description: Rule description 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' flags: type: object description: Tool flags properties: 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 applicableClasses: type: integer description: | Bitmask of object classes the tool is applicable to. Bit 0 (1) = Node, bit 1 (2) = Interface, bit 2 (4) = Sensor, bit 3 (8) = Access point. Only server-script and URL tools may include bits other than Node. inputFields: type: array items: $ref: '#/components/schemas/ObjectToolInputField' description: Input field definitions ObjectToolColumn: type: object description: Column definition for table tools (snmp-table or agent-list) properties: name: type: string description: Column display name oid: type: string description: Column SNMP OID or agent column expression format: type: integer description: Column data format code captureGroup: type: integer description: Regex capture group number used to extract the cell value (0 for whole match) 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 format: uuid description: UUID of the icon image in the image library; absent when no icon is set remotePort: type: integer description: Remote port for TCP tunnel remoteHost: type: string description: Remote host for TCP tunnel acl: type: array description: | User and group IDs allowed to execute this tool. Only present when the caller has SYSTEM_ACCESS_MANAGE_TOOLS rights. items: type: integer columns: type: array description: | Column definitions for table tools. Only present when the caller has SYSTEM_ACCESS_MANAGE_TOOLS rights and the tool type is snmp-table or agent-list. items: $ref: '#/components/schemas/ObjectToolColumn' ObjectToolWrite: type: object description: | Request body for creating or updating an object tool. The shape mirrors the ObjectToolDetails response, so a tool can be fetched, edited, and put back without translation. Whole-record replace semantics on PUT. required: - name - type properties: name: type: string description: Tool name type: $ref: '#/components/schemas/ObjectToolType' data: type: string description: Tool-specific data (command line, script name, URL template, etc.) description: type: string flags: type: object description: Tool flag booleans; missing keys default to false properties: askConfirmation: type: boolean generatesOutput: type: boolean disabled: type: boolean showInCommands: type: boolean snmpIndexedByValue: type: boolean runInContainerContext: type: boolean suppressSuccessMessage: type: boolean setupTcpTunnel: type: boolean filter: type: string confirmationMessage: type: string commandName: type: string commandShortName: type: string icon: type: string format: uuid description: UUID of an existing image library entry; omit or use null UUID for no icon remotePort: type: integer remoteHost: type: string applicableClasses: type: integer description: | Bitmask of applicable object classes. Bit 0 (1) = Node, bit 1 (2) = Interface, bit 2 (4) = Sensor, bit 3 (8) = Access point. Defaults are applied if 0 or missing: URL tools default to all classes, others to Node. Non-Node bits are stripped for tool types other than server-script, url and ssh-command. acl: type: array description: | User and group IDs allowed to execute this tool. Replaces the existing ACL on PUT. Send an empty array to remove all entries. items: type: integer columns: type: array description: Column definitions for snmp-table and agent-list tools. Ignored for other types. items: $ref: '#/components/schemas/ObjectToolColumn' inputFields: type: array items: $ref: '#/components/schemas/ObjectToolInputField' 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 ObjectToolUrlResult: type: object required: - type - url properties: type: type: string enum: [url] url: type: string description: Expanded URL with all macros resolved ObjectToolStreamingResult: type: object required: - token - wsUrl properties: token: type: string format: uuid description: Single-use token for WebSocket connection (expires in 30 seconds) wsUrl: type: string description: WebSocket URL path to connect for streaming 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 ObjectUrl: type: object properties: id: type: integer description: URL ID (assigned by the server) url: type: string description: The URL description: type: string description: Human-readable description CustomAttribute: type: object description: A single custom attribute as embedded in an object document and returned by the custom-attributes sub-resource. properties: name: type: string description: Attribute name. value: type: string description: Attribute value. flags: type: object description: Attribute flags as named booleans. properties: inheritable: type: boolean description: Attribute is inherited by child objects. redefined: type: boolean description: Inherited attribute is redefined on this object. conflict: type: boolean description: Attribute is inherited from multiple parents with differing values. sourceObject: type: integer description: ID of the object an inherited attribute originates from; 0 if defined directly on this object. ObjectDetails: type: object properties: alias: type: string description: Object alias category: type: integer description: Object category ID class: $ref: '#/components/schemas/ObjectClass' customAttributes: type: array description: Custom attributes defined on the object (including those inherited from parent objects). items: $ref: '#/components/schemas/CustomAttribute' guid: type: string format: uuid description: Object GUID id: type: integer description: Object ID name: type: string description: Object name responsibleUsers: type: array description: Users or groups responsible for the object (the object's own list; entries inherited from parent objects are not included). items: type: object properties: userId: type: integer description: User or group ID tag: type: string description: Responsible user tag timestamp: type: string format: date-time description: Object last change timestamp status: $ref: '#/components/schemas/Status' pollStates: type: array description: Per-poll-type state. Present only for pollable objects (e.g. nodes, sensors, interfaces); one entry per poll type the object accepts. items: $ref: '#/components/schemas/PollState' PollState: type: object description: State of a single poll type on a pollable object. properties: name: type: string description: Poll type name (e.g. "status", "configuration", "instance", "discovery", "topology", "routing-table", "icmp", "autobind", "map-update"). pending: type: boolean description: True if a poll of this type is currently queued or in flight. lastCompleted: type: string format: date-time nullable: true description: Timestamp of the most recent successful completion, or null if this poll type has never completed since server start. timer: type: object description: Poll duration statistics in milliseconds. Omitted when the poll type has never completed (lastCompleted is null). properties: last: type: integer description: Duration of the most recent completed poll (ms). average: type: integer description: Rolling average poll duration (ms). min: type: integer description: Minimum observed poll duration (ms). max: type: integer description: Maximum observed poll duration (ms). TopologyMap: type: object description: Ad-hoc topology map containing discovered objects and the links between them properties: objects: type: array description: List of objects in the topology items: $ref: '#/components/schemas/ObjectSummary' links: type: array description: Links between objects items: $ref: '#/components/schemas/TopologyLink' TopologyLink: type: object description: A link between two objects in a topology map properties: object1: type: integer description: First object ID object2: type: integer description: Second object ID interface1: type: integer description: Interface ID on first object (0 if not applicable) interface2: type: integer description: Interface ID on second object (0 if not applicable) type: type: integer description: "Link type (0=normal, 1=VPN, 2=multilink, 3=agent tunnel, 4=agent proxy, 5=SSH proxy, 6=SNMP proxy, 7=ICMP proxy, 8=sensor proxy, 9=zone proxy, 10=WiFi client)" name: type: string description: Link name port1: type: string description: Port/connector name on first object port2: type: string description: Port/connector name on second object flags: type: integer description: Link flags 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 ipAddress: $ref: '#/components/schemas/InetAddress' 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 SshKey: type: object properties: id: type: integer description: SSH key ID name: type: string description: SSH key name publicKey: type: string description: Public key in OpenSSH format (included in details and when includePublicKey=true) SshKeyCreate: type: object required: - name properties: name: type: string description: SSH key name publicKey: type: string description: Public key to import (omit to generate a new key pair) privateKey: type: string description: Private key to import (required if publicKey is provided) SshKeyUpdate: type: object required: - name properties: name: type: string description: SSH key name publicKey: type: string description: New public key privateKey: type: string description: New private key SshKeyInUse: type: object properties: reason: type: string description: Error description nodesInUse: type: array items: type: integer description: List of node IDs using the key WebServiceDefinition: type: object properties: id: type: integer description: Web service definition ID guid: type: string description: Web service definition GUID name: type: string description: Definition name description: type: string description: Definition description url: type: string description: Web service URL (may contain %1, %2, etc. for parameter substitution) httpRequestMethod: type: integer description: "HTTP request method (0=GET, 1=POST, 2=PUT, 3=DELETE, 4=PATCH)" requestData: type: string description: Request body data flags: type: integer description: "Flags (bit mask: 1=verify certificate, 2=verify host, 4=force plain text parser, 8=follow location)" authType: type: integer description: "Authentication type (0=none, 1=basic, 2=digest, 3=NTLM, 4=bearer, 5=any)" login: type: string description: Login name or token password: type: string description: Password cacheRetentionTime: type: integer description: Cache retention time in milliseconds requestTimeout: type: integer description: Request timeout in milliseconds headers: type: array items: type: object properties: name: type: string value: type: string description: HTTP headers WebServiceDefinitionCreate: type: object required: - name - url properties: name: type: string description: Definition name description: type: string description: Definition description url: type: string description: Web service URL httpRequestMethod: type: integer description: "HTTP request method (0=GET, 1=POST, 2=PUT, 3=DELETE, 4=PATCH)" requestData: type: string description: Request body data flags: type: integer description: "Flags (bit mask: 1=verify certificate, 2=verify host, 4=force plain text parser, 8=follow location)" authType: type: integer description: "Authentication type (0=none, 1=basic, 2=digest, 3=NTLM, 4=bearer, 5=any)" login: type: string description: Login name or token password: type: string description: Password cacheRetentionTime: type: integer description: Cache retention time in milliseconds requestTimeout: type: integer description: Request timeout in milliseconds (default 30000) headers: type: array items: type: object properties: name: type: string value: type: string description: HTTP headers securitySchemes: BearerAuth: type: http scheme: bearer