User Guide Functional Overview Requirements Architecture System Installation NetEye Additional Components Installation Setup The neteye Command Director NetEye Self Monitoring Tornado Business Service Monitoring IT Operation Analytics - Telemetry Geo Maps NagVis Audit Log Shutdown Manager Reporting ntopng Visual Monitoring with Alyvix Elastic Stack IT Operations (Command Orchestrator) Asset Management Service Level Management Cyber Threat Intelligence - SATAYO NetEye.Cloud Solution Monitoring Business Service Monitoring Asset Management ELK - Log Analytics SOC System Administrator SOC Attacker Centric Cyber Threat Intelligence - SATAYO NetEye Update & Upgrade Backup and Restore How To NetEye Extension Packs Troubleshooting Security Policy Glossary
module icon Cyber Threat Intelligence - SATAYO
About SATAYO Getting Started Threat Intelligence and Security Operations How SATAYO works MITRE ATT&CK Coverage Dashboard SATAYO Findings SATAYO REST API SaaS & Managed Mode SATAYO MCP Server
NetEye.Cloud Solution Monitoring Business Service Monitoring Asset Management ELK - Log Analytics SOC System Administrator SOC Attacker Centric Cyber Threat Intelligence - SATAYO Introduction to NetEye Monitoring Business Service Monitoring IT Operation Analytics Visualization Network Visibility Log Management & Security Orchestrated Datacenter Shutdown Application Performance Monitoring User Experience Service Management Service Level Management & Reporting Requirements for a Node Cluster Requirements and Best Practices Kubernetes Networking NetEye Satellite Requirements TCP and UDP Ports Requirements Additional Software Installation Introduction Single Node Cluster Kubernetes NetEye Master Master-Satellite Architecture Underlying Operating System Acquiring NetEye ISO Image Installing ISO Image Single Nodes and Satellites Cluster Nodes Configuration of Tenants Satellite Nodes Only Nodes behind a Proxy Additional NetEye Components Satellites Nodes only Verify if a module is running correctly Accessing the New Module Cluster Satellite Security Backup and Restore Identity and Access Management External Identity Providers Configure federated LDAP/AD Emergency Reset of Keycloak Configuration Keycloak Hostname Configuration Advanced Configuration Roles Single Page Application in NetEye Module Permissions and Single Sign On Within NetEye Importing User Federation Groups inside another Group Importing OIDC IdP Groups inside another Group Resource Tuning Advanced Topics Basic Concepts & Usage Advanced Topics Monitoring Environment Templates Monitored Objects Import Monitored Objects Data Fields Deployment Icinga 2 Agents Configuration Baskets Dashboard Monitoring Status Integration with Elasticsearch VMD Permissions Notifications Jobs API Configuring Icinga Monitoring Retention Policy NetEye Self Monitoring Concepts Collecting Events Add a Filter Node WHERE Conditions Iterating over Event fields Retrieving Payload of an Event Extract Variables Create a Rule Tornado Actions Test your Configuration Export and Import Configuration Example Under the hood Development Retry Strategy Configuration Thread Pool Configuration API Reference Configure a new Business Process Create your first Business Process Node Importing Processes Operators The ITOA Module Configuring User Permissions Telegraf Metrics in NetEye Telegraf Configuration Telegraf on Monitored Hosts Visualizing Dashboards Customizing Grafana The NetEye Geo Map Visualizer Map Viewer Configuring Geo Maps NagVis Audit Log Overview Shutdown Manager user Shutdown Manager GUI Shutdown Commands Advanced Topics Overview User Role Management Cube Use Cases ntopng and NetEye Integration Permissions Retention Advanced Topics Overview User Roles Install Alyvix Core Install Alyvix Service Nodes RDP Client Tutorial Overview Example: Windows Start Button Example: Open Windows Settings Example: Web Browser Test Case Example: Authentication Test Case Alyvix Tutorial Video Index Building Tools Editor: Interface Overview Editor: Script Building Editor: Managing Scripts Designer: Interface Overview Designer: Interface Options Designer: Component Tree Selector: Interface Overview Test Case Execution Test Case Format Test Case Management Dashboard Use Cases Overview Architecture Authorization Kibana Elasticsearch Cluster Elasticsearch Configuration Replicas on a Single Node Elasticsearch Performance tuning Overview Enabling El Proxy Sending custom logs to El Proxy Configuration files Commands Elasticsearch Templates and Retentions El Proxy DLQ Blockchain Verification Handling Blockchain Corruptions El Proxy Metrics El Proxy Security El Proxy REST Endpoints Agents Logstash Rsyslog Elastic APM Elastic RUM Multitenant OpenTelemetry Collector Elastic XDR Overview Authorization in the Command Orchestrator Module Configuring CLI Commands Executing Commands Overview Permissions Installation Plugins Single Tenancy Multitenancy Communication through a Satellite Asset collection methods Display asset information in monitoring host page Overview Customers Availability Event Adjustment Outages Resource Advanced Topics Introduction The Intelligence We Produce Mitre Attack Coverage Getting Started Settings SATAYO Items Intelligence Requirements Managed Service Request Form FAQ Changelog SATAYO Community NetEye.Cloud as a SaaS solution NetEye.Cloud Subscription Base Concepts Authentication Options Authentication via IdP Group Claims for Authorization Management Authentication via Microsoft Entra ID Roles and Permissions Authorization Navigating the UI Monitoring with NetEye.Cloud Monitored Objects Finding and Filtering Hosts Exporting Monitoring Data Viewing Host and Service Details Organizing with Groups Tactical Overview Problems View Dashboard Typical Daily Interactions Scheduled Downtime Notifications and Alerts AutoDiscovery VMD Business Service Monitoring Business Process Logic Business Process View Asset Management in NetEye.Cloud Automatic Inventory Collection Software & License Management Contract & Supplier Management Change & Lifecycle Management Getting Started with ELK Analytics SOC System Administrator (AdS) Access to NetEye and Elastic Elastic Dashboards Elastic Discover Elastic Alerts Elastic Rules Introduction to SOC Attacker Centric Service Description NetEye SIEM About SATAYO Getting Started Threat Intelligence and Security Operations How SATAYO works MITRE ATT&CK Coverage Dashboard SATAYO Findings SATAYO REST API SaaS & Managed Mode SATAYO MCP Server Before you start Update Procedure Single Node Upgrade from 4.50 to 4.51 Cluster Upgrade from 4.50 to 4.51 Satellite Upgrade from 4.50 to 4.51 DPO machine Upgrade from 4.50 to 4.51 Create a mirror of the RPM repository Sprint Releases Feature Troubleshooting Backup and Restore Tornado Networking Service Management - Incident Response IT Operation Analytics - Telemetry Identity Provider (IdP) Configuration NetEye Cluster on Microsoft Azure NetEye Cluster on AWS Introduction to NEP Getting Started with NEPs Online Resources Obtaining NEP Insights Available Packages Advanced Topics NEP Updates & Upgrades Setup Configure swappiness Restarting Stopped Services Enable stack traces in web UI How to access standard logs Director does not deploy when services assigned to a host have the same name How to enable/disable debug logging Activate Debug Logging for Tornado Modules/Services do not start Sync Rule fails when trying to recreate Icinga object How to disable InfluxDB query logging Managing an Elasticsearch Cluster with a Full Disk Some logs are not indexed in Elasticsearch Elasticsearch is not functioning properly Reporting: Error when opening a report Debugging Logstash file input filter Bugfix Policy Reporting Vulnerabilities Cyber Resilience Act Compliance Glossary

SATAYO REST API

The SATAYO REST API allows technical integrations to retrieve and, when authorized, insert SATAYO findings for their tenant.

In the examples below, replace <satayo-host> with the host name of your SATAYO instance.

The API is available at the following base URL:

https://<satayo-host>/satayo/api/sdk/v0

Authentication

The API uses OAuth 2.0 bearer tokens. Integrations authenticate as a service account using the client credentials grant: there is no user name or password involved, only a client ID and a client secret.

To obtain a client ID and secret for your integration, contact Würth IT support, specifying which permissions the integration needs:

  • Read: retrieve findings of your tenant. This is the standard access level for integrations.

  • Import: insert or update findings. This is granted only on request.

Warning

The client secret grants access to your findings. Store it in a secret manager or in an environment variable, never in source code or in a shared repository. If it is compromised, contact support to have it rotated.

Step 1: Request an Access Token

Request a token from the SATAYO identity provider, passing the client ID and secret you received:

export SATAYO_HOST=<satayo-host>
export SATAYO_CLIENT_ID=<client-id>
export SATAYO_CLIENT_SECRET=<client-secret>

TOKEN=$(curl -s -X POST \
  "https://$SATAYO_HOST/satayo/auth/realms/satayo2/protocol/openid-connect/token" \
  -d grant_type=client_credentials \
  -d client_id="$SATAYO_CLIENT_ID" \
  -d client_secret="$SATAYO_CLIENT_SECRET" \
  | jq -r .access_token)

The response is a JSON object whose access_token field contains the token, and whose expires_in field contains its validity in seconds. When the token expires, request a new one in the same way.

If the client ID or secret is wrong, the identity provider answers with 401 and "error": "invalid_client".

Step 2: Call the API

Send the token in the Authorization header of every request. For example, to retrieve the first page of findings:

curl -s -H "Authorization: Bearer $TOKEN" \
  "https://$SATAYO_HOST/satayo/api/sdk/v0/findings/all?limit=1" \
  | jq '{total, page, limit}'

The API returns 200 with the pagination information:

{
  "total": 218,
  "page": 1,
  "limit": 1
}

A request without a valid token is rejected with 401.

Interactive API Documentation

The complete list of endpoints, parameters and data schemas is available in the Swagger UI of your instance:

https://<satayo-host>/satayo/api/swagger/

Select the SDK specification to see the endpoints described in this page. The raw OpenAPI document is available at https://<satayo-host>/satayo/api/sdk/v0/openapi.json.

Note

The Swagger UI and the OpenAPI document require authentication. Log in to the SATAYO web interface first, then open the link in the same browser. Unauthenticated requests receive 404.

While you are logged in, the requests you send from the Swagger UI use your personal account and its permissions, so you can try the API without a client ID and secret. For scripts and integrations, always use a service account as described in Authentication: the API does not issue tokens for personal accounts.

Common Request Options

  • Pagination: all list endpoints accept the page (default 1) and limit (default 100) query parameters, and return the total number of matching findings together with the current page and limit.

  • Closed findings: only open findings are returned by default. Add includeclosed=true to include closed ones.

  • Tracing: you can optionally pass a W3C Trace Context traceparent header to correlate your requests with SATAYO logs when contacting support. Its format is 00-<trace-id>-<parent-id>-<flags>, where <trace-id> is 32 and <parent-id> is 16 random hexadecimal characters, and <flags> is 01, for example Traceparent: 00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01. If your HTTP client or tracing library already generates this header, you do not need to set it manually.

Unknown query parameters are rejected with 422.

Examples

The following examples assume that $SATAYO_HOST and $TOKEN are set as described in SATAYO REST API.

Retrieve Findings of a Given Type

Each finding type has its own list endpoint, /findings/<type>. For example, to retrieve credential findings:

curl -s -H "Authorization: Bearer $TOKEN" \
  "https://$SATAYO_HOST/satayo/api/sdk/v0/findings/credential?page=1&limit=100"

The API returns 200 with a paginated list:

{
  "total": 218,
  "page": 1,
  "limit": 100,
  "findings": [
    {
      "uid": "Y3JlZGVudGlhbC0zODM5",
      "finding_type": "credential",
      "username": "johndoe@mail.com",
      "resource": "https://www.bank.com/",
      "state": "Unassigned",
      ...
    },
    ...
  ]
}

The available finding types and the fields returned for each of them are listed in the Swagger UI.

Retrieve a Single Finding

Use the finding uid to retrieve its details, including its history and related findings:

curl -s -H "Authorization: Bearer $TOKEN" \
  "https://$SATAYO_HOST/satayo/api/sdk/v0/finding/Y3JlZGVudGlhbC0zODM5"

The API returns 200 with an object containing the summary of the finding, its info, its history and its related_findings.

Insert a Finding

Note

Inserting findings requires a client with the Import permission. Read-only clients receive 403.

Findings are inserted, or updated if they already exist, with PUT requests. For example, to insert a credential finding for a user identified by an email address:

curl -s -X PUT \
  "https://$SATAYO_HOST/satayo/api/sdk/v0/findings/credentials" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "monitored_domain_id": 1,
    "tool_code": "toolA",
    "resource_url": "https://www.bank.com",
    "username": "johndoe@mail.com",
    "password": "1234",
    "hash": "03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4",
    "hash_algorithm": "SHA256"
  }'

The fields monitored_domain_id, tool_code and username are required; the others are optional. The API returns 201 if the finding was created, or 200 if an existing finding was updated, with the identifier of the finding in the body:

{
  "uid": "Y3JlZGVudGlhbC0zODM5"
}