01Overview & Status
The ESET Connect API Reference Console is a fully self-contained, browser-based developer portal for the ESET Connect REST API. It serves as an interactive reference, live endpoint explorer, quick-start code library, and operational status page — all in a single HTML file deployed inside the KrawTech toolchain.
A single-file HTML dashboard that presents ESET Connect's full REST API surface in a navigable, searchable console. It is used for:
- ▸ Quick endpoint lookup and triage during incident response — finding the right API call without digging through Swagger docs
- ▸ Code sample reference (Python & PowerShell) for automation development against ESET PROTECT Cloud
- ▸ Interactive demo explorer with simulated mock responses — functional without live credentials
- ▸ OAuth playground, region reference, rate limit visualizer, changelog, and operational status page
| Feature | Status |
|---|---|
| Navigation & search | Live |
| Code examples (Python/PS) | Live |
| Mock API Explorer | Live |
| Changelog / Status page | Live |
| Live API calls | Proxy required |
| Real token auth flow | Proxy required |
| Live detection feed | Proxy required |
02Integration Status
Current state of the ESET Connect dashboard within the broader KrawTech platform. Shows which system connections are active, pending, or deferred.
| System | Direction | Protocol | Status | Notes |
|---|---|---|---|---|
| ESET Connect REST API | Dashboard → ESET | HTTPS / OAuth2 | Demo only | Mock responses active. Live calls pending proxy. |
| ESET PROTECT Cloud | Read/Write | REST v1/v2 | Proxy required | Detections, devices, policies, quarantine via API. |
| OAuth 2.0 Token Service | Dashboard → ESET auth | Password grant | Proxy required | All regions: {region}.connect.eset.com/oauth/token |
| Syslog / SIEM Export | ESET → SIEM | TCP Syslog | Config reference only | Dashboard shows config instructions; no direct integration. |
| Swagger / OAS3 Spec | External link | HTTPS | Live (external) | help.eset.com/eset_connect/en-US/swagger_calls.html |
03Architecture
The dashboard is a single self-contained HTML file with no build step, no external dependencies beyond Google Fonts, and no server-side logic. All state is in-memory. The proxy layer is the sole external dependency for live data.
| Component | Behavior |
|---|---|
| initLiveStats() | Animates 4 stat counters on load (threats, agents, calls, events). Polls every 4s with random deltas. |
| tickFeed() | Cycles through 10 hardcoded detection feed items every 3s with slide-in animation. |
| getMock(url) | Matches Explorer request URL to MOCK{} object, returns fake JSON with simulated latency (350–850ms). |
| searchFilter(q) | Keyword-to-page router. Maps search terms to nav sections, calls go() on first match. |
| animateRateBars() | Animates rate limit progress bars from 0% on Rate Limits page load. |
| updateStatusClock() | Updates UTC timestamp on Status page every second. |
The dashboard uses a custom single-page navigation model. All 15 content sections exist in the DOM simultaneously; display:none / .on toggling via go(id) handles transitions. No routing library, no history API, no hash routing.
04Home Panel
The landing page of the console. Provides live-animated stat cards, a scrolling detection feed ticker, a quick endpoint reference, and a regional base URL block.
| Card | ID | Source | Behavior |
|---|---|---|---|
| Active Detections | ls-threats | Initialized to 23, increments randomly every 4s | Animates from 0 on load |
| Devices Online | ls-agents | Initialized to 1,847 (mock) | Static after load animation |
| API Calls/min | ls-calls | 620–800 range, increments every 4s | Reflects Explorer usage too |
| Events Today | ls-events | 18,400–22,400 range, increments every 4s | Simulates syslog ingest rate |
GET /v1/detections?resolved=false, GET /v1/devices, and a live event counter endpoint.
A scrolling ticker bar below the stat cards cycles through 10 hardcoded detection event strings every 3 seconds. Severity is color-coded (red=critical, yellow=suspicious, green=resolved, cyan=device/API events). Displays UTC timestamp on the right.
GET /v1/detections?pageSize=10&resolved=false and streams real detection events with live timestamps.
| Card | Value | Links To |
|---|---|---|
| API Version | v3.8 | Incident Management page |
| Swagger | OAS 3 | Swagger/OpenAPI page |
| Auth Method | OAuth2 | OAuth 2.0 Authentication page |
| Rate Limit | 10/s | Rate Limits page |
05Authentication Panels
Three interlinked panels covering OAuth 2.0 theory, an interactive playground, and scope/permission mapping. These are the most frequently referenced pages during integration development.
client_credentials grant type was deprecated in ESET Connect 2.5 (May 2024) and fully removed. All integrations must use the password grant type only. Any existing scripts using client_credentials will fail with 400.
Shows the full OAuth 2.0 password grant flow with a 5-step visual diagram (credentials → POST token → JWT → Bearer header → response), token request/response code blocks, and a field reference table.
| Token Field | Type | Notes |
|---|---|---|
| access_token | string | JWT — include as Authorization: Bearer {token} |
| token_type | string | Always "Bearer" |
| expires_in | integer | 3600 seconds (1 hour) |
| refresh_token | string | Use grant_type=refresh_token to renew |
Side-by-side code blocks for the initial password grant and the refresh token flow. Shows exact HTTP request format, headers, and expected JSON response shape. Static reference only — no live token exchange until proxy is deployed.
| Domain | Required Permission | Subscription | Notes |
|---|---|---|---|
| Incident Management (v1) | Security Read | ESET Inspect | Basic detections only |
| Incident Management (v2) | Security Read+Write | ECOS | Extended detections + EDR rules |
| Device Management | Device Read/Write | All | Full endpoint control |
| Policy Management | Policy Read/Write | All | Policy CRUD operations |
| Quarantine Management | Quarantine Read/Write | ECOS | Added Connect 2.8 |
| Automation / Tasks | Task Read/Write | All | Manual trigger only via REST |
| User Management | User Admin | ECOS | Added Connect 3.3 |
| Identity | Identity Admin | All | Added Connect 3.5 |
06Incident Management Panel
The most complex domain panel. Uses a 4-tab layout (Detections, Detection Groups, Incidents, EDR Rules) with endpoint lists, a JSON response example, a query parameter table, and a live Explorer shortcut.
| Tab | Endpoints Covered | Notes |
|---|---|---|
| Detections | GET /v1/detections, GET /v2/detections, batchGet, resolve, batchResolve | Default tab. Includes JSON response example and query params table. v2 is ECOS-only. |
| Detection Groups | GET/POST /v2/detection-groups, search, resolve group | v2 endpoint only. Group-level resolution. |
| Incidents | PATCH close/reopen, GET/POST/DEL comments | Added Connect 2.14. Comment management. |
| EDR Rules | CRUD /v1/edr-rules, rule exclusions CRUD | ESET Inspect / ECOS required. |
| Parameter | Type | Required | Description |
|---|---|---|---|
| pageSize | integer | Optional | 1–1000. Default 50. Controls how many detections are returned per call. |
| pageToken | string | Optional | Cursor from previous response's nextPageToken field for pagination. |
| resolved | boolean | Optional | Filter by resolution status. Omit to return all. |
| severity | string | Optional | HIGH, MEDIUM, LOW — filters by ESET severity classification. |
| deviceUuid | string | Optional | UUID of a specific device to scope detection results. |
07Device Management Panel
Endpoint reference for all device operations: listing, isolation, scanning, group management, and batch operations. Includes a device object field reference and an isolate example.
| Field | Type | Since | Notes |
|---|---|---|---|
| uuid | string | v1.0 | Unique device identifier — use in all device-scoped calls |
| name | string | v1.0 | Hostname as registered in ESET PROTECT |
| operatingSystem | object | v1.0 | Nested: name (string), version (string) |
| primaryLocalIpAddress | string | v3.1 | LAN IP address — added Connect 3.1 |
| publicIpAddress | string | v3.1 | WAN/public IP — added Connect 3.1 |
| isMuted | boolean | v3.1 | Whether device alerts are muted |
| isIsolated | boolean | v1.0 | Network isolation status |
| groupUuid | string | v1.0 | Current device group UUID |
08Policy Management Panel
Full CRUD for security policies plus assignment and unassignment operations. Policies control ESET product settings across managed endpoints.
09Quarantine Management Panel
Quarantine listing, restore, delete, and batch download. Requires ECOS subscription. Added in ESET Connect 2.8. Batch download added in Connect 2.9.
10Automation Panel
Create and execute device tasks via REST. Critical constraint: only manual trigger type is supported through REST API. Scheduled/periodic tasks require the ESET PROTECT Web Console.
GetDeviceTasks does not display non-manual trigger types created via the console. Use ESET PROTECT Web Console for scheduled, periodic, or event-based triggers.
11Additional API Domains
The dashboard covers 13 total API domains. The remaining domains beyond the core five are summarized here with their key endpoints and subscription requirements.
12API Explorer Panel
Interactive request builder with mock response engine. Allows method + path selection, shows simulated JSON responses with syntax highlighting, and tracks a running call count.
| Control | Type | Behavior |
|---|---|---|
| Method selector | select#expM | GET, POST, PUT, DELETE, PATCH — cosmetic only in demo mode |
| Endpoint input | input#expU | Free-text URL path. Default: /v1/detections |
| SEND button | .exp-send | Calls buildRequest() → 350–850ms delay → mock response |
| Quick-pick buttons | .pbtn | 6 preset paths: detections, devices, quarantine, policies, tasks, /oauth/token |
| Response status | #expSt | Shows "200 OK" (green) after success, "Sending…" (amber) during request |
| Response meta | #expMeta | Shows: "Demo · {ms}ms · {KB}" after response |
The MOCK{} object contains hardcoded response payloads for the following paths:
| Path Match | Sim. Latency | Response Shape |
|---|---|---|
| /v1/detections | 142ms | 2 detections array + nextPageToken |
| /v2/detections | 198ms | 1 detection (ECOS extended fields) |
| /v1/devices | 88ms | 3 devices (Windows, Windows Server, macOS) |
| /v1/quarantined-objects | 114ms | 2 quarantine objects |
| /v1/policies | 67ms | 3 policies with deviceCount |
| /v1/tasks | 55ms | 2 tasks (COMPLETED + RUNNING) |
| /oauth/token | 38ms | Full token response with demo JWT |
| (any other) | 95ms | Empty pagination wrapper + demo message |
13All API Endpoints
Complete reference of every ESET Connect endpoint covered by the dashboard, organized by domain. Base URL format: https://{region}.connect.eset.com
eu · us · jp · ca · de — Note: /v2/detections is NOT available in the JP region. Auth endpoint: https://{region}.connect.eset.com/oauth/token
14Configuration Fields
All configurable parameters used across the dashboard — static config in the mock engine, future proxy config, and the Syslog export settings displayed in the reference panel.
| Field | Location | Default | Description |
|---|---|---|---|
| MOCK{} | script block | 7 paths | Hardcoded mock response map. Each key is a URL substring matched against the Explorer input. |
| lsThreats | JS var | 23 | Initial value for Active Detections stat card counter. |
| lsAgents | JS var | 1847 | Initial value for Devices Online stat card. |
| lsCalls | JS var | 620–800 | Randomized init for API Calls counter. Increments on every Explorer request. |
| lsEvents | JS var | 18400–22400 | Randomized init for Events Today counter. |
| tickFeed interval | setInterval | 3000ms | Detection feed ticker rotation interval. |
| liveStats interval | setInterval | 4000ms | Stat counter increment polling rate. |
| FEED_ITEMS[] | array | 10 items | Hardcoded detection feed strings for the live ticker. |
| Field | Type | Required | Description |
|---|---|---|---|
| ESET_REGION | string | Required | Data center region: eu, us, jp, ca, de. Determines base URL prefix. |
| ESET_USERNAME | string | Required | API user email for OAuth password grant. Create dedicated API user in ESET PROTECT console. |
| ESET_PASSWORD | string | Required | API user password. Store in proxy env vars — never in the HTML file. |
| PROXY_ENDPOINT | URL | Required | The relay endpoint the Explorer SEND button will target. Handles CORS and token injection. |
| TOKEN_REFRESH_BUFFER | integer | Optional | Seconds before expiry to refresh token. Recommended: 300 (5 min). Token TTL is 3600s. |
| Setting | Value | Notes |
|---|---|---|
| Format | JSON | Use JSON for SIEM ingest. "ESET Notifications" format = plain text. |
| Envelope | Syslog | Standard RFC syslog envelope wrapper. |
| MinLogLevel | Information | Set to Information to collect all event types. Default may drop lower-severity events. |
| Destination | IP address | Elastic Agent IP, Sentinel forwarder, or other SIEM collector. |
| Port | 514 | Standard syslog port. Adjust if using TLS syslog (typically 6514). |
| Protocol | TCP | TCP recommended for reliability. UDP available but not recommended for security event data. |
| Checkboxes | All enabled | Select all log type checkboxes to ensure Detection, Firewall, HIPS, Audit, and ESET Inspect events are all forwarded. |
15Rate Limits
ESET Connect enforces per-token rate limits. The dashboard includes a dedicated Rate Limits panel with animated progress bars and an exponential backoff code example.
| Domain / Operation | Limit | Scope |
|---|---|---|
| All endpoints (default) | 10 req/s | Per access token |
| Detection listing | 5 req/s | Sustained read rate |
| Device operations | 3 req/s | Write operations (isolate, scan) |
| Automation tasks | 10 req/s | Write bursts allowed |
| OAuth token endpoint | Not specified | Avoid excessive token refreshes |
When rate-limited (HTTP 429), the API returns no Retry-After header. Use exponential backoff starting at 1s:
16Proxy Activation Checklist
Step-by-step checklist to transition the dashboard from demo/mock mode to full live operation against the ESET Connect REST API. Complete in order — each step depends on the previous.
/v2/detections is NOT available in the JP region.curl -X POST https://{region}.connect.eset.com/oauth/token -d "grant_type=password&username=...&password=..." — confirm you receive access_token in the response. A 400 error indicates the deprecated client_credentials grant is being used.stack-eset.html, modify the buildRequest() function to POST to PROXY_ENDPOINT + expU.value instead of the local getMock() function. Add proper error handling for 401, 403, 429, and 5xx responses.initLiveStats() mock initialization with real API calls: Active Detections → GET /v1/detections?resolved=false&pageSize=1 (use totalItems from pagination), Devices Online → GET /v1/devices?pageSize=1.FEED_ITEMS[] / tickFeed() with a polling interval that calls GET /v1/detections?pageSize=5&resolved=false and populates the ticker with real detection titles, severity colors, and device names.#ktc-demo-bar element and its styles. Update the "PROXY PENDING" topbar chip to "LIVE" with green styling. Remove the ⚠ DEMO VERSION banner.17Known Limitations
Documented constraints of the ESET Connect API and the current dashboard implementation. These are not bugs — they are architectural or subscription boundaries to plan around.
grant_type=client_credentials will fail with HTTP 400. Migration to password grant is required for all integrations./v1/detections only. This also means JP tenants cannot access ECOS-extended detection fields (triggeringEvent, commandLine) via REST.GetDeviceTasks will not return non-manual tasks created in the Web Console.18Troubleshooting
Common issues encountered during development, integration, and production operation of the ESET Connect dashboard and API.
grant_type=client_credentials which was removed in Connect 2.5. Change to grant_type=password and include username and password fields. Verify you are using Content-Type: application/x-www-form-urlencoded (NOT JSON body).
Authorization: Bearer {token} with a space (not Basic, not Token). 3) Check that the API user account has not been disabled in ESET PROTECT.
/v2/detections endpoint is not available in the JP region. Use /v1/detections instead. Verify you are using the jp.connect.eset.com base URL for Japan-region tenants.
Retry-After header on 429. Implement exponential backoff: wait 2^attempt seconds before retrying (1s, 2s, 4s, 8s, 16s). The global rate limit is 10 req/s per token. For high-throughput scenarios, consider batching calls using :batchGet endpoints where available.
Authorization header and handles CORS headers for browser compatibility. See Section 16, Step 4.
200 OK with mock data regardless of path or method. This is expected — the mock engine does not validate the request. Check #expMeta which will show "Demo · {ms}ms" indicating mock mode. To get real responses, the proxy must be deployed and buildRequest() must be updated to target the proxy endpoint.
animateCount() which uses requestAnimationFrame. This may not fire if the tab is in the background on load. Check that initLiveStats() is called from the DOMContentLoaded event or window.onload. The setInterval ticker requires the page to stay in the foreground — browsers throttle intervals on backgrounded tabs.
MinLogLevel is set to Information (not Warning or Error). 3) Check that TCP port 514 is open between ESET PROTECT Cloud egress IPs and your SIEM collector — outgoing IPs vary by region and were updated in Connect 2.13. 4) Heartbeat messages are sent every 60 minutes (Connect 3.4+) — if you haven't received a heartbeat, the connection is not persistent.
go(id)), not by scrolling. Within a page, all content is in a single scrolling view. This is a documented limitation — scrollspy with auto-sync requires extending the JS to use IntersectionObserver on the .main scroll container.