Supplier Risk Webhooks
You can configure the Censys Supplier Risk module to send webhook JSON payloads whenever new risks are identified in your supply chain. This document explains how to set up webhook notifications.
Prerequisites
- A Censys Platform user with the Supplier Risk - Manager role.
- The URL that you want to send webhook alerts to.
- Any headers you want to use for authorization, routing, and so on.
Webhook alert types
You can receive webhook alerts for risk alerts, six-hour risk digests, and Censys ARC Rapid Response advisories.
Risk alerts
Risk alerts send a digest of newly identified risks in your supply chain every five minutes. An example paylod is provided below.
Six-hour risk digests
The six-hour digest is a summary of newly identified top risks sent every six hours.
Censys ARC advisories
Censys ARC advisories are sent whenever a new Rapid Response risk has been identified that is present in your supply chain. If you do not receive a notification about a new Rapid Response risk, then Censys has not detected it in your supply chain. Advisories about issues that do not affect your supply chain are still visible on the My Supply Chain or Supplier Overview dashboards in the UI. An example payload is provided below.
Webhook example payload
The following is an example payload for a six-hour digest risk alert. Payloads for the risk alert and Censys ARC advisories are similar to the example below, but the cadence will instead be realtime.
{
"delivery_id": "6f1c1d9e-0000-4000-8000-000000000004",
"alert_type": "risk",
"cadence": "digest",
"create_time": "2026-09-18T06:00:00Z",
"organization_id": "6f1c1d9e-0000-4000-8000-000000000001",
"integration_id": "6f1c1d9e-0000-4000-8000-000000000003",
"integration_display_name": "Risk Alerts",
"scope": {
"supply_chain_id": "6f1c1d9e-0000-4000-8000-000000000002"
},
"window_start": "2026-09-18T00:00:00Z",
"window_end": "2026-09-18T06:00:00Z",
"platform_url": "https://platform.censys.io/risks?scope=primary",
"risk_alert": {
"risks": [
{
"risk_type_id": "CVE-2021-44228",
"name": "Log4Shell",
"severity": "critical",
"confidence": 0.95,
"risk_category": "vulnerability",
"description": "Apache Log4j 2 JNDI lookups allow remote code execution through crafted log messages.",
"new_asset_count": 12,
"suppliers": [
{
"id": "0b6f6f5c-1d7e-4c38-9a53-5d1a2f0c0009",
"display_name": "Example Company"
}
],
"platform_url": "https://platform.censys.io/risks/log4shell"
}
],
"suppliers": [
{
"id": "0b6f6f5c-1d7e-4c38-9a53-5d1a2f0c0009",
"display_name": "Example Company"
}
],
"total_new_asset_count": 12,
"total_risk_type_count": 1,
"total_rapid_response_count": 0
}
}Webhook alert fields
Expand the section below to see comprehensive definitions of webhook alert fields. Fields that are empty, zero, or false are left out of the JSON payload. The one exception is total_rapid_response_count, which is always present. All times are RFC 3339 in UTC.
Webhook alert fields
Top-level alert fields
| Field | Type | Description |
|---|---|---|
delivery_id | string (UUID) | Identifies this delivery. Stays the same across retries. |
alert_type | string | The kind of alert: "risk". Names the content field. |
cadence | string | "realtime", "digest", or "test" for a test send. |
create_time | timestamp | When the alert was created, which is when its events were collected. Stays the same across retries. |
organization_id | string (UUID) | The organization that owns the integration. |
integration_id | string (UUID) | The integration the alert was produced for. |
integration_display_name | string | The integration's name at the time of the alert. |
scope | AlertScope | What the integration watches. See below. |
window_start | timestamp | Start of the time window the alert covers. |
window_end | timestamp | End of the time window the alert covers. |
platform_url | string (URL) | "View all" link into the Censys Platform, filtered to the scope and the window. |
risk_alert | RiskAlert | The content of a "risk" alert. See below. |
scope: AlertScope fields
scope: AlertScope fields| Field | Type | Description |
|---|---|---|
supply_chain_id | string (UUID) | The supply chain ID. |
risk_alert: RiskAlert fields
risk_alert: RiskAlert fields| Field | Type | Description |
|---|---|---|
risks | RiskSummary[] | The risks with events in the window, ordered by severity (highest first), then new_asset_count (highest first), then name. A digest carries only the top five. |
suppliers | SupplierRef[] | Every supplier affected across all risks, de-duplicated. |
total_new_asset_count | integer | Distinct assets with a new or reopened risk event in the window, across all risks. |
total_risk_type_count | integer | How many distinct risks appeared in the window. For a realtime alert this equals the length of risks. For a digest it can be larger, because risks is the top five of this many. |
total_rapid_response_count | integer | How many risks in the window are Rapid Response risks, counted before a digest's top-five cut. Always present, even when 0. |
risks[]: RiskSummary fields
risks[]: RiskSummary fields| Field | Type | Description |
|---|---|---|
risk_type_id | string | The risk's catalog ID, shared by every instance of it, for example CVE-2021-44228 or CENSYS-2024-0102. |
name | string | Human-readable risk name. |
severity | string | "low", "medium", "high" or "critical". |
confidence | number | Risk confidence, from 0.0 to 1.0. |
risk_category | string | "vulnerability", "exposure", "misconfiguration" or "threat". |
description | string | Description of the risk. |
rapid_response | boolean | true when the risk is a Rapid Response risk. Left out otherwise. |
new_asset_count | integer | Distinct assets with a new or reopened event for this risk in the window. |
suppliers | SupplierRef[] | Suppliers this risk was found on, de-duplicated. |
platform_url | string (URL) | Link into the Censys Platform, filtered to this risk within the scope. |
events | RiskEventRef[] | The individual events behind the counts. Present only when the integration includes assets. Webhooks always get the full list. |
events[]: RiskEventRef fields
events[]: RiskEventRef fields| Field | Type | Description |
|---|---|---|
event_id | string (UUID) | The event's ID. Stays the same if the event is delivered again. |
op | string | "open": the risk was first seen on the asset. "reopened": a resolved risk was seen again. Resolved events aren't sent. |
event_time | timestamp | When the event happened. |
risk_instance_id | string (UUID) | The risk instance the event is about. Stays the same across reopens. |
asset | AssetRef | The affected asset. |
supplier | SupplierRef | The supplier the asset belongs to. |
platform_url | string (URL) | Link into the Censys Platform for this asset's risk. |
suppliers[] and supplier: SupplierRef fields
suppliers[] and supplier: SupplierRef fields| Field | Type | Description |
|---|---|---|
id | string (UUID) | The supplier's ID. |
display_name | string | The supplier's name. |
asset: AssetRef fields
asset: AssetRef fields| Field | Type | Description |
|---|---|---|
type | string | "host" or "web". |
name | string | An IP address for a host, or a hostname and port for a web property, for example my.asset.example:8443. |
service | string | The service the risk was found on, as {port}/{protocol}, for example 443/HTTP. Left out when the risk isn't tied to one service. |
Configure webhook alerts in the Censys Platform
- Go to the Censys Supplier Risk module in the Platform web console. Select Integrations.
- On the card for webhook alerts, click Set Up.
- On the "Authentication" page:
- In the "Payload URL" field, enter the URL you want to send the JSON payload to.
- In the "Header Authorization" section, enter any headers you want to use.
- Click Next.
- On the "Configuration" page, select the alert types you want to send to the URL.
- Click Next.
- On the "Filters" page, configure the risk severity, type, and suppliers you want to be notified about.
- Click Next.
- On the "Review" page, enter an integration name and review your configuration options.
- Click Finish Setup.
Updated 29 minutes ago
