KOI
EvoHub receives alerts from KOI (koi.ai, formerly Koi Security), which watches the extensions, packages, MCP servers and AI agents on your endpoints. KOI sends its alert JSON to a webhook, and EvoHub reads it as it is: an alert opens an EvoHub alert, and the alert being resolved, closed, dismissed or remediated in KOI resolves it.
This mapping is provisional. KOI's webhook payload is not publicly documented, so EvoHub reads it tolerantly: it looks for each value under several field names and keeps every field that arrives on the alert. If your alerts arrive with the wrong title or severity, send us a sample delivery (with any personal data removed) from Help & Support and we will map it exactly (see Get help).
Set it up
Create the integration
In EvoHub, go to On-Call → Integrations → + Add Integration, choose KOI, pick an Escalation Policy and click Create Integration. Copy the Webhook URL.
What EvoHub reads
A delivery may be one alert object, a list of them, or either wrapped in alerts, events, data, event or alert. For each alert:
| EvoHub alert | Taken from |
|---|---|
| Title | title, else name, alert_name, rule_name, policy_name or description; else "KOI alert", followed by the item's name when the alert carries one (item_name, extension_name, package_name, …). |
| Description | description, else message, details or summary. |
| Labels | Every field of the alert: nested objects as dotted names (for example endpoint.hostname), lists joined with commas. Long values are cut and at most 50 labels are kept. |
| Fingerprint | id, else alert_id, event_id or uuid, together with the endpoint when the alert names one (endpoint_id, device_id, host_id, machine_id); else the title. |
Severity
EvoHub reads severity, else risk_level, risk or priority, ignoring case:
| KOI value | EvoHub severity |
|---|---|
critical |
critical |
high |
high |
medium, moderate |
medium |
low |
low |
info, informational |
info |
| anything else, numbers included | medium |
Resolve and deduplication
- An alert whose
statusisresolved,closed,dismissedorremediatedresolves the open alert with the same fingerprint. Any other status, such asopen,neworactive, opens an alert. - Further deliveries for an alert that is still open are recorded as Retriggered.
- Audit events (
source_log_typeAudit) are records of changes made in KOI, not alerts: they are answered with200and open nothing.
Troubleshooting
401 INVALID_KEY: the URL's key is wrong or the integration is disabled. Copy the Webhook URL again from the integration.- Alerts are titled "KOI alert": KOI sent the alert name under a field EvoHub does not know yet. The alert's labels show every field that arrived; send us the label names, or a sample delivery, so the field can be mapped.
- Nothing arrives: check that the webhook in KOI is enabled and selects the alerts you expect.

