Integrate Atlas InfoSec API to manage compliance action plans directly from the ReportingPage. Users can view, create, and update action plans for host findings without switching to the Atlas web tool. Backend: - Add atlasApi.js helper with Basic Auth, TLS skip, GET/PUT/PATCH/POST - Add atlas_action_plans_cache migration for SQLite cache table - Add atlas.js router with sync, status, and proxy CRUD endpoints - Mount Atlas router at /api/atlas in server.js - Extract hostId from Ivanti host findings during sync Frontend: - Add AtlasBadge component (amber=needs plan, green=has plan) - Add AtlasSlideOutPanel with plan list, create form, edit capability - Separate active plans from inactive history in collapsible section - Custom dark-themed plan type dropdown - Optimistic local state shows pending plans immediately after creation - Atlas sync button on ReportingPage toolbar - Prepopulate finding ID in create form from clicked row Environment: - Add ATLAS_API_URL, ATLAS_API_USER, ATLAS_API_PASS, ATLAS_SKIP_TLS to .env.example
1316 lines
49 KiB
JSON
1316 lines
49 KiB
JSON
{
|
|
"openapi": "3.1.0",
|
|
"info": {
|
|
"title": "Atlas InfoSec API Webserver",
|
|
"description": "FastAPI webserver providing optimized access to Atlas Security data with Bearer token authentication",
|
|
"version": "1.0.0"
|
|
},
|
|
"paths": {
|
|
"/kenna-owners": {
|
|
"get": {
|
|
"summary": "Get Kenna Owners",
|
|
"operationId": "get_kenna_owners_kenna_owners_get",
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"APIKeyHeader": []
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/kenna-assets": {
|
|
"get": {
|
|
"summary": "Get Kenna Assets",
|
|
"operationId": "get_kenna_assets_kenna_assets_get",
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"APIKeyHeader": []
|
|
}
|
|
]
|
|
},
|
|
"post": {
|
|
"summary": "Get Kenna Assets By Owners Endpoint",
|
|
"operationId": "get_kenna_assets_by_owners_endpoint_kenna_assets_post",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/KennaOwnersList"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"APIKeyHeader": []
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/kenna-assets/{page}": {
|
|
"get": {
|
|
"summary": "Get Kenna Assets Paginated",
|
|
"operationId": "get_kenna_assets_paginated_kenna_assets__page__get",
|
|
"security": [
|
|
{
|
|
"APIKeyHeader": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "page",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer",
|
|
"title": "Page"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/kenna-vulnerabilities/{asset_id}/{cve_id}": {
|
|
"get": {
|
|
"summary": "Get Kenna Vulnerability By Asset Cve",
|
|
"description": "Get vulnerability details for specific asset and CVE combination",
|
|
"operationId": "get_kenna_vulnerability_by_asset_cve_kenna_vulnerabilities__asset_id___cve_id__get",
|
|
"security": [
|
|
{
|
|
"APIKeyHeader": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "asset_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer",
|
|
"title": "Asset Id"
|
|
}
|
|
},
|
|
{
|
|
"name": "cve_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"title": "Cve Id"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/kenna-vulnerabilities": {
|
|
"post": {
|
|
"summary": "Get Bulk Kenna Vulnerabilities By Asset Cve",
|
|
"description": "Get vulnerability details for multiple asset+CVE combinations",
|
|
"operationId": "get_bulk_kenna_vulnerabilities_by_asset_cve_kenna_vulnerabilities_post",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/KennaAssetCvesBulk"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"APIKeyHeader": []
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/cache/refresh-kenna": {
|
|
"post": {
|
|
"summary": "Refresh Kenna Data Cache",
|
|
"operationId": "refresh_kenna_data_cache_cache_refresh_kenna_post",
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"APIKeyHeader": []
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/ivanti-owners": {
|
|
"get": {
|
|
"summary": "Get Ivanti Owners",
|
|
"operationId": "get_ivanti_owners_ivanti_owners_get",
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"APIKeyHeader": []
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/ivanti-assets": {
|
|
"get": {
|
|
"summary": "Get Ivanti Assets",
|
|
"operationId": "get_ivanti_assets_ivanti_assets_get",
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"APIKeyHeader": []
|
|
}
|
|
]
|
|
},
|
|
"post": {
|
|
"summary": "Get Ivanti Assets By Owners Endpoint",
|
|
"operationId": "get_ivanti_assets_by_owners_endpoint_ivanti_assets_post",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/IvantiOwnersList"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"APIKeyHeader": []
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/ivanti-assets/{page}": {
|
|
"get": {
|
|
"summary": "Get Ivanti Assets Paginated",
|
|
"operationId": "get_ivanti_assets_paginated_ivanti_assets__page__get",
|
|
"security": [
|
|
{
|
|
"APIKeyHeader": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "page",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer",
|
|
"title": "Page"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/ivanti-asset/{host_id}": {
|
|
"get": {
|
|
"summary": "Get Ivanti Asset By Host",
|
|
"description": "Get single active asset by host_id",
|
|
"operationId": "get_ivanti_asset_by_host_ivanti_asset__host_id__get",
|
|
"security": [
|
|
{
|
|
"APIKeyHeader": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "host_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer",
|
|
"title": "Host Id"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/ivanti-vulnerabilities/{host_id}/{qualys_id}": {
|
|
"get": {
|
|
"summary": "Get Ivanti Vulnerability By Host Qualys",
|
|
"description": "Get vulnerability details for specific host and Qualys ID combination",
|
|
"operationId": "get_ivanti_vulnerability_by_host_qualys_ivanti_vulnerabilities__host_id___qualys_id__get",
|
|
"security": [
|
|
{
|
|
"APIKeyHeader": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "host_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer",
|
|
"title": "Host Id"
|
|
}
|
|
},
|
|
{
|
|
"name": "qualys_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"title": "Qualys Id"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/ivanti-vulnerabilities": {
|
|
"post": {
|
|
"summary": "Get Bulk Ivanti Vulnerabilities By Host Qualys",
|
|
"description": "Get vulnerability details for multiple host+Qualys ID combinations",
|
|
"operationId": "get_bulk_ivanti_vulnerabilities_by_host_qualys_ivanti_vulnerabilities_post",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/IvantiHostFindingsBulk"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"APIKeyHeader": []
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/ivanti-vulnerabilities-by-host/{host_id}": {
|
|
"get": {
|
|
"summary": "Get Active Ivanti Vulnerabilities By Host",
|
|
"description": "Get all active vulnerability details for a specific host",
|
|
"operationId": "get_active_ivanti_vulnerabilities_by_host_ivanti_vulnerabilities_by_host__host_id__get",
|
|
"security": [
|
|
{
|
|
"APIKeyHeader": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "host_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer",
|
|
"title": "Host Id"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/ivanti-vulnerabilities-by-host": {
|
|
"post": {
|
|
"summary": "Get Bulk Active Ivanti Vulnerabilities By Hosts",
|
|
"description": "Get all active vulnerability details for multiple hosts",
|
|
"operationId": "get_bulk_active_ivanti_vulnerabilities_by_hosts_ivanti_vulnerabilities_by_host_post",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/IvantiHostsBulk"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"APIKeyHeader": []
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/cache/refresh-ivanti": {
|
|
"post": {
|
|
"summary": "Refresh Ivanti Data Cache",
|
|
"operationId": "refresh_ivanti_data_cache_cache_refresh_ivanti_post",
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"APIKeyHeader": []
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/hosts/{host_id}/action-plans": {
|
|
"put": {
|
|
"summary": "Create Action Plan",
|
|
"description": "Create action plan for host and vulnerability",
|
|
"operationId": "create_action_plan_hosts__host_id__action_plans_put",
|
|
"security": [
|
|
{
|
|
"APIKeyHeader": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "host_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer",
|
|
"title": "Host Id"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CreateActionPlanRequest"
|
|
},
|
|
"examples": {
|
|
"decommission": {
|
|
"summary": "Decommission Plan",
|
|
"description": "Plan to decommission entire host (no qualys_id needed)",
|
|
"value": {
|
|
"plan_type": "decommission",
|
|
"commit_date": "2026-07-01"
|
|
}
|
|
},
|
|
"remediation": {
|
|
"summary": "Remediation Plan",
|
|
"description": "Promise to remediate specific vulnerability",
|
|
"value": {
|
|
"plan_type": "remediation",
|
|
"qualys_id": "QID-12345",
|
|
"commit_date": "2026-07-01"
|
|
}
|
|
},
|
|
"false_positive": {
|
|
"summary": "False Positive Plan",
|
|
"description": "Mark vulnerability as false positive (jira_vnr optional)",
|
|
"value": {
|
|
"plan_type": "false_positive",
|
|
"qualys_id": "QID-12345",
|
|
"jira_vnr": "VNR-67890",
|
|
"commit_date": "2026-07-01"
|
|
}
|
|
},
|
|
"risk_acceptance": {
|
|
"summary": "Risk Acceptance Plan",
|
|
"description": "Accept risk with exemption (archer_exc optional)",
|
|
"value": {
|
|
"plan_type": "risk_acceptance",
|
|
"qualys_id": "QID-12345",
|
|
"archer_exc": "EXC-54321",
|
|
"commit_date": "2026-07-01"
|
|
}
|
|
},
|
|
"scan_exclusion": {
|
|
"summary": "Scan Exclusion Plan",
|
|
"description": "Exclude entire host from scanning (asset-level, no qualys_id needed, archer_exc optional)",
|
|
"value": {
|
|
"plan_type": "scan_exclusion",
|
|
"commit_date": "2026-07-01"
|
|
}
|
|
},
|
|
"remediation_by_findings_id": {
|
|
"summary": "Remediation by Host Findings ID",
|
|
"description": "Create plan using active_host_findings_id instead of qualys_id",
|
|
"value": {
|
|
"plan_type": "remediation",
|
|
"active_host_findings_id": 2647708909,
|
|
"commit_date": "2026-07-01"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"get": {
|
|
"summary": "Get Action Plans By Host",
|
|
"description": "Get full action plan history (active and inactive) for a specific host_id",
|
|
"operationId": "get_action_plans_by_host_hosts__host_id__action_plans_get",
|
|
"security": [
|
|
{
|
|
"APIKeyHeader": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "host_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer",
|
|
"title": "Host Id"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"patch": {
|
|
"summary": "Update Action Plan",
|
|
"description": "Update existing action plan",
|
|
"operationId": "update_action_plan_hosts__host_id__action_plans_patch",
|
|
"security": [
|
|
{
|
|
"APIKeyHeader": []
|
|
}
|
|
],
|
|
"parameters": [
|
|
{
|
|
"name": "host_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer",
|
|
"title": "Host Id"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/UpdateActionPlanRequest"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/hosts/create-bulk-action-plans": {
|
|
"post": {
|
|
"summary": "Create Bulk Action Plans",
|
|
"description": "Create action plans for multiple hosts in a single request",
|
|
"operationId": "create_bulk_action_plans_hosts_create_bulk_action_plans_post",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CreateBulkActionPlansRequest"
|
|
},
|
|
"examples": {
|
|
"bulk_decommission": {
|
|
"summary": "Bulk Decommission",
|
|
"description": "Create decommission plans for multiple hosts",
|
|
"value": {
|
|
"host_ids": [
|
|
123,
|
|
456,
|
|
789
|
|
],
|
|
"plan_type": "decommission",
|
|
"commit_date": "2026-07-01"
|
|
}
|
|
},
|
|
"bulk_remediation": {
|
|
"summary": "Bulk Remediation",
|
|
"description": "Create remediation plans for a specific vulnerability across multiple hosts",
|
|
"value": {
|
|
"host_ids": [
|
|
123,
|
|
456,
|
|
789
|
|
],
|
|
"plan_type": "remediation",
|
|
"qualys_id": "QID-12345",
|
|
"commit_date": "2026-07-01"
|
|
}
|
|
},
|
|
"bulk_false_positive": {
|
|
"summary": "Bulk False Positive",
|
|
"description": "Mark a vulnerability as false positive across multiple hosts (jira_vnr optional)",
|
|
"value": {
|
|
"host_ids": [
|
|
123,
|
|
456,
|
|
789
|
|
],
|
|
"plan_type": "false_positive",
|
|
"qualys_id": "QID-12345",
|
|
"jira_vnr": "VNR-67890",
|
|
"commit_date": "2026-07-01"
|
|
}
|
|
},
|
|
"bulk_risk_acceptance": {
|
|
"summary": "Bulk Risk Acceptance",
|
|
"description": "Accept risk for a vulnerability across multiple hosts (archer_exc optional)",
|
|
"value": {
|
|
"host_ids": [
|
|
123,
|
|
456,
|
|
789
|
|
],
|
|
"plan_type": "risk_acceptance",
|
|
"qualys_id": "QID-12345",
|
|
"archer_exc": "EXC-54321",
|
|
"commit_date": "2026-07-01"
|
|
}
|
|
},
|
|
"bulk_scan_exclusion": {
|
|
"summary": "Bulk Scan Exclusion",
|
|
"description": "Exclude multiple hosts from scanning (asset-level, no qualys_id needed, archer_exc optional)",
|
|
"value": {
|
|
"host_ids": [
|
|
123,
|
|
456,
|
|
789
|
|
],
|
|
"plan_type": "scan_exclusion",
|
|
"commit_date": "2026-07-01"
|
|
}
|
|
},
|
|
"bulk_remediation_by_findings_id": {
|
|
"summary": "Bulk Remediation by Host Findings ID",
|
|
"description": "Create remediation plans using active_host_findings_id instead of qualys_id",
|
|
"value": {
|
|
"host_ids": [
|
|
123,
|
|
456,
|
|
789
|
|
],
|
|
"plan_type": "remediation",
|
|
"active_host_findings_id": 2647708909,
|
|
"commit_date": "2026-07-01"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {}
|
|
}
|
|
}
|
|
},
|
|
"422": {
|
|
"description": "Validation Error",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/HTTPValidationError"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"APIKeyHeader": []
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/health": {
|
|
"get": {
|
|
"summary": "Health Check",
|
|
"operationId": "health_check_health_get",
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"APIKeyHeader": []
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/is-alive": {
|
|
"get": {
|
|
"summary": "Is Alive",
|
|
"operationId": "is_alive_is_alive_get",
|
|
"responses": {
|
|
"200": {
|
|
"description": "Successful Response",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"security": [
|
|
{
|
|
"APIKeyHeader": []
|
|
}
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"components": {
|
|
"schemas": {
|
|
"CreateActionPlanRequest": {
|
|
"properties": {
|
|
"plan_type": {
|
|
"type": "string",
|
|
"title": "Plan Type"
|
|
},
|
|
"commit_date": {
|
|
"type": "string",
|
|
"title": "Commit Date"
|
|
},
|
|
"qualys_id": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Qualys Id"
|
|
},
|
|
"active_host_findings_id": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Active Host Findings Id"
|
|
},
|
|
"jira_vnr": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Jira Vnr"
|
|
},
|
|
"archer_exc": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Archer Exc"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"plan_type",
|
|
"commit_date"
|
|
],
|
|
"title": "CreateActionPlanRequest"
|
|
},
|
|
"CreateBulkActionPlansRequest": {
|
|
"properties": {
|
|
"host_ids": {
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"type": "array",
|
|
"title": "Host Ids"
|
|
},
|
|
"plan_type": {
|
|
"type": "string",
|
|
"title": "Plan Type"
|
|
},
|
|
"commit_date": {
|
|
"type": "string",
|
|
"title": "Commit Date"
|
|
},
|
|
"qualys_id": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Qualys Id"
|
|
},
|
|
"active_host_findings_id": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Active Host Findings Id"
|
|
},
|
|
"jira_vnr": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Jira Vnr"
|
|
},
|
|
"archer_exc": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"title": "Archer Exc"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"host_ids",
|
|
"plan_type",
|
|
"commit_date"
|
|
],
|
|
"title": "CreateBulkActionPlansRequest"
|
|
},
|
|
"HTTPValidationError": {
|
|
"properties": {
|
|
"detail": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/ValidationError"
|
|
},
|
|
"type": "array",
|
|
"title": "Detail"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"title": "HTTPValidationError"
|
|
},
|
|
"IvantiHostFindings": {
|
|
"properties": {
|
|
"host_id": {
|
|
"type": "integer",
|
|
"title": "Host Id"
|
|
},
|
|
"qualys_ids": {
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array",
|
|
"title": "Qualys Ids"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"host_id",
|
|
"qualys_ids"
|
|
],
|
|
"title": "IvantiHostFindings"
|
|
},
|
|
"IvantiHostFindingsBulk": {
|
|
"properties": {
|
|
"assets": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/IvantiHostFindings"
|
|
},
|
|
"type": "array",
|
|
"title": "Assets"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"assets"
|
|
],
|
|
"title": "IvantiHostFindingsBulk"
|
|
},
|
|
"IvantiHostsBulk": {
|
|
"properties": {
|
|
"host_ids": {
|
|
"items": {
|
|
"type": "integer"
|
|
},
|
|
"type": "array",
|
|
"title": "Host Ids"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"host_ids"
|
|
],
|
|
"title": "IvantiHostsBulk"
|
|
},
|
|
"IvantiOwnersList": {
|
|
"properties": {
|
|
"owners": {
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array",
|
|
"title": "Owners"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"owners"
|
|
],
|
|
"title": "IvantiOwnersList"
|
|
},
|
|
"KennaAssetCves": {
|
|
"properties": {
|
|
"asset_id": {
|
|
"type": "integer",
|
|
"title": "Asset Id"
|
|
},
|
|
"cve_ids": {
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array",
|
|
"title": "Cve Ids"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"asset_id",
|
|
"cve_ids"
|
|
],
|
|
"title": "KennaAssetCves"
|
|
},
|
|
"KennaAssetCvesBulk": {
|
|
"properties": {
|
|
"assets": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/KennaAssetCves"
|
|
},
|
|
"type": "array",
|
|
"title": "Assets"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"assets"
|
|
],
|
|
"title": "KennaAssetCvesBulk"
|
|
},
|
|
"KennaOwnersList": {
|
|
"properties": {
|
|
"owners": {
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array",
|
|
"title": "Owners"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"owners"
|
|
],
|
|
"title": "KennaOwnersList"
|
|
},
|
|
"UpdateActionPlanRequest": {
|
|
"properties": {
|
|
"action_plan_id": {
|
|
"type": "string",
|
|
"title": "Action Plan Id"
|
|
},
|
|
"updates": {
|
|
"additionalProperties": true,
|
|
"type": "object",
|
|
"title": "Updates"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"action_plan_id",
|
|
"updates"
|
|
],
|
|
"title": "UpdateActionPlanRequest"
|
|
},
|
|
"ValidationError": {
|
|
"properties": {
|
|
"loc": {
|
|
"items": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "integer"
|
|
}
|
|
]
|
|
},
|
|
"type": "array",
|
|
"title": "Location"
|
|
},
|
|
"msg": {
|
|
"type": "string",
|
|
"title": "Message"
|
|
},
|
|
"type": {
|
|
"type": "string",
|
|
"title": "Error Type"
|
|
}
|
|
},
|
|
"type": "object",
|
|
"required": [
|
|
"loc",
|
|
"msg",
|
|
"type"
|
|
],
|
|
"title": "ValidationError"
|
|
}
|
|
},
|
|
"securitySchemes": {
|
|
"APIKeyHeader": {
|
|
"type": "apiKey",
|
|
"description": "Input Bearer Token (e.g., Bearer eyJhbGciOiJSUzI1NiIs...)",
|
|
"in": "header",
|
|
"name": "Authorization"
|
|
}
|
|
}
|
|
}
|
|
} |