Subscribe to vulnerability scan jobs via WebSocket. Scanners connect to receive pending scan jobs and send back results. Authenticated via shared secret (query parameter or X-Scanner-Secret header).
Parameters
Sequence number to resume from. If omitted, starts from latest. Use -1 to receive only new jobs.
Errors
InvalidSecret
Scanner shared secret is invalid
View raw schema
{
"type": "subscription",
"errors": [
{
"name": "InvalidSecret",
"description": "Scanner shared secret is invalid"
}
],
"message": {
"schema": {
"refs": [
"#scanJob",
"#scanResult"
],
"type": "union"
}
},
"parameters": {
"type": "params",
"properties": {
"cursor": {
"type": "integer",
"description": "Sequence number to resume from. If omitted, starts from latest. Use -1 to receive only new jobs."
}
}
},
"description": "Subscribe to vulnerability scan jobs via WebSocket. Scanners connect to receive pending scan jobs and send back results. Authenticated via shared secret (query parameter or X-Scanner-Secret header)."
}
A scan job dispatched from hold to scanner. Sent as a JSON WebSocket message.
Properties
Manifest digest (e.g., sha256:abc123...)
maxLength: 128 bytes
DID of the hold where the image is stored
HTTP endpoint of the hold for blob downloads
Scan priority (lower = higher priority). Tier-based scheduling.
Repository name (e.g., myapp)
maxLength: 256 bytes
Monotonic sequence number for cursor-based resumption
Optional tag that triggered the scan
maxLength: 256 bytes
Message type discriminator
maxLength: 32 bytes
View raw schema
{
"type": "object",
"required": [
"type",
"seq",
"digest",
"repository",
"userDid",
"holdDid",
"holdEndpoint"
],
"properties": {
"seq": {
"type": "integer",
"description": "Monotonic sequence number for cursor-based resumption"
},
"tag": {
"type": "string",
"maxLength": 256,
"description": "Optional tag that triggered the scan"
},
"type": {
"type": "string",
"const": "scan_job",
"maxLength": 32,
"description": "Message type discriminator"
},
"digest": {
"type": "string",
"maxLength": 128,
"description": "Manifest digest (e.g., sha256:abc123...)"
},
"holdDid": {
"type": "string",
"format": "did",
"description": "DID of the hold where the image is stored"
},
"userDid": {
"type": "string",
"format": "did",
"description": "DID of the image owner"
},
"priority": {
"type": "integer",
"description": "Scan priority (lower = higher priority). Tier-based scheduling."
},
"repository": {
"type": "string",
"maxLength": 256,
"description": "Repository name (e.g., myapp)"
},
"holdEndpoint": {
"type": "string",
"format": "uri",
"description": "HTTP endpoint of the hold for blob downloads"
}
},
"description": "A scan job dispatched from hold to scanner. Sent as a JSON WebSocket message."
}
A scan result sent from scanner back to hold. Sent as a JSON WebSocket message.
Properties
Manifest digest that was scanned
maxLength: 128 bytes
Error message if scan failed
maxLength: 1024 bytes
SBOM blob (SPDX JSON format, max 100MB)
maxLength: 104857600
Scanner version string
maxLength: 64 bytes
Vulnerability count summary
Message type discriminator
maxLength: 32 bytes
Grype vulnerability report blob (JSON, max 100MB)
maxLength: 104857600
View raw schema
{
"type": "object",
"required": [
"type",
"digest",
"summary"
],
"properties": {
"sbom": {
"type": "bytes",
"maxLength": 104857600,
"description": "SBOM blob (SPDX JSON format, max 100MB)"
},
"type": {
"type": "string",
"const": "scan_result",
"maxLength": 32,
"description": "Message type discriminator"
},
"error": {
"type": "string",
"maxLength": 1024,
"description": "Error message if scan failed"
},
"digest": {
"type": "string",
"maxLength": 128,
"description": "Manifest digest that was scanned"
},
"summary": {
"ref": "#vulnSummary",
"type": "ref",
"description": "Vulnerability count summary"
},
"vulnReport": {
"type": "bytes",
"maxLength": 104857600,
"description": "Grype vulnerability report blob (JSON, max 100MB)"
},
"scannerVersion": {
"type": "string",
"maxLength": 64,
"description": "Scanner version string"
}
},
"description": "A scan result sent from scanner back to hold. Sent as a JSON WebSocket message."
}
No description available.
Properties
Count of critical severity vulnerabilities
minimum: 0
Count of high severity vulnerabilities
minimum: 0
Count of low severity vulnerabilities
minimum: 0
Count of medium severity vulnerabilities
minimum: 0
Total vulnerability count
minimum: 0
View raw schema
{
"type": "object",
"required": [
"critical",
"high",
"medium",
"low",
"total"
],
"properties": {
"low": {
"type": "integer",
"minimum": 0,
"description": "Count of low severity vulnerabilities"
},
"high": {
"type": "integer",
"minimum": 0,
"description": "Count of high severity vulnerabilities"
},
"total": {
"type": "integer",
"minimum": 0,
"description": "Total vulnerability count"
},
"medium": {
"type": "integer",
"minimum": 0,
"description": "Count of medium severity vulnerabilities"
},
"critical": {
"type": "integer",
"minimum": 0,
"description": "Count of critical severity vulnerabilities"
}
}
}