Webhook field reference
Payload scope
The generic webhook sends current scan results as structured JSON. In diff mode, it also includes changes since the previous scan.
The payload includes Low findings, muted findings, EOL packages folded in Slack, and affected containers and workloads. It can be used alongside Slack, but does not convert the payload into Discord- or Teams-specific message formats.
See Configuration for destinations and Notification conditions for delivery timing. Remediation plan JSON is described in Webhook remediation fields.
Report fields
Field names in each table are relative to the object indicated by that table. Fields without an omission condition are included whenever the object is present.
Top level
| Field | Type | Meaning and omission conditions |
|---|---|---|
generated_at |
string | Scan time in RFC 3339 format. |
environment |
object | Environment. |
summary |
object | Summary. |
eosl_images |
array of strings or null |
EOL base-image references; may be null when none apply. |
actionable |
array of objects | Images with fixed findings; [] when none apply. |
watch |
array of objects | Images with findings normalized to affected; [] when none apply. |
wont_fix |
array of objects | Images with will_not_fix findings; [] when none apply. |
eol_packages |
array of objects | Images containing all end_of_life groups; [] when none apply. |
scan_errors |
array of objects | Scan failures; [] when none apply. |
diff |
object | Changes; omitted in full mode. |
runtime |
object | Sensor information and usage counts; omitted when runtime usage is disabled. |
remediation |
object | Remediation plans and PR processing results; omitted when remediation planning is disabled. |
watch is a fix-status section, separate from the Watch priority.
not_affected findings are excluded from all finding arrays.
Environment
environment field |
Type | Meaning and omission conditions |
|---|---|---|
kind |
string | docker or kubernetes. |
name |
string | Configured environment name; omitted when unset. |
Summary
summary field |
Type | Meaning and omission conditions |
|---|---|---|
images_total |
integer | Number of unique image-reference and content-identity combinations, including scan failures. |
images_affected |
integer | Number of images with eligible vulnerabilities or an EOL base OS. |
priority_counts |
object | Package-group counts by priority; omitted when triage is disabled. |
priority_counts.act_now |
integer | Act now count. |
priority_counts.watch |
integer | Watch count. |
priority_counts.low |
integer | Low count. |
intel |
object | Threat intelligence availability and freshness; omitted when triage is disabled. |
intel.degraded |
boolean | true when both KEV and EPSS are unavailable. |
intel.kev_ok |
boolean | true when KEV is available. |
intel.epss_ok |
boolean | true when EPSS is available. |
intel.stale_days |
integer | Age in days of the stale threat intelligence in use. |
priority_counts includes EOL packages only when their priority is Act now.
Its scope overlaps with eol_packages, so the three counts do not necessarily sum to the total number of package groups.
Scan failures
scan_errors[] field |
Type | Meaning |
|---|---|---|
image |
string | Image reference whose scan failed. |
error |
string | Error details. |
See Handling scan failures for how results are handled after a failure.
Image fields
Each element of actionable, watch, wont_fix, and eol_packages represents an image reference and content identity for a particular fix status.
Image identity
| Field | Type | Meaning and omission conditions |
|---|---|---|
image |
string | Image reference for display. |
severity_counts |
object | Integer counts named CRITICAL and HIGH (when the scanned severities are widened, HIGH counts every severity other than CRITICAL). |
findings |
array of objects | Package groups belonging to this image and fix status. |
containers |
array of objects | Containers matching this content identity; [] when none apply. |
content_id |
string | sha256:<hex> for a Docker scan targeting a config digest whose content identity was verified; omitted otherwise. |
registry_digests |
array of strings | Registry digests collected for the same reference from successful scans with verified content identities; [] when unavailable. |
identity_resolved |
boolean | true when this element's scan verified the running image's content identity. |
scan_target_kind |
string | content_id, registry_digest, or reference. |
registry_digests covers the entire reference, while identity_resolved and scan_target_kind describe each element.
See Scan warnings for the corresponding Slack annotations.
Containers
containers[] field |
Type | Meaning |
|---|---|---|
name |
string | Docker name without the leading slash or link aliases, or <namespace>/<pod>/<container> for Kubernetes. |
workload |
object | Workload association, included even when the association is unknown. |
Even when one reference points to multiple content identities, each element includes only the containers matching its content identity.
Workloads
containers[].workload field |
Type | Meaning and omission conditions |
|---|---|---|
kind |
string | unknown, compose, deployment, statefulset, daemonset, job, cronjob, or pod. |
group |
string | Compose project or namespace; omitted when unknown. |
name |
string | Compose service, resolved workload name, or standalone Pod name; omitted when unknown. |
Finding fields
findings[] represents package groups, and its nested vulns[] represents individual vulnerabilities.
Packages
findings[] field |
Type | Meaning and omission conditions |
|---|---|---|
package |
string | Package name. |
class |
string | os or lang. |
ecosystem |
string | Type such as debian or python-pkg; "" when unknown. |
installed |
string | Installed version. |
fixed |
string | Fixed version; "" when none is available. |
status |
string | fixed, affected, will_not_fix, or end_of_life. |
severity_counts |
object | Integer counts named CRITICAL and HIGH (when the scanned severities are widened, HIGH counts every severity other than CRITICAL). |
upgrade_risk |
string | "", distro_update, safe, caution, or unknown. |
priority |
string | act_now, watch, or low; omitted when triage is disabled. |
vuln_ids |
array of strings | Sorted vulnerability IDs. |
vulns |
array of objects | Details for each vulnerability. |
runtime |
object | Finding usage; omitted when no usage assessment is attached. |
class and ecosystem are included even when runtime usage is disabled.
See Finding classification and Exploitation-based triage for fix-status and priority decisions.
Vulnerabilities
vulns[] field |
Type | Meaning and omission conditions |
|---|---|---|
id |
string | Vulnerability ID without Slack link markup. |
severity |
string | Trivy severity. |
status |
string | Original Trivy status when it differs from the group's status; omitted when they match. |
url |
string | Primary advisory URL; omitted when unavailable. |
title |
string | Short title from Trivy; omitted when unavailable. |
kev |
boolean | true when listed in the available KEV catalog. |
ransomware |
boolean | KEV ransomware flag; omitted when false. |
epss |
number or null |
EPSS probability; null when unknown. |
priority |
string | act_now, watch, or low; omitted when triage is disabled. |
refs |
array of objects | Additional references; omitted when empty. |
When status is omitted, read it as the same value as the containing findings[] element's status.
If the original Trivy status is missing, the value is unknown.
Additional references
refs[] field |
Type | Meaning |
|---|---|---|
kind |
string | vendor or discussion. |
label |
string | Display label. |
url |
string | Reference URL. |
Runtime fields
Runtime fields are added when runtime usage is enabled. See Runtime usage for Sensor status meanings and observation limits.
Sensor information
Top-level runtime field |
Type | Meaning and omission conditions |
|---|---|---|
sensor_status |
string | ok, degraded, stale, not_reporting, permission_denied, evidence_invalid, isolation_failed, or isolation_degraded. |
heartbeat_at |
string | Sensor report time in RFC 3339 format; omitted when no report time is available. |
interval_seconds |
integer | Sampling interval in seconds; omitted when 0. |
rules |
object | Rules for assessing usage. |
rules.os_packages |
string | executed_or_loaded_by_running_process. |
rules.lang_packages_binary |
string | in_running_binary. |
rules.lang_packages_runtime |
string | runtime_process_running. |
events_status |
string | ok or unavailable; "" when the Sensor has not reported. |
events_reason |
string | Reason associated with event-observation status; omitted when empty. |
counts |
object | Usage counts. |
Usage counts
runtime.counts field |
Type | Meaning |
|---|---|---|
in_use |
integer | Number of package groups in use. |
not_observed |
integer | Number of package groups whose use was not observed. |
unavailable |
integer | Number of package groups whose usage could not be assessed. |
muted |
integer | Number of muted package groups. |
Counts cover all groups in the four finding arrays, and each count is included even when 0.
muted overlaps with the usage counts, so do not sum all four values as a total.
Finding usage
findings[].runtime field |
Type | Meaning and omission conditions |
|---|---|---|
usage |
string | in_use, not_observed, or unavailable. |
reason |
string | Reason usage is unavailable; omitted when empty. |
evidence_kinds |
array of strings | Observation types; omitted when empty. |
events_coverage |
string | since_start, partial, or none; omitted when unavailable. |
exposure |
string | host_published_all, host_published_loopback, container_listening, or unknown; omitted when unavailable. |
high_privilege |
boolean | true for UID 0 without a user namespace, dangerous capabilities, or privileged mode; omitted otherwise. |
containers |
array of objects | Container evidence; omitted when empty. |
muted |
boolean | true when muted; omitted otherwise. |
muted_reason |
string | Muting reason no_fix_not_in_use_7d; omitted when no reason applies. |
evidence_kinds[] value |
Meaning |
|---|---|
exe |
Execution confirmed by sampling. |
mapped_library |
Library loading confirmed by sampling. |
exec_event |
Execution observed by eBPF. |
library_load_event |
Library loading observed by eBPF. |
events_coverage value |
Meaning |
|---|---|
since_start |
eBPF observation began before container startup with no gaps. |
partial |
Some periods or events were observed. |
none |
No event observation through eBPF. |
See Muting findings without a fix for muting conditions.
Container evidence
The following table describes fields in findings[].runtime.containers[].
For findings in use, the container with the strongest evidence is listed first, comparing exposure before privilege.
| Field | Type | Meaning and omission conditions |
|---|---|---|
name |
string | Container name. |
container_id |
string | Container ID, 64 hexadecimal characters. |
generation_started_at |
string | Container generation start time in RFC 3339 format; omitted when unknown. |
usage |
string | in_use, not_observed, or unavailable. |
reason |
string | Reason usage could not be assessed; omitted when empty. |
last_seen |
string | Last confirmation time in RFC 3339 format; omitted when unknown. |
ports |
array of strings | Port evidence, such as 0.0.0.0:443/tcp; omitted when empty. |
kinds_ambiguous |
boolean | true when multiple observation types for an OS package cannot be associated with individual processes; omitted otherwise. |
process_exes |
array of strings | Deduplicated list of observed executables when kinds_ambiguous is true; omitted when empty. |
process |
object | Included only when a process was observed. |
process.exe |
string | Executable path; omitted when empty. |
process.effective_uid |
integer | Effective UID; included even when 0. |
process.userns |
boolean | Whether a user namespace is used; included even when false. |
process.dangerous_caps |
array of strings | Dangerous capabilities; omitted when empty. |
process.privileged |
boolean | Whether privileged mode is used; included even when false. |
instances |
array of objects | Language-package instances; omitted when empty. |
instances[].type |
string | Instance type; omitted when empty. |
instances[].target |
string | Target, such as an executable; omitted when empty. |
instances[].pkg_path |
string | Package path; omitted when empty. |
instances[].usage |
string | in_use, not_observed, or unavailable. |
instances[].reason |
string | Reason usage could not be assessed; omitted when empty. |
When kinds_ambiguous is true, do not interpret individual evidence_kinds values as corresponding to process.exe or individual entries in process_exes.
Reasons usage is unavailable
The reason fields for findings, containers, and instances use the following reason codes.
| Reason code | Meaning |
|---|---|
sensor_not_reporting |
No report from the Sensor. |
sensor_stale |
The Sensor report is stale. |
evidence_invalid |
Evidence validation failed. |
isolation_failed |
Sensor isolation failed. |
permission_denied |
Read permission is unavailable. |
initializing |
The package index is being prepared. |
stalled |
Observation processing exceeded its time limit. |
parse_failed |
Package database parsing failed. |
truncated |
Read limits left insufficient evidence. |
incomplete |
Some observations are missing. |
generation_unverified |
The association between the container generation and scan target could not be verified. |
container_not_observed |
No observation of the matching container. |
db_absent |
No package database. |
db_error |
Package database read or parse error. |
db_unsupported |
Unsupported package database. |
no_file_list |
No file list for the package. |
attribution_ambiguous |
The package owning the observed path could not be uniquely identified. |
file_replaced |
The observed file has been replaced. |
version_mismatch |
Package versions do not match. |
ecosystem_unmapped |
The runtime corresponding to the ecosystem could not be identified. |
binary_path_unknown |
The executable path is unknown. |
Diff fields
diff describes changes since the previous scan by type.
See Change and history decisions for the conditions that establish a change.
Diff object
diff field |
Type | Meaning and omission conditions |
|---|---|---|
new |
array of objects | Ordinary package changes; [] when none apply. |
resolved |
array of objects | Package resolutions; [] when none apply. |
replaced |
array of objects | Image content changes; [] when none apply. |
reference_changes |
array of objects | Image reference updates; omitted when none apply. |
new_eosl |
array of strings | New EOL base images; [] when none apply. |
resolved_eosl |
array of strings | References no longer recorded as EOL; [] when none apply. |
new_eol_packages |
array of objects | EOL package changes; [] when none apply. |
resolved_eol_packages |
array of objects | EOL package clearances; [] when none apply. |
oldest_open_days |
integer | Oldest unresolved age; included even when 0. |
Ordinary package changes
diff.new[] field |
Type | Meaning and omission conditions |
|---|---|---|
image |
string | Image reference. |
package |
string | Package name. |
kind |
string | new, escalated, new_cves, now_fixable, or unmuted. |
ecosystems |
array of strings | Sorted, deduplicated ecosystems of the groups combined into this change, including "" for unknown types. |
runtime_usage |
string | in_use, not_observed, or unavailable; omitted when no usage assessment is available. |
muted |
boolean | true when every group in this change is muted; omitted otherwise. |
new_cve_count |
integer | Added CVE count for new_cves; omitted when 0. |
new_cve_ids |
array of strings | Added IDs for new_cves; omitted when empty. |
critical |
integer | CRITICAL count. |
high |
integer | HIGH count (includes every severity other than CRITICAL). |
priority |
string | act_now, watch, or low; omitted when no priority is available. |
reason |
string | Evidence for escalated or the reason for unmuted; omitted when empty. |
new_cve_ids contains no Slack link markup, and its length matches new_cve_count.
The explanatory text in reason is in English regardless of the notification language setting.
Package resolutions
diff.resolved[] field |
Type | Meaning |
|---|---|---|
image |
string | Image reference. |
package |
string | Package name no longer present in ordinary findings. |
See Resolution decisions for what resolution means.
Image content changes
diff.replaced[] field |
Type | Meaning |
|---|---|---|
ref |
string | Image reference. |
prev_content_ids |
array of strings | Sorted previous verified content-ID set. |
content_ids |
array of strings | Sorted current verified content-ID set. |
Empty arrays are returned as [], not null.
Image reference updates
diff.reference_changes[] field |
Type | Meaning |
|---|---|---|
repository |
string | Repository from the new reference without its tag or digest, preserving the registry port. |
previous_ref |
string | Full previous image reference. |
ref |
string | Full new image reference. |
workloads |
array of strings | Sorted workload keys shared by the old and new references; [] when empty. |
| Target | Workload key format |
|---|---|
| Compose | compose/<project>/<service> |
| Kubernetes | <kind>/<namespace>/<name>/<container> |
| Standalone Docker container with no known workload | container/<name> |
See Image reference updates for conditions for carrying history over.
Base OS EOL changes
| Field | Element type | Meaning |
|---|---|---|
diff.new_eosl[] |
string | Base-image reference newly recorded as EOL. |
diff.resolved_eosl[] |
string | Image reference no longer recorded as EOL. |
EOL package changes
Changes to EOL packages folded in Slack are also included.
diff.new_eol_packages[] field |
Type | Meaning and omission conditions |
|---|---|---|
image |
string | Image reference. |
package |
string | Package name. |
kind |
string | eol_new, eol_new_cves, or eol_escalated. |
ecosystems |
array of strings | Sorted, deduplicated ecosystems of the groups combined into this change, including "" for unknown types. |
runtime_usage |
string | in_use, not_observed, or unavailable; omitted when no usage assessment is available. |
new_cve_ids |
array of strings | Sorted added IDs for eol_new_cves; omitted when empty. |
critical |
integer | CRITICAL count across current EOL groups. |
high |
integer | HIGH count across current EOL groups (includes every severity other than CRITICAL). |
priority |
string | act_now, watch, or low; omitted when triage is disabled. |
reason |
string | Evidence in English for eol_escalated; omitted when empty. |
new_cve_ids contains no Slack link markup.
There is no new_cve_count field, so use the length of new_cve_ids for the added count.
EOL package clearances
diff.resolved_eol_packages[] field |
Type | Meaning |
|---|---|---|
image |
string | Image reference. |
package |
string | Package name no longer present in the EOL section. |
still_open |
boolean | true when ordinary findings remain for the same reference and package; included even when false. |
Oldest unresolved age
diff.oldest_open_days is the number of days since the earliest first-seen date among eligible records.
Fractional days are rounded down, and the value is 0 when no records qualify.
| Target | First-seen date used |
|---|---|
| Ordinary packages | First seen among ordinary findings, including Low, muted, and retained records. |
| EOL base OS | Date the base OS was first detected as EOL. |
| Unfolded EOL packages | Date the package was first detected as EOL. |
| Folded Act now EOL packages | Date the package was first detected as EOL. |
| Folded EOL packages other than Act now | Not counted individually; the base OS's first-seen-as-EOL date is used. |
The scope differs from the age shown in Slack when triage is enabled. See Unresolved age for the Slack definition.
Compatibility
Ecosystem, runtime usage, EOL, and reference-update information are additions that preserve existing fields and the structure organized by fix status.
Receivers should accept unknown additional fields and handle omissions according to each table.
Treat omission, null, [], and "" as distinct values.