Webhook
The Webhook integration pushes Nozomi Networks data, such as nodes, asset information, asset CVEs, or alerts, to any HTTP or HTTPS endpoint that accepts POST requests.
The Webhook integration is the most flexible outbound integration and can connect to custom platforms, middleware, or serverless functions.
Limitations
- Only one entity type can be selected per integration instance; create multiple instances for multiple entity types
- Authentication supports Bearer token or Basic authentication
- Batch size is 50 records per request
- The integration receives no data from the endpoint
Data flow
| Attribute | Value |
|---|---|
| Transport | hypertext transfer protocol secure (HTTPS) or hypertext transfer protocol (HTTP) POST |
| Authentication | Bearer token or Basic authentication |
| Format | JavaScript Object Notation (JSON), comma-separated value (CSV), or newline delimited JSON (NDJSON) |
| Batch size | 50 records per HTTP POST |
| Retry | Cursor is not advanced on failure; records are retried on the next run |
Entities exchanged
| Entity | Definition | Trigger | Create versus update |
|---|---|---|---|
| Alert | A security or operational alert. | Incremental by record_created_at |
New records only; by record_updated_at if
send_updates is enabled. |
| Node | A network node, such as an operational technology (OT) or information technology (IT) device. | Incremental by time |
New records only; daily deduplication if send_updates
is enabled. |
| Asset information | Asset information discovered by Nozomi Networks. | Incremental by time |
New records only; daily deduplication if send_updates
is enabled. |
| Asset CVE | A CVE finding associated with an asset. | Incremental by time |
New records only. |
Entity attribute mapping
Fields sent are the raw appliance query result columns for the selected entity. No field renaming is applied. The JSON keys match the appliance column names.
Common alert fields when entity is alerts:
| Nozomi field | JSON key | Type | Example |
|---|---|---|---|
id |
id |
string | 550e8400-... |
time |
time |
integer | 1729409051000 |
type_id |
type_id |
string | VI:NEW-FUNC-CODE |
name |
name |
string | New Function Code |
description |
description |
string | New SCADA function code detected |
risk |
risk |
float | 3.5 |
ip_src |
ip_src |
string | 192.168.1.1 |
ip_dst |
ip_dst |
string | 192.168.1.2 |
is_security |
is_security |
boolean | true |
appliance_host |
appliance_host |
string | guardian-01 |
Common node fields when entity is nodes:
| Nozomi field | JSON key | Type | Example |
|---|---|---|---|
id |
id |
string | <uuid> |
ip |
ip |
array | ["192.168.1.1"] |
mac_address |
mac_address |
string | 00:09:0f:6d:f1:c1 |
label |
label |
string | plc-01 |
vendor |
vendor |
string | Siemens |
os |
os |
string | SIMATIC S7 |
Examples
Outbound payload in JSON format for alerts:
[
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"time": 1729409051000,
"type_id": "VI:NEW-FUNC-CODE",
"name": "New Function Code",
"description": "New SCADA function code detected on PLC",
"risk": 3.5,
"ip_src": "192.168.1.1",
"ip_dst": "192.168.1.2",
"is_security": false,
"appliance_host": "guardian-01"
}
]
Outbound payload in CSV format for nodes:
id,ip,mac_address,label,vendor
550e8400-...,192.168.1.1,00:09:0f:6d:f1:c1,plc-01,Siemens
Outbound payload in NDJSON format for nodes:
{"id":"550e8400-...","ip":["192.168.1.1"],"mac_address":"00:09:0f:6d:f1:c1","label":"plc-01","vendor":"Siemens"}
{"id":"550e8401-...","ip":["192.168.1.2"],"mac_address":"00:09:0f:6d:f1:c2","label":"hmi-01","vendor":"Siemens"}
Verification
- Check the receiving endpoint's access log for POST requests from the appliance internet protocol (IP) address
- In the user interface (UI), check the run history for
webhookand verify the sent counts. - Use a service such as
webhook.siteto capture and inspect raw payloads during testing.