{"openapi":"3.1.0","info":{"title":"Mythal API","description":"Mythal — the autonomous vulnerability remediation fabric for critical infrastructure. Twelve coordinated AI agents, a deterministic policy gate, and a signed reasoning-trace ledger.","version":"0.3.0"},"paths":{"/health":{"get":{"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/kpis":{"get":{"tags":["kpis"],"summary":"Kpis","operationId":"kpis_api_kpis_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/findings":{"get":{"tags":["findings"],"summary":"List Findings","operationId":"list_findings_api_findings_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"env","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Env"}},{"name":"kev","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Kev"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/findings/{vuln_id}":{"get":{"tags":["findings"],"summary":"Finding Detail","operationId":"finding_detail_api_findings__vuln_id__get","parameters":[{"name":"vuln_id","in":"path","required":true,"schema":{"type":"string","title":"Vuln Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/plans":{"get":{"tags":["plans"],"summary":"List Plans","operationId":"list_plans_api_plans_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/plans/{plan_id}":{"get":{"tags":["plans"],"summary":"Get Plan","description":"Full plan detail: steps, approvals, execution timeline, verification, agent trail.","operationId":"get_plan_api_plans__plan_id__get","parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/plans/{plan_id}/approve":{"post":{"tags":["plans"],"summary":"Approve","operationId":"approve_api_plans__plan_id__approve_post","parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/plans/{plan_id}/reject":{"post":{"tags":["plans"],"summary":"Reject","operationId":"reject_api_plans__plan_id__reject_post","parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"default":{},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/activity/messages":{"get":{"tags":["activity"],"summary":"Messages","operationId":"messages_api_activity_messages_get","parameters":[{"name":"agent","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent"}},{"name":"intent","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Intent"}},{"name":"trace_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trace Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/activity/audit":{"get":{"tags":["activity"],"summary":"Audit","description":"Human-readable audit feed — the reasoning-trace narratives (who did what, why).\nFilterable by agent, free-text, trace.","operationId":"audit_api_activity_audit_get","parameters":[{"name":"agent","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"trace_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trace Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"default":300,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/activity/stats":{"get":{"tags":["activity"],"summary":"Stats","description":"Per-agent event counts for the audit dashboard.","operationId":"stats_api_activity_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/activity/traces/{trace_id}":{"get":{"tags":["activity"],"summary":"Trace","operationId":"trace_api_activity_traces__trace_id__get","parameters":[{"name":"trace_id","in":"path","required":true,"schema":{"type":"string","title":"Trace Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/estate/export.csv":{"get":{"tags":["estate"],"summary":"Export Csv","description":"Download the asset inventory as CSV — what an operator would share with us\nor what we'd hand back as 'here's what we found in your estate.'","operationId":"export_csv_api_estate_export_csv_get","parameters":[{"name":"env","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Env"}},{"name":"zone","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Zone"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":20000,"default":10000,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/estate/summary":{"get":{"tags":["estate"],"summary":"Summary","operationId":"summary_api_estate_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/estate/graph":{"get":{"tags":["estate"],"summary":"Graph","description":"Return a small graph for react-flow visualization in the console.","operationId":"graph_api_estate_graph_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":400,"default":120,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/estate/assets":{"get":{"tags":["estate"],"summary":"List Assets","operationId":"list_assets_api_estate_assets_get","parameters":[{"name":"env","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Env"}},{"name":"zone","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Zone"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ot/plans":{"get":{"tags":["ot"],"summary":"Ot Plans","description":"OT-specific plans — those with an ot_safety_review attached.","operationId":"ot_plans_api_ot_plans_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/ot/windows":{"get":{"tags":["ot"],"summary":"Windows","operationId":"windows_api_ot_windows_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/compliance/posture":{"get":{"tags":["compliance"],"summary":"Posture","operationId":"posture_api_compliance_posture_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/compliance/evidence":{"get":{"tags":["compliance"],"summary":"List Evidence","operationId":"list_evidence_api_compliance_evidence_get","parameters":[{"name":"framework","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Framework"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/compliance/export":{"get":{"tags":["compliance"],"summary":"Export","operationId":"export_api_compliance_export_get","parameters":[{"name":"framework","in":"query","required":true,"schema":{"type":"string","title":"Framework"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/scenarios":{"get":{"tags":["scenarios"],"summary":"List Scenarios","operationId":"list_scenarios_api_scenarios_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/scenarios/{scenario_id}/run":{"post":{"tags":["scenarios"],"summary":"Run Scenario","operationId":"run_scenario_api_scenarios__scenario_id__run_post","parameters":[{"name":"scenario_id","in":"path","required":true,"schema":{"type":"string","title":"Scenario Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/scenarios/{scenario_id}/status":{"get":{"tags":["scenarios"],"summary":"Scenario Status","operationId":"scenario_status_api_scenarios__scenario_id__status_get","parameters":[{"name":"scenario_id","in":"path","required":true,"schema":{"type":"string","title":"Scenario Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/policy/rules":{"get":{"tags":["policy"],"summary":"Rules","operationId":"rules_api_policy_rules_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["policy"],"summary":"Add Rule","operationId":"add_rule_api_policy_rules_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/policy/rules/{rule_id}":{"patch":{"tags":["policy"],"summary":"Update Rule","operationId":"update_rule_api_policy_rules__rule_id__patch","parameters":[{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["policy"],"summary":"Delete Rule","operationId":"delete_rule_api_policy_rules__rule_id__delete","parameters":[{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/policy/evaluate":{"post":{"tags":["policy"],"summary":"Evaluate","operationId":"evaluate_api_policy_evaluate_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Req"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/integrations/llm":{"get":{"tags":["integrations"],"summary":"Llm Status","description":"Reveal which agent backend is active and whether keys are present.","operationId":"llm_status_api_integrations_llm_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/integrations":{"get":{"tags":["integrations"],"summary":"List Integrations","description":"Real, live-probed connectors only. The broad scanner/OT/ITSM catalog from the\nsimulated rail tenant is intentionally NOT shown here as 'healthy' — only what is\ngenuinely wired in this POC is returned, with its real endpoint and live status.","operationId":"list_integrations_api_integrations_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/users":{"get":{"tags":["admin"],"summary":"List Users","operationId":"list_users_api_admin_users_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["admin"],"summary":"Add User","operationId":"add_user_api_admin_users_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/roles":{"get":{"tags":["admin"],"summary":"List Roles","operationId":"list_roles_api_admin_roles_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/users/{user_id}":{"patch":{"tags":["admin"],"summary":"Update User","operationId":"update_user_api_admin_users__user_id__patch","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["admin"],"summary":"Delete User","operationId":"delete_user_api_admin_users__user_id__delete","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/sso":{"get":{"tags":["admin"],"summary":"Sso Status","operationId":"sso_status_api_admin_sso_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/reset":{"post":{"tags":["admin"],"summary":"Reset","description":"Hot reset: truncate and reseed the demo tenant in place.\n\nWith ``{\"recreate_containers\": true}`` it ALSO reverts every lab target container\nto its vulnerable baseline (recreated from its image) — a true \"start from scratch\"\nso a fresh scan lights up all targets again, even ones patched in a prior demo.","operationId":"reset_api_admin_reset_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body","default":{}}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/inventory/scan":{"post":{"tags":["inventory"],"summary":"Run Scan","description":"Trigger the Inventory Insights agent to sweep the estate.","operationId":"run_scan_api_inventory_scan_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/inventory/summary":{"get":{"tags":["inventory"],"summary":"Summary","operationId":"summary_api_inventory_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/inventory/recommendations":{"get":{"tags":["inventory"],"summary":"List Recommendations","operationId":"list_recommendations_api_inventory_recommendations_get","parameters":[{"name":"kind","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kind"}},{"name":"severity","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Severity"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":2000,"default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/deck/export":{"get":{"tags":["deck"],"summary":"Export","description":"Original 12-slide leadership / investor deck.","operationId":"export_api_deck_export_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/deck/client":{"get":{"tags":["deck"],"summary":"Export Client","description":"Client-facing 10-slide deck for CSX. No time commitments, plain-language framing.","operationId":"export_client_api_deck_client_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/feeds/kev/status":{"get":{"tags":["feeds"],"summary":"Kev Status","description":"Where is the KEV catalog being loaded from, when was it last refreshed.","operationId":"kev_status_api_feeds_kev_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/feeds/kev/sync":{"post":{"tags":["feeds"],"summary":"Kev Sync","description":"The big demo button.\n\n1. Pull the real CISA KEV catalog (live → cache → bundled snapshot).\n2. Match every KEV entry against the local asset inventory by vendor + product.\n3. Optionally drive a bounded number of matched findings through the 12 agents.\n\nReturns the match summary so the console can render it live.","operationId":"kev_sync_api_feeds_kev_sync_post","parameters":[{"name":"drive","in":"query","required":false,"schema":{"type":"boolean","description":"Also drive matches through the agent pipeline","default":true,"title":"Drive"},"description":"Also drive matches through the agent pipeline"},{"name":"max_findings","in":"query","required":false,"schema":{"type":"integer","maximum":100,"default":12,"title":"Max Findings"}},{"name":"max_per_match","in":"query","required":false,"schema":{"type":"integer","maximum":20,"default":3,"title":"Max Per Match"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/feeds/kev/sync_live":{"post":{"tags":["feeds"],"summary":"Kev Sync Live","description":"Force a live fetch from CISA (ignores cache + snapshot).","operationId":"kev_sync_live_api_feeds_kev_sync_live_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/feeds/kev/matches":{"get":{"tags":["feeds"],"summary":"List Kev Findings","description":"Findings that were created from a KEV match (source_scanner = cisa_kev).","operationId":"list_kev_findings_api_feeds_kev_matches_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/poc/scan":{"post":{"tags":["poc"],"summary":"Run Scan","description":"Trigger a real scan + agent pipeline. Async by default so the UI stays snappy.","operationId":"run_scan_api_poc_scan_post","parameters":[{"name":"target","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target"}},{"name":"background","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Background"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/poc/rollback/{plan_id}":{"post":{"tags":["poc"],"summary":"Rollback","description":"Roll a remediated host back to its previous version. RBAC: security/admin only.\nRecords who rolled back + their comment, then re-scans (CVE returns).","operationId":"rollback_api_poc_rollback__plan_id__post","parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/poc/scan/status":{"get":{"tags":["poc"],"summary":"Scan Status","description":"Live scan progress so the console can WATCH the authenticated scan host-by-host.","operationId":"scan_status_api_poc_scan_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/poc/health":{"get":{"tags":["poc"],"summary":"Health","description":"Live health of the real lab connectors — drives the Integrations screen.","operationId":"health_api_poc_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/poc/estate":{"get":{"tags":["poc"],"summary":"Estate","description":"Per-container asset inventory + remediation state. Vulnerabilities are shown\nONLY from real scan results in the DB — a host is \"not scanned\" until a real\n/api/poc/scan has run against it. No CVEs are surfaced pre-scan.","operationId":"estate_api_poc_estate_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/poc/inspect/{target}":{"get":{"tags":["poc"],"summary":"Inspect","description":"Real introspection of one container — OS, installed version, packages, CVEs,\neach annotated with its authoritative source (NVD / CISA KEV / FIRST EPSS).","operationId":"inspect_api_poc_inspect__target__get","parameters":[{"name":"target","in":"path","required":true,"schema":{"type":"string","title":"Target"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/poc/cve-sources":{"get":{"tags":["poc"],"summary":"Cve Sources","description":"Where our CVE data comes from + live verification status — answers 'is it real?'.","operationId":"cve_sources_api_poc_cve_sources_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/poc/targets":{"get":{"tags":["poc"],"summary":"List Targets","description":"Current POC target configuration (from the scanner's shared CVE map).","operationId":"list_targets_api_poc_targets_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["poc"],"summary":"Add Target","description":"Register a new scan target through the admin tool — scanner picks it up next scan.","operationId":"add_target_api_poc_targets_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/poc/targets/{name}":{"delete":{"tags":["poc"],"summary":"Remove Target","operationId":"remove_target_api_poc_targets__name__delete","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/poc/containers":{"get":{"tags":["poc"],"summary":"Containers","description":"Live `docker ps` — proof the lab is real running containers, from the daemon.","operationId":"containers_api_poc_containers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/poc/terminal/{target}":{"get":{"tags":["poc"],"summary":"Terminal","description":"Run a safe preset command INSIDE the real container via docker exec — real output.","operationId":"terminal_api_poc_terminal__target__get","parameters":[{"name":"target","in":"path","required":true,"schema":{"type":"string","title":"Target"}},{"name":"cmd","in":"query","required":false,"schema":{"type":"string","default":"os","title":"Cmd"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/poc/status":{"get":{"tags":["poc"],"summary":"Status","operationId":"status_api_poc_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/auth/users":{"get":{"tags":["auth"],"summary":"List Login Users","description":"The demo users you can log in as (for the login screen) — real DB rows.","operationId":"list_login_users_api_auth_users_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/auth/login":{"post":{"tags":["auth"],"summary":"Login","operationId":"login_api_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/catalog/status":{"get":{"tags":["catalog"],"summary":"Status","operationId":"status_api_catalog_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/catalog/sync":{"post":{"tags":["catalog"],"summary":"Sync","operationId":"sync_api_catalog_sync_post","parameters":[{"name":"background","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Background"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/catalog":{"get":{"tags":["catalog"],"summary":"List Catalog","description":"Search/filter the master catalog. Each row notes whether it's seen in your estate.","operationId":"list_catalog_api_catalog_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"kev","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Kev"}},{"name":"ransomware","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Ransomware"}},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}