Komodo Eye's API

8 min. readlast update: 09.01.2026

Overview

Komodo Eye uses native REST API-based bidirectional integration as its primary interface for third-party systems and operations.

The platform fully supports API-driven operations and Infrastructure-as-Code tools like Terraform and Ansible, which are designed to allow for highly repeatable, automated configuration deployments rather than relying on manual setups.

The system features documented APIs, plugins, and developer tooling to support these programmatic deployments

NOTE: we currently only have our probe component of the API documented. More documentation on the different elements of the API will soon be available.

 

Examples follow.



Introduction to APIs in Komodo Eye

Komodo Eye is a fully API-driven platform that uses a native REST API for bidirectional integration as its primary interface for external communication and automation. Rather than relying strictly on legacy polling, the platform leverages APIs across data ingestion, enterprise integration, automated configuration, and artificial intelligence.

Data Ingestion and Device Management

For data collection, Komodo Eye supports HTTPS APIs, webhooks, and specialized device APIs, in addition to traditional protocols such as SNMP, gRPC, and Syslog. The platform continuously ingests API messages into its centralized messaging system, where the data is parsed, stored, and prepared for correlation and alerting.

Beyond passive monitoring, APIs are used to execute active provisioning; for example, the platform's PON Automation Module directly programs Optical Line Terminals (OLTs) using seamless MCP (Managed Control Plane) API integration. If not restricted by air-gapped security policies, APIs can also be utilized to monitor cloud environments such as AWS and Azure.

Northbound and Southbound Enterprise Integration

Komodo Eye serves as an Enterprise Integration Bridge by using its RESTful APIs to synchronize data across the corporate software ecosystem. Key integration capabilities include:

  • Third-Party Network Tools: The system can directly push and pull information with orchestration and monitoring tools such as Cisco Catalyst Center, Nokia NSP, and Ciena via their RESTful APIs.

  • ITSM and Ticketing: The platform supports bi-directional API integrations with ITSM tools like ServiceNow. When an issue exceeds defined thresholds, the system uses APIs to automatically generate enriched incident tickets.

  • Custom Notifications: REST API calls and webhooks can be configured to send automated notifications and alerts to various downstream messaging channels.

Infrastructure-as-Code (IaC) and Automation

Because Komodo Eye operations are fully API-driven, the platform provides documented APIs, plugins, and developer tooling to support modern Infrastructure-as-Code (IaC) practices. This deep API support enables engineers to use tools such as Terraform and Ansible to deploy highly repeatable, automated configuration and scale infrastructure.

Komodo AI Database Integration

APIs also drive the platform's upcoming generative AI capabilities. In Phase 2 of the Komodo AI rollout, the secure, on-premises Large Language Model (LLM) will connect directly to the Komodo Eye NMS database via a secure API. This integration will allow operators to bypass traditional SQL queries and instead use natural language to query real-time network telemetry, equipment health, and topological data directly from the system's data lake.


API Implementation Guide: Probes

The Komodo Eye API allows for programmatic interaction with the system’s backend and database. While the system's own UI uses this API to function, it is also available for external software integration. This documentation focuses on the Probes subset of the API, which allows users to programmatically construct, configure, and manage probes without the need for manual entry via the web interface.


Prerequisites

Before attempting to interface with the API, ensure you meet the following requirements:

  • Backend Status: The server backend must be active and running.

  • Host Identification: You must know the specific IP address or hostname where the server is hosted.

  • User Credentials: You must have a valid user account (username and password) to authenticate.

  • HTTP Client: You will need a method to send HTTP requests. This can be a programming library (such as requests in Python or axios in JS), a dedicated tool like Postman or cURL, or even your web browser.


Authentication Flow

Accessing the API requires a valid login to obtain security tokens.

Access and Refresh Tokens

  • Access Token: Upon a successful login, the API returns an accessToken. This token is used for authorization in subsequent requests but is only valid for 10 minutes.

  • Refresh Token: Along with the access token, a refreshToken is provided to the client in the form of a cookie.

  • Token Maintenance: When an access token expires, you can use the refresh token cookie to request a new one without re-entering your credentials. Alternatively, performing a standard login again will also provide a fresh access token.


Use Case: Programmatic Probe Construction

The primary use case for this specific draft version of the API documentation is the automated creation of probes. Rather than adding probes manually through the Komodo Eye UI, developers can write scripts to:

  • Create a base probe with specific intervals.

  • Attach complex message queries (Syslog or SNMP Traps).

  • Define SNMP queries for specific OIDs.

  • Build mathematical or logical expressions using postfix notation.

  • Set up automated warnings and error codes based on expression results.

 

This is particularly useful for bulk-importing monitoring configurations or syncing Komodo Eye with external asset management systems.


API Reference

Currently the API only accepts credentials through a user login.

Each endpoint will return an error message and no data if something failed.

Auth Login

Login access tokens are valid for 10 minutes before a refresh is required. A refresh token is provided in the form of a cookie and can be used to get a new access token without a re-login, however just logging in again will also suffice.

 

{

  "method": POST,

  "url": "{{host}}/api/v2/auth/login",

  "body": {

    "username": "{{username}}",

    "password": "{{password}}"

  },

  "response": {

    "error": "",

    "data": {

      "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3Nzc0OTkz857dfjld94jzcyIsInVzZXJJRCI6ImZlMDg1Y2FlLTEzMzctNzj3n3sujHUFKms2kd7OTI3N2Y4NjJkNyJ9.PUmGv772ivMFWrAMffvEaWaX_M3w460Jvnuq7XDFfvk",

      "expiresAt": 1777499337351

    }

  },

  "headers": {

    set-cookie: refreshToken=eyJhUm-RYSC7MphLfbGciOsI6IkpXiJIUzI1NiIVCJ9.eyJleHAnJlZnJlc2giLCJiOjE3NzgxMDM1MzcsIInR5cCnRva2VuVHlwZSI6I1c2VySUQiOiJmZTA4NWNhZS0xMzM3LTczzdmODYyZDcifQ.Du1YoaC2N2ySRDu_1JH1MiYY_MzEtYmVhOC1iNDkyNWcOko; Path=/; secure;HttpOnly; Max-Age=604800; HttpOnly

  }

}

Auth Refresh

{

  "method": POST,

  "url": "{{host}}/api/v2/auth/refresh",

  "headers": {

    "Cookie": "refreshToken={{refreshToken.value}}"

  },

  "response": {

    "error": "",

    "data": {

      "accessToken": "eyJhbGciOiJIHlwZSI6ImFjY2VzcyUI6IkpXVCJ9.eyJleHAiOjE3NzgwODYwMzEsInRvWt7DBi2uM_LJtI0OTI3N2Y4NjJkNyJ9.HKiO8v2ICa2VuVIsInVzZXJzI1NiIsInR5cCJRCI6ImZlMDg1Y2FlLTEzMzctNzMzMS1iZWE4LHyEfq3srySHQMycyYEcRHQ",

      "expiresAt": 1778086031215

    }

  }

}

Add Probe

{

  "method": POST,

  "url": "{{host}}/api/v2/probes",

  "authorization": Bearer {{accessToken}},

  "body": {

    "name": "Test",

    "type": "snmp", // snmp is currently the only supported type

    "interval": 12345, // time in seconds

    "description": "some description"

  },

  "response": {

    {

      "error": "",

      "data": "cde524fa-659b-4c3f-986a-e52c9679df78" // created probeId

    }

  },

}

Add Probe Message Query

{

  "method": POST,

  "url": "{{host}}/api/v2/probes/{{probeId}}/message-queries",

  "authorization": Bearer {{accessToken}},

  "body": {

    "name": "Test",

    "messageType": "syslog" | "snmp_trap",

    "regex": "/^RADIO-BRIDGE-MIB::rfFecRate\.1\s*=\s*(\d+)$/",

    "filterExpression": "filter"

  }

  "response": {

    {

      "error": "",

      "data": "77y05c54-ab12-4783-eee3-c1926355de58" // created messageQueryId

    }

  },

}

Add Probe SNMP Query

{

  "method": POST,

  "url": "{{host}}/api/v2/probes/{{probeId}}/snmp-queries",

  "authorization": Bearer {{accessToken}},

  "body": {

    "requestType": "get" | "getwalk" | "walk_column_csv",

    "oid": ".1.3.6.1.2.1.2.2.1.6.1",

    "name": "Test",

    "type": null

  }

  "response": {

    {

      "error": "",

      "data": "77y05c54-ab12-4783-eee3-c1926355de58" // created snmpQueryId

    }

  },

}

Add Probe Expression

{

  "method": POST,

  "url": "{{host}}/api/v2/probes/{{probeId}}/message-queries",

  "authorization": Bearer {{accessToken}},

  "body": {

    "name": "Test Expression",

    "probeId": "cde524fa-659b-4c3f-986a-e52c9679df78",

    "expression": "1,1,+", // postfix notation, and can use the name of any other message query/snmp query/ expression as a value. 

    "sortOrder": 100,

    "version": 2 // should always be version 2 for new expressions

  }

  "response": {

    {

      "error": "",

      "data": "77y05c54-ab12-4783-eee3-c1926355de58" // created messageQueryId

    }

  },

}

 

Supported operators: "abs", "-", "round", "/", "*", "list_max", "truncate", "+", "log", "log10", "list_avg", "log2", "power", "list_sum", "list_min", "sqrt", "%", "ceiling", "list_stddev", "floor", "format_mac", "get_EQ_ID_by_MAC", "last_index_of", "list_length", "extractEnterpriseNumber", "string_length", "index_of", "replace_all", "hex2bin", "left", "char_at", "rtrim", "i_replace_all", "bin2hex", "to_upper", "crc", "lc_first", "to_lower", "combine_edge_values", "right", "substring", "get_eq_var", "get_hostname_by_id", "uc_first", "concat", "i_replace", "hex2ip", "trim", "md5", "translate_oid", "regex_extract", "ltrim", "replace", "list_item", "neq", "and", "<", "contains", "==", "<=", ">", "ends_with", "!=", ">=", "starts_with", "list_contains", "or", "eq", "not", "list_do", "list_complement", "list_unique", "list_union", "list_difference", "translate_oid_list", "list_intersection", "get_EQ_ID_by_ip"

Add Probe Warning

{

  "method": POST,

  "url": "{{host}}/api/v2/probes/{{probeId}}/warnings",

  "authorization": Bearer {{accessToken}},

  "body": {

    "name": "Test",

    "operation": "<", // any boolean operator

    "returnCode": 0 | 1 | 2, // 0 -> ok, 1 -> warn, 2 -> error

    "message": "Testing Message",

    "leftExpression": "Uptime", // can be a string, int, name of any other message query/snmp query/expression

    "rightExpression": "20" // can be a string, int, name of any other message query/snmp query/expression

  }

  "response": {

    {

      "error": "",

      "data": "77y05c54-ab12-4783-eee3-c1926355de58" // created messageQueryId

    }

  },

}

 

Supported operators:  "<=", "ends_with", "<", "!=", "or", "contains", "neq", "==", "and", "eq", "list_contains", "starts_with", ">=", "not", ">"

Was this article helpful?