Webhook event
The signed body delivered to your webhook. The signature is in the `X-DarkRadar-Signature` header.
Fields
idstringDelivery id (`evt_…`); same as the `X-DarkRadar-Delivery` header. Do not process an id twice.
typestringEvent type: `leak.created`, `leak.shared` (shared by hand from the dashboard), `scan.finished`, `scan.failed`, `hunter.finding.created`, `webhook.test`.
createdAtstringWhen the event was created for delivery (ISO 8601).
Content that depends on the event. Leak events carry event fields, scan events carry scan fields.
data.eventIdstringLeak event id — get details with `GET /v1/leak-events/{eventId}`. (leak events)
data.leakTypestringWhat the leak matched: `domain`, `email`, `username`, `ip`, `hwid`, `application`. (leak events)
data.typestringWhose leak: `employee`, `customer` (360), `third_party`. (leak events)
data.severitystringSeverity: `critical`, `high`, `medium`, `low`, `unknown`. (leak events)
data.statusstringFor leak events the event status (`open` …); for scan events `completed` or `failed`.
data.eventDatestringWhen the leak happened (infection date). (leak events)
data.stealerFamilystringStealer family. (leak events)
data.groupIdstringRelated protection resource group.
data.scanIdstringScan id — `GET /v1/scans/{scanId}`. (scan events)
data.completedAtstringWhen the scan ended. (scan events)
data.statsobjectScan result counts; zero for a failed scan. (scan events)
data.stats.totalMatchesnumberTotal matches.
data.stats.newMatchesnumberMatches found for the first time in this scan.
data.stats.severitiesobjectMatch counts by severity.
data.stats.severities.criticalnumberCritical.
data.stats.severities.highnumberHigh.
data.stats.severities.mediumnumberMedium.
data.stats.severities.lownumberLow.
data.stats.severities.infonumberInfo.
data.stats.severities.unknownnumberUnknown.
data.messagestringExplanation. (`webhook.test` only)
data.targetIdstringThe watched target with new findings — `GET /v1/hunter/findings?targetId=…`. (`hunter.finding.created`)
data.targetKindstringTarget type (e.g. `domain`, `email`). (`hunter.finding.created`)
data.newFindingsnumberNumber of findings added in this scan; `data.severity` is the highest severity. (`hunter.finding.created`)
JSON schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://darkradar.com/docs/schemas/webhook-event.schema.json",
"title": "Webhook event",
"description": "The signed body delivered to your webhook. The signature is in the `X-DarkRadar-Signature` header.",
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Delivery id (`evt_…`); same as the `X-DarkRadar-Delivery` header. Do not process an id twice."
},
"type": {
"type": "string",
"description": "Event type: `leak.created`, `leak.shared` (shared by hand from the dashboard), `scan.finished`, `scan.failed`, `hunter.finding.created`, `webhook.test`."
},
"createdAt": {
"type": "string",
"description": "When the event was created for delivery (ISO 8601)."
},
"data": {
"type": "object",
"description": "Content that depends on the event. Leak events carry event fields, scan events carry scan fields.",
"properties": {
"eventId": {
"type": "string",
"description": "Leak event id — get details with `GET /v1/leak-events/{eventId}`. (leak events)"
},
"leakType": {
"type": "string",
"description": "What the leak matched: `domain`, `email`, `username`, `ip`, `hwid`, `application`. (leak events)"
},
"type": {
"type": "string",
"description": "Whose leak: `employee`, `customer` (360), `third_party`. (leak events)"
},
"severity": {
"type": "string",
"description": "Severity: `critical`, `high`, `medium`, `low`, `unknown`. (leak events)"
},
"status": {
"type": "string",
"description": "For leak events the event status (`open` …); for scan events `completed` or `failed`."
},
"eventDate": {
"type": "string",
"description": "When the leak happened (infection date). (leak events)"
},
"stealerFamily": {
"type": "string",
"description": "Stealer family. (leak events)"
},
"groupId": {
"type": "string",
"description": "Related protection resource group."
},
"scanId": {
"type": "string",
"description": "Scan id — `GET /v1/scans/{scanId}`. (scan events)"
},
"completedAt": {
"type": "string",
"description": "When the scan ended. (scan events)"
},
"stats": {
"type": "object",
"description": "Scan result counts; zero for a failed scan. (scan events)",
"properties": {
"totalMatches": {
"type": "number",
"description": "Total matches."
},
"newMatches": {
"type": "number",
"description": "Matches found for the first time in this scan."
},
"severities": {
"type": "object",
"description": "Match counts by severity.",
"properties": {
"critical": {
"type": "number",
"description": "Critical."
},
"high": {
"type": "number",
"description": "High."
},
"medium": {
"type": "number",
"description": "Medium."
},
"low": {
"type": "number",
"description": "Low."
},
"info": {
"type": "number",
"description": "Info."
},
"unknown": {
"type": "number",
"description": "Unknown."
}
}
}
}
},
"message": {
"type": "string",
"description": "Explanation. (`webhook.test` only)"
},
"targetId": {
"type": "string",
"description": "The watched target with new findings — `GET /v1/hunter/findings?targetId=…`. (`hunter.finding.created`)"
},
"targetKind": {
"type": "string",
"description": "Target type (e.g. `domain`, `email`). (`hunter.finding.created`)"
},
"newFindings": {
"type": "number",
"description": "Number of findings added in this scan; `data.severity` is the highest severity. (`hunter.finding.created`)"
}
}
}
}
}