{"openapi":"3.1.0","info":{"title":"Pencheff API","description":"Pentest-as-a-Service HTTP API\n\n**Authenticating in this page:** click **Authorize**, paste a Pencheff API key (`pcf_live_…`, created at `app.pencheff.com/settings/api-keys`) into **PencheffApiKey**, and (only for org-scoped keys) set **WorkspaceId** to a workspace UUID. Then use **Try it out** on any endpoint.","version":"0.1.0"},"paths":{"/auth/signup":{"post":{"tags":["auth"],"summary":"Signup","operationId":"signup_auth_signup_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenPair"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/login":{"post":{"tags":["auth"],"summary":"Login","operationId":"login_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenPair"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/refresh":{"post":{"tags":["auth"],"summary":"Refresh","operationId":"refresh_auth_refresh_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefreshRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenPair"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/desktop-bridge":{"post":{"tags":["auth"],"summary":"Desktop Bridge","description":"Exchange a Clerk session JWT for a long-lived native JWT pair.\n\nPencheff Studio's loopback OAuth flow opens the web at\n/oauth/desktop-bridge; that page completes Clerk sign-in, then POSTs\nhere with the user's Clerk session JWT. We re-issue a native access\n+ refresh pair the Mac app stores in Keychain and uses for every\nsubsequent API call. Refresh works via /auth/refresh, which already\nvalidates native JWTs after the deps.py fallback.\n\nManual try/except (rather than ``Depends(get_current_user)``) so the\nbridge page surfaces the real failure cause — bare 500s on this\nendpoint are useless to debug remotely.","operationId":"desktop_bridge_auth_desktop_bridge_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenPair"}}}}}}},"/auth/me":{"get":{"tags":["auth"],"summary":"Me","operationId":"me_auth_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Me"}}}}}}},"/auth/oauth/google/start":{"get":{"tags":["auth"],"summary":"Google Start","operationId":"google_start_auth_oauth_google_start_get","parameters":[{"name":"desktop_redirect","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Desktop Redirect"}},{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/oauth/google/callback":{"get":{"tags":["auth"],"summary":"Google Callback","operationId":"google_callback_auth_oauth_google_callback_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/orgs":{"get":{"tags":["orgs"],"summary":"List My Orgs","operationId":"list_my_orgs_orgs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/OrgOut"},"type":"array","title":"Response List My Orgs Orgs Get"}}}}}},"post":{"tags":["orgs"],"summary":"Create Org","operationId":"create_org_orgs_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/orgs/{org_id}":{"get":{"tags":["orgs"],"summary":"Get Org","operationId":"get_org_orgs__org_id__get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["orgs"],"summary":"Update Org","operationId":"update_org_orgs__org_id__patch","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["orgs"],"summary":"Delete Org","operationId":"delete_org_orgs__org_id__delete","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/orgs/{org_id}/members":{"get":{"tags":["orgs"],"summary":"List Members","operationId":"list_members_orgs__org_id__members_get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/MemberOut"},"title":"Response List Members Orgs  Org Id  Members Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/orgs/{org_id}/members/{user_id}":{"patch":{"tags":["orgs"],"summary":"Update Member Role","operationId":"update_member_role_orgs__org_id__members__user_id__patch","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberRoleUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["orgs"],"summary":"Remove Member","operationId":"remove_member_orgs__org_id__members__user_id__delete","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/orgs/{org_id}/invites":{"post":{"tags":["orgs"],"summary":"Create Invite","operationId":"create_invite_orgs__org_id__invites_post","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InviteCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InviteOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["orgs"],"summary":"List Invites","operationId":"list_invites_orgs__org_id__invites_get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/InviteOut"},"title":"Response List Invites Orgs  Org Id  Invites Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/llm-providers/catalog":{"get":{"tags":["llm-providers"],"summary":"Get Catalog","operationId":"get_catalog_llm_providers_catalog_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Catalog Llm Providers Catalog Get"}}}}}}},"/llm-providers":{"get":{"tags":["llm-providers"],"summary":"List Providers","operationId":"list_providers_llm_providers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/LlmProviderOut"},"type":"array","title":"Response List Providers Llm Providers Get"}}}}}},"post":{"tags":["llm-providers"],"summary":"Create Provider","operationId":"create_provider_llm_providers_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LlmProviderCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LlmProviderOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/llm-providers/{provider_id}":{"patch":{"tags":["llm-providers"],"summary":"Update Provider","operationId":"update_provider_llm_providers__provider_id__patch","parameters":[{"name":"provider_id","in":"path","required":true,"schema":{"type":"string","title":"Provider Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LlmProviderUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LlmProviderOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["llm-providers"],"summary":"Delete Provider","operationId":"delete_provider_llm_providers__provider_id__delete","parameters":[{"name":"provider_id","in":"path","required":true,"schema":{"type":"string","title":"Provider Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/llm-providers/{provider_id}/activate":{"post":{"tags":["llm-providers"],"summary":"Activate Provider","operationId":"activate_provider_llm_providers__provider_id__activate_post","parameters":[{"name":"provider_id","in":"path","required":true,"schema":{"type":"string","title":"Provider Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LlmProviderOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/llm-providers/deactivate":{"post":{"tags":["llm-providers"],"summary":"Deactivate Provider","operationId":"deactivate_provider_llm_providers_deactivate_post","responses":{"204":{"description":"Successful Response"}}}},"/llm-providers/{provider_id}/test":{"post":{"tags":["llm-providers"],"summary":"Test Provider","operationId":"test_provider_llm_providers__provider_id__test_post","parameters":[{"name":"provider_id","in":"path","required":true,"schema":{"type":"string","title":"Provider Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Test Provider Llm Providers  Provider Id  Test Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/invites/{token}":{"get":{"tags":["invites"],"summary":"Lookup Invite","operationId":"lookup_invite_invites__token__get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InviteOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/invites/{token}/accept":{"post":{"tags":["invites"],"summary":"Accept Invite","operationId":"accept_invite_invites__token__accept_post","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/workspaces":{"post":{"tags":["workspaces"],"summary":"Create Workspace","operationId":"create_workspace_workspaces_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["workspaces"],"summary":"List Workspaces","operationId":"list_workspaces_workspaces_get","parameters":[{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WorkspaceOut"},"title":"Response List Workspaces Workspaces Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/workspaces/{workspace_id}":{"get":{"tags":["workspaces"],"summary":"Get Workspace","operationId":"get_workspace_workspaces__workspace_id__get","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["workspaces"],"summary":"Update Workspace","operationId":"update_workspace_workspaces__workspace_id__patch","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["workspaces"],"summary":"Delete Workspace","operationId":"delete_workspace_workspaces__workspace_id__delete","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/workspaces/{workspace_id}/members":{"get":{"tags":["workspaces"],"summary":"List Workspace Members","description":"List org members visible to the active user. Powers the\nrecipient-picker dropdown for commission-email and digest UIs.\n\nWorkspaces inherit membership from their parent Org — we expose\nevery OrgMember of the workspace's org as a candidate recipient.","operationId":"list_workspace_members_workspaces__workspace_id__members_get","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WorkspaceMemberOut"},"title":"Response List Workspace Members Workspaces  Workspace Id  Members Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/api-keys/scopes":{"get":{"tags":["api-keys"],"summary":"List Scopes","description":"Return the full scope catalog so the dashboard can render a picker.","operationId":"list_scopes_api_v1_api_keys_scopes_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Scopes Api V1 Api Keys Scopes Get"}}}}}}},"/api/v1/api-keys":{"get":{"tags":["api-keys"],"summary":"List Keys","operationId":"list_keys_api_v1_api_keys_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ApiKeyOut"},"type":"array","title":"Response List Keys Api V1 Api Keys Get"}}}}}},"post":{"tags":["api-keys"],"summary":"Create Key","operationId":"create_key_api_v1_api_keys_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyCreated"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/api-keys/{key_id}":{"patch":{"tags":["api-keys"],"summary":"Update Key","operationId":"update_key_api_v1_api_keys__key_id__patch","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["api-keys"],"summary":"Revoke Key","operationId":"revoke_key_api_v1_api_keys__key_id__delete","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/targets":{"post":{"tags":["targets"],"summary":"Create Target","operationId":"create_target_targets_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TargetCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TargetOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["targets"],"summary":"List Targets","operationId":"list_targets_targets_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Substring search on name/base_url","title":"Q"},"description":"Substring search on name/base_url"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TargetOut"},"title":"Response List Targets Targets Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/targets/llm/model-catalog/preview":{"post":{"tags":["targets"],"summary":"Preview Llm Model Catalog","operationId":"preview_llm_model_catalog_targets_llm_model_catalog_preview_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LlmModelCatalogRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LlmModelCatalogOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/targets/{target_id}":{"get":{"tags":["targets"],"summary":"Get Target","operationId":"get_target_targets__target_id__get","parameters":[{"name":"target_id","in":"path","required":true,"schema":{"type":"string","title":"Target Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TargetOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["targets"],"summary":"Update Target","operationId":"update_target_targets__target_id__patch","parameters":[{"name":"target_id","in":"path","required":true,"schema":{"type":"string","title":"Target Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TargetUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TargetOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["targets"],"summary":"Delete Target","operationId":"delete_target_targets__target_id__delete","parameters":[{"name":"target_id","in":"path","required":true,"schema":{"type":"string","title":"Target Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/scans":{"post":{"tags":["scans"],"summary":"Start Scan","operationId":"start_scan_scans_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["scans"],"summary":"List Scans","operationId":"list_scans_scans_get","parameters":[{"name":"target_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ScanOut"},"title":"Response List Scans Scans Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/scans/ai-quota":{"get":{"tags":["scans"],"summary":"Scan Ai Quota","description":"Pre-flight scan-AI allowance for the commission modal. The 'Use AI for\nthis scan' toggle is force-disabled when ``ai_available`` is False —\neither the org's plan has no AI access or its monthly AI quota is spent.","operationId":"scan_ai_quota_scans_ai_quota_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanAiQuotaOut"}}}}}}},"/scans/{scan_id}":{"get":{"tags":["scans"],"summary":"Get Scan","operationId":"get_scan_scans__scan_id__get","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["scans"],"summary":"Delete Scan","operationId":"delete_scan_scans__scan_id__delete","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/scans/{scan_id}/linked-repos":{"get":{"tags":["scans"],"summary":"Get Linked Repos","description":"Repos attached to this scan's URL target.\n\nThe URL scan no longer mixes SAST findings into its own results —\ninstead, this endpoint returns the linked repo IDs so the UI can\nrender deep-links to ``/repos/{id}`` (where the repo's own SAST/SCA\nfindings live).","operationId":"get_linked_repos_scans__scan_id__linked_repos_get","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response Get Linked Repos Scans  Scan Id  Linked Repos Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/scans/{scan_id}/llm-transcripts":{"get":{"tags":["scans"],"summary":"Get Llm Transcripts","description":"Return the per-probe transcript file for an LLM red-team scan.\n\nThe scan runner writes one JSONL line per probe (full request,\nfull response, verdict, verdict_reason, latency, tokens, …) to\n``$TMPDIR/pencheff-llm-transcripts/<scan_id>/probes.jsonl``. This\nendpoint streams that file back to authorised callers.\n\n``format=jsonl`` (default) returns the raw JSONL stream.\n``format=json`` returns a single JSON array — convenient for\nad-hoc inspection in the browser.","operationId":"get_llm_transcripts_scans__scan_id__llm_transcripts_get","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","pattern":"^(jsonl|json)$","default":"jsonl","title":"Format"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/scans/{scan_id}/threat-model":{"get":{"tags":["scans"],"summary":"Get Scan Threat Model","description":"Return the persisted STRIDE / DREAD threat model attached to a scan.\n\nThe dispatcher ties every deep-profile scan (and any scan with an\nexplicit container) to a persisted model. ``summary.threat_model_source``\non the scan row records which path resolved the model:\n\n  * ``engagement`` / ``auto_engagement`` — model is persisted; this\n    endpoint returns it verbatim.\n  * ``fly_by`` — model lives only on ``summary.threat_model_bias`` for\n    module priority; this endpoint returns 404 since there is nothing\n    durable to fetch.\n\nThe response shape intentionally surfaces ``threat_model`` and\n``threat_model_updated_at`` only — internal storage details (which\ncontainer row owns it, retention policy, members) never leak through\nthis scan-scoped endpoint.","operationId":"get_scan_threat_model_scans__scan_id__threat_model_get","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Scan Threat Model Scans  Scan Id  Threat Model Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/scans/{scan_id}/compliance":{"get":{"tags":["scans"],"summary":"Get Scan Compliance","description":"Return the per-scan compliance rollup for a URL or LLM scan.\n\nMirrors ``GET /scans/{id}/threat-model`` in shape and semantics but\nfans every Finding out across the framework set that matches the\ntarget's kind:\n\n* ``url`` targets → OWASP Top 10, PCI-DSS 4.0, NIST 800-53 Rev 5,\n  SOC 2, ISO 27001:2022, HIPAA.\n* ``llm`` targets → OWASP LLM Top 10 (2025), MITRE ATLAS,\n  NIST AI Risk Management Framework, EU AI Act.\n\nRepository scans use ``GET /repos/scans/{id}/compliance`` instead;\nthe rollup model is the same but reads from ``repo_findings``.\n\nThe response shape is documented in\n``services.compliance.build_compliance_rollup`` and is the contract\nconsumed by the web UI at ``/scans/[id]/compliance`` and by the\nDOCX/Markdown report generator's compliance appendix.","operationId":"get_scan_compliance_scans__scan_id__compliance_get","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Scan Compliance Scans  Scan Id  Compliance Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/scans/{scan_id}/llm-traces":{"get":{"tags":["scans"],"summary":"List Llm Traces","description":"Return every recorded LLM call for this scan in chronological order.\n\nEach row corresponds to one chat-completions round-trip made by a\nswarm agent (ReconAgent, a breaker, or ChainAgent). Rows are\nordered by creation time so the caller can replay the agent's\nreasoning turn-by-turn.\n\nReturns 404 if the scan does not belong to the caller's workspace.\nReturns an empty ``traces`` list for scans that predate LLM trace\npersistence, or for scans where the swarm was not enabled.","operationId":"list_llm_traces_scans__scan_id__llm_traces_get","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Llm Traces Scans  Scan Id  Llm Traces Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/scans/{scan_id}/evidence/{finding_id}.png":{"get":{"tags":["scans"],"summary":"Get Evidence Screenshot","description":"Serve an evidence screenshot captured by EvidenceCaptureAgent or\nAdminAccessAgent for a specific finding.\n\nAuthentication and workspace-scoping are enforced: the scan must\nbelong to the caller's active workspace. ``finding_id`` is validated\nto contain only URL-safe characters to prevent path traversal.","operationId":"get_evidence_screenshot_scans__scan_id__evidence__finding_id__png_get","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}},{"name":"finding_id","in":"path","required":true,"schema":{"type":"string","title":"Finding Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/scans/{a}/compare/{b}":{"get":{"tags":["scans"],"summary":"Compare Scans","description":"Compare two scans of the same workspace.\n\nReturns regressions / fixes / common-failures plus per-side\nsummaries. The diff key is stable (endpoint + parameter +\ntechnique + title), so re-running the same suite against the\nsame target produces zero regressions when nothing changed.","operationId":"compare_scans_scans__a__compare__b__get","parameters":[{"name":"a","in":"path","required":true,"schema":{"type":"string","title":"A"}},{"name":"b","in":"path","required":true,"schema":{"type":"string","title":"B"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Compare Scans Scans  A  Compare  B  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/scans/{scan_id}/validate":{"post":{"tags":["scans"],"summary":"Validate Scan","operationId":"validate_scan_scans__scan_id__validate_post","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}},{"name":"mode","in":"query","required":false,"schema":{"type":"string","default":"standard","title":"Mode"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"type":"object","additionalProperties":true},{"type":"null"}],"title":"Body"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/scans/{scan_id}/stream":{"get":{"tags":["scans"],"summary":"Stream Scan","operationId":"stream_scan_scans__scan_id__stream_get","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/scans/{scan_id}/share":{"post":{"tags":["share"],"summary":"Create Share","operationId":"create_share_scans__scan_id__share_post","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}},{"name":"ttl_seconds","in":"query","required":false,"schema":{"type":"integer","maximum":7776000,"minimum":60,"default":604800,"title":"Ttl Seconds"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Create Share Scans  Scan Id  Share Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/share/llm/{token}":{"get":{"tags":["share"],"summary":"Render Share","operationId":"render_share_share_llm__token__get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}},{"name":"download","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"html | markdown | json","title":"Download"},"description":"html | markdown | json"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/findings":{"get":{"tags":["findings"],"summary":"List Findings","operationId":"list_findings_findings_get","parameters":[{"name":"scan_id","in":"query","required":true,"schema":{"type":"string","title":"Scan Id"}},{"name":"severity","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Severity"}},{"name":"include_suppressed","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Include Suppressed"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FindingOut"},"title":"Response List Findings Findings Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/findings/{finding_id}":{"get":{"tags":["findings"],"summary":"Get Finding","operationId":"get_finding_findings__finding_id__get","parameters":[{"name":"finding_id","in":"path","required":true,"schema":{"type":"string","title":"Finding Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindingOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/findings/{finding_id}/triage":{"post":{"tags":["findings"],"summary":"Triage","description":"Triage 2.0 — exploitability walkthrough.\n\nIdempotent: cached in ``finding.ai_triage`` after the first\nsuccessful call. Pass ``force=true`` to regenerate (e.g. when the\nunderlying evidence has been updated by a recheck).\n\nPro-tier feature; gated through ``org_has_ai``.","operationId":"triage_findings__finding_id__triage_post","parameters":[{"name":"finding_id","in":"path","required":true,"schema":{"type":"string","title":"Finding Id"}},{"name":"force","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Force"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindingOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/findings/{finding_id}/recheck":{"post":{"tags":["findings"],"summary":"Recheck","operationId":"recheck_findings__finding_id__recheck_post","parameters":[{"name":"finding_id","in":"path","required":true,"schema":{"type":"string","title":"Finding Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindingOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/findings/{finding_id}/status":{"post":{"tags":["findings"],"summary":"Update Status","operationId":"update_status_findings__finding_id__status_post","parameters":[{"name":"finding_id","in":"path","required":true,"schema":{"type":"string","title":"Finding Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindingOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/findings/{finding_id}/verify-with-humans":{"post":{"tags":["findings"],"summary":"Verify With Humans","description":"Submit a finding to a partner pentest platform for human triage.\n\nReuses the Phase 1.2 ``integration_dispatch`` formatter pipeline —\nthe partner sees a normal ``finding_new`` event for this single\nfinding. When the triager confirms upstream, their platform's\nwebhook calls back into ``POST /findings/{id}/verify-callback``,\nwhich flips the finding's ``verification_status`` to\n``true_positive``.","operationId":"verify_with_humans_findings__finding_id__verify_with_humans_post","parameters":[{"name":"finding_id","in":"path","required":true,"schema":{"type":"string","title":"Finding Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/_VerifyWithHumansBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/_VerifyWithHumansAck"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/findings/{finding_id}/verify-callback":{"post":{"tags":["findings"],"summary":"Verify Callback","description":"Partner-side callback — flips a finding's verification state\nbased on the triager's verdict.\n\nMapping:\n\n* ``confirmed``       → ``verification_status = true_positive``\n* ``duplicate``       → suppressed with reason ``duplicate``\n* ``informative``     → ``verification_status = false_positive``\n* ``not-applicable``  → suppressed with reason ``out_of_scope``","operationId":"verify_callback_findings__finding_id__verify_callback_post","parameters":[{"name":"finding_id","in":"path","required":true,"schema":{"type":"string","title":"Finding Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/_VerifyCallbackBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindingOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/findings/{finding_id}/suppress":{"post":{"tags":["findings"],"summary":"Suppress","operationId":"suppress_findings__finding_id__suppress_post","parameters":[{"name":"finding_id","in":"path","required":true,"schema":{"type":"string","title":"Finding Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuppressRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindingOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/findings/{finding_id}/unsuppress":{"post":{"tags":["findings"],"summary":"Unsuppress","operationId":"unsuppress_findings__finding_id__unsuppress_post","parameters":[{"name":"finding_id","in":"path","required":true,"schema":{"type":"string","title":"Finding Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindingOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/unified-findings":{"get":{"tags":["unified-findings"],"summary":"List Unified Findings","operationId":"list_unified_findings_unified_findings_get","parameters":[{"name":"target_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Restrict to findings that touch this target.","title":"Target Id"},"description":"Restrict to findings that touch this target."},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Filter by source kind: sast | dast | sca | iac | secret. Repeat the param to combine.","title":"Source"},"description":"Filter by source kind: sast | dast | sca | iac | secret. Repeat the param to combine."},{"name":"severity","in":"query","required":false,"schema":{"anyOf":[{"enum":["critical","high","medium","low","info"],"type":"string"},{"type":"null"}],"title":"Severity"}},{"name":"reachability","in":"query","required":false,"schema":{"anyOf":[{"enum":["exploited","reachable","present","unknown"],"type":"string"},{"type":"null"}],"title":"Reachability"}},{"name":"include_suppressed","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Suppressed"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnifiedFindingsPage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/security-lake/findings":{"get":{"tags":["security-lake"],"summary":"List Findings","operationId":"list_findings_security_lake_findings_get","parameters":[{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"sast | dast | sca | iac | secret","title":"Source"},"description":"sast | dast | sca | iac | secret"},{"name":"severity_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":6,"minimum":0},{"type":"null"}],"title":"Severity Id"}},{"name":"status_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"title":"Status Id"}},{"name":"asset_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asset Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LakeFindingsPage"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/security-lake/trends":{"get":{"tags":["security-lake"],"summary":"Get Trends","operationId":"get_trends_security_lake_trends_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/LakeTrendPoint"},"type":"array","title":"Response Get Trends Security Lake Trends Get"}}}}}}},"/security-lake/correlate":{"get":{"tags":["security-lake"],"summary":"Correlate","operationId":"correlate_security_lake_correlate_get","parameters":[{"name":"min_assets","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":2,"title":"Min Assets"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LakeCorrelation"},"title":"Response Correlate Security Lake Correlate Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/security-lake/export":{"get":{"tags":["security-lake"],"summary":"Export","description":"Mediated, org-scoped OCSF export. NDJSON for SIEMs; Parquet for lakes.","operationId":"export_security_lake_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"enum":["ndjson","parquet"],"type":"string","default":"ndjson","title":"Format"}},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"sast | dast | sca | iac | secret","title":"Source"},"description":"sast | dast | sca | iac | secret"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/security-lake/destination":{"get":{"tags":["security-lake"],"summary":"Get Destination","operationId":"get_destination_security_lake_destination_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/LakeDestinationOut"},{"type":"null"}],"title":"Response Get Destination Security Lake Destination Get"}}}}}},"put":{"tags":["security-lake"],"summary":"Put Destination","operationId":"put_destination_security_lake_destination_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LakeDestinationIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LakeDestinationOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["security-lake"],"summary":"Delete Destination","operationId":"delete_destination_security_lake_destination_delete","responses":{"204":{"description":"Successful Response"}}}},"/security-lake/destination/test":{"post":{"tags":["security-lake"],"summary":"Test Destination","operationId":"test_destination_security_lake_destination_test_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LakeDestinationOut"}}}}}}},"/scans/{scan_id}/reports":{"post":{"tags":["reports"],"summary":"Create Report","operationId":"create_report_scans__scan_id__reports_post","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["reports"],"summary":"List Reports","operationId":"list_reports_scans__scan_id__reports_get","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ReportOut"},"title":"Response List Reports Scans  Scan Id  Reports Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/reports/{report_id}":{"get":{"tags":["reports"],"summary":"Get Report","operationId":"get_report_reports__report_id__get","parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/reports/{report_id}/download":{"get":{"tags":["reports"],"summary":"Download Report","operationId":"download_report_reports__report_id__download_get","parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/billing/checkout":{"post":{"tags":["billing"],"summary":"Create Checkout","operationId":"create_checkout_billing_checkout_post","parameters":[{"name":"plan","in":"query","required":true,"schema":{"type":"string","title":"Plan"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/billing/webhook":{"post":{"tags":["billing"],"summary":"Webhook","operationId":"webhook_billing_webhook_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/schedules":{"get":{"tags":["schedules"],"summary":"List Schedules","operationId":"list_schedules_schedules_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ScheduleOut"},"type":"array","title":"Response List Schedules Schedules Get"}}}}}},"post":{"tags":["schedules"],"summary":"Create Schedule","operationId":"create_schedule_schedules_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduleCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduleOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/schedules/{schedule_id}":{"get":{"tags":["schedules"],"summary":"Get Schedule","operationId":"get_schedule_schedules__schedule_id__get","parameters":[{"name":"schedule_id","in":"path","required":true,"schema":{"type":"string","title":"Schedule Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduleOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["schedules"],"summary":"Update Schedule","operationId":"update_schedule_schedules__schedule_id__patch","parameters":[{"name":"schedule_id","in":"path","required":true,"schema":{"type":"string","title":"Schedule Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduleUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduleOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["schedules"],"summary":"Delete Schedule","operationId":"delete_schedule_schedules__schedule_id__delete","parameters":[{"name":"schedule_id","in":"path","required":true,"schema":{"type":"string","title":"Schedule Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/assets":{"get":{"tags":["assets"],"summary":"List Workspace Assets","operationId":"list_workspace_assets_assets_get","parameters":[{"name":"asset_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asset Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AssetOut"},"title":"Response List Workspace Assets Assets Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/assets/discover":{"post":{"tags":["assets"],"summary":"Trigger Discovery","operationId":"trigger_discovery_assets_discover_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscoverBody"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Trigger Discovery Assets Discover Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/assets/{asset_id}":{"delete":{"tags":["assets"],"summary":"Remove Asset","operationId":"remove_asset_assets__asset_id__delete","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/integrations":{"get":{"tags":["integrations"],"summary":"List Integrations","operationId":"list_integrations_integrations_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/pencheff_api__routers__integrations__IntegrationOut"},"type":"array","title":"Response List Integrations Integrations Get"}}}}}},"post":{"tags":["integrations"],"summary":"Create Integration","operationId":"create_integration_integrations_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/pencheff_api__routers__integrations__IntegrationOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/integrations/{integration_id}":{"patch":{"tags":["integrations"],"summary":"Update Integration","operationId":"update_integration_integrations__integration_id__patch","parameters":[{"name":"integration_id","in":"path","required":true,"schema":{"type":"string","title":"Integration Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/pencheff_api__routers__integrations__IntegrationOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["integrations"],"summary":"Delete Integration","operationId":"delete_integration_integrations__integration_id__delete","parameters":[{"name":"integration_id","in":"path","required":true,"schema":{"type":"string","title":"Integration Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/integrations/{integration_id}/test":{"post":{"tags":["integrations"],"summary":"Test Integration","description":"Send a dummy findings batch through the integration to confirm connectivity.","operationId":"test_integration_integrations__integration_id__test_post","parameters":[{"name":"integration_id","in":"path","required":true,"schema":{"type":"string","title":"Integration Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Test Integration Integrations  Integration Id  Test Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sboms/{scan_id}":{"get":{"tags":["sboms"],"summary":"List Sboms","operationId":"list_sboms_sboms__scan_id__get","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SbomOut"},"title":"Response List Sboms Sboms  Scan Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sboms/{scan_id}/{sbom_id}":{"get":{"tags":["sboms"],"summary":"Get Sbom Detail","operationId":"get_sbom_detail_sboms__scan_id___sbom_id__get","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}},{"name":"sbom_id","in":"path","required":true,"schema":{"type":"string","title":"Sbom Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SbomDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dependencies/{scan_id}":{"get":{"tags":["dependencies"],"summary":"List Dependencies","operationId":"list_dependencies_dependencies__scan_id__get","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}},{"name":"vulnerable_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Vulnerable Only"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DependencyOut"},"title":"Response List Dependencies Dependencies  Scan Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/advisories/{advisory_id}":{"get":{"tags":["advisories"],"summary":"Get Advisory","operationId":"get_advisory_advisories__advisory_id__get","parameters":[{"name":"advisory_id","in":"path","required":true,"schema":{"type":"string","title":"Advisory Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdvisoryOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/advisories":{"get":{"tags":["advisories"],"summary":"List Advisories","operationId":"list_advisories_advisories_get","parameters":[{"name":"package","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":200,"title":"Package"}},{"name":"ecosystem","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":64,"title":"Ecosystem"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AdvisoryListItem"},"title":"Response List Advisories Advisories Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/registries/dockerhub":{"post":{"tags":["registries"],"summary":"Receive Dockerhub","operationId":"receive_dockerhub_registries_dockerhub_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/_Ack"}}}}}}},"/registries/ecr":{"post":{"tags":["registries"],"summary":"Receive Ecr","operationId":"receive_ecr_registries_ecr_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/_Ack"}}}}}}},"/registries/gcr":{"post":{"tags":["registries"],"summary":"Receive Gcr","operationId":"receive_gcr_registries_gcr_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/_Ack"}}}}}}},"/registries/acr":{"post":{"tags":["registries"],"summary":"Receive Acr","description":"Azure ACR uses Event Grid, which sends a one-time\n``SubscriptionValidation`` handshake that must echo the\n``validationCode``. We handle that here so the webhook\nsubscription completes setup without external help.","operationId":"receive_acr_registries_acr_post","parameters":[{"name":"aeg-event-type","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Aeg-Event-Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/_Ack"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/guardrails/metadata":{"get":{"tags":["guardrails"],"summary":"Get Guardrails Metadata","description":"Return the bits the editor needs without binding to a target.\n\nThe new-target form renders the same editor before a Target row\nexists, so it can't hit ``/targets/{id}/guardrails``. This endpoint\nserves the static metadata (enforcement matrix, presets) plus the\ncanonical default config the form should pre-fill with.","operationId":"get_guardrails_metadata_guardrails_metadata_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GuardrailsMetadataOut"}}}}}}},"/targets/{target_id}/guardrails":{"get":{"tags":["guardrails"],"summary":"Get Target Guardrails","operationId":"get_target_guardrails_targets__target_id__guardrails_get","parameters":[{"name":"target_id","in":"path","required":true,"schema":{"type":"string","title":"Target Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GuardrailsOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["guardrails"],"summary":"Put Target Guardrails","operationId":"put_target_guardrails_targets__target_id__guardrails_put","parameters":[{"name":"target_id","in":"path","required":true,"schema":{"type":"string","title":"Target Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GuardrailsIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GuardrailsOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/targets/{target_id}/firewall":{"get":{"tags":["guardrails"],"summary":"Get Target Firewall","operationId":"get_target_firewall_targets__target_id__firewall_get","parameters":[{"name":"target_id","in":"path","required":true,"schema":{"type":"string","title":"Target Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FirewallOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["guardrails"],"summary":"Put Target Firewall","operationId":"put_target_firewall_targets__target_id__firewall_put","parameters":[{"name":"target_id","in":"path","required":true,"schema":{"type":"string","title":"Target Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FirewallIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FirewallOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/scans/{scan_id}/recommended-guardrails":{"get":{"tags":["guardrails"],"summary":"Get Recommended Guardrails","operationId":"get_recommended_guardrails_scans__scan_id__recommended_guardrails_get","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecommendedGuardrailsOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/scans/{scan_id}/recommended-guardrails/apply":{"post":{"tags":["guardrails"],"summary":"Apply Recommended Guardrails","operationId":"apply_recommended_guardrails_scans__scan_id__recommended_guardrails_apply_post","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/_ApplyAck"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/proxy/{target_id}/v1/chat/completions":{"post":{"tags":["llm-proxy"],"summary":"Chat Completions Proxy","operationId":"chat_completions_proxy_proxy__target_id__v1_chat_completions_post","parameters":[{"name":"target_id","in":"path","required":true,"schema":{"type":"string","title":"Target Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/traces":{"post":{"tags":["observability-ingest"],"summary":"Ingest Traces","operationId":"ingest_traces_v1_traces_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/traces":{"get":{"tags":["traces"],"summary":"List Traces","operationId":"list_traces_traces_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"target_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TraceSummary"},"title":"Response List Traces Traces Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/traces/{trace_id}":{"get":{"tags":["traces"],"summary":"Get Trace","operationId":"get_trace_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":{"$ref":"#/components/schemas/TraceDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/memory/scan":{"post":{"tags":["memory-scan"],"summary":"Scan Memory Endpoint","operationId":"scan_memory_endpoint_v1_memory_scan_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemoryScanOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/proxy/start":{"post":{"tags":["proxy"],"summary":"Start Proxy","operationId":"start_proxy_proxy_start_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProxyStart"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProxyOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/proxy/{proxy_id}/stop":{"post":{"tags":["proxy"],"summary":"Stop Proxy","operationId":"stop_proxy_proxy__proxy_id__stop_post","parameters":[{"name":"proxy_id","in":"path","required":true,"schema":{"type":"string","title":"Proxy Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProxyOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/proxy/scan/{scan_id}":{"get":{"tags":["proxy"],"summary":"List Scan Proxies","operationId":"list_scan_proxies_proxy_scan__scan_id__get","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ProxyOut"},"title":"Response List Scan Proxies Proxy Scan  Scan Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/findings/{finding_id}/comments":{"post":{"tags":["findings"],"summary":"Add Comment","operationId":"add_comment_findings__finding_id__comments_post","parameters":[{"name":"finding_id","in":"path","required":true,"schema":{"type":"string","title":"Finding Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommentCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommentOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["findings"],"summary":"List Comments","operationId":"list_comments_findings__finding_id__comments_get","parameters":[{"name":"finding_id","in":"path","required":true,"schema":{"type":"string","title":"Finding Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CommentOut"},"title":"Response List Comments Findings  Finding Id  Comments Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/findings/{finding_id}/assign":{"post":{"tags":["findings"],"summary":"Assign Finding","operationId":"assign_finding_findings__finding_id__assign_post","parameters":[{"name":"finding_id","in":"path","required":true,"schema":{"type":"string","title":"Finding Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssignBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"string"},"title":"Response Assign Finding Findings  Finding Id  Assign Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/findings/{finding_id}/tags":{"post":{"tags":["findings"],"summary":"Add Tag","operationId":"add_tag_findings__finding_id__tags_post","parameters":[{"name":"finding_id","in":"path","required":true,"schema":{"type":"string","title":"Finding Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"string"},"title":"Response Add Tag Findings  Finding Id  Tags Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/findings/{finding_id}/tags/{tag}":{"delete":{"tags":["findings"],"summary":"Remove Tag","operationId":"remove_tag_findings__finding_id__tags__tag__delete","parameters":[{"name":"finding_id","in":"path","required":true,"schema":{"type":"string","title":"Finding Id"}},{"name":"tag","in":"path","required":true,"schema":{"type":"string","title":"Tag"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/repos/install-url":{"get":{"tags":["repos"],"summary":"Get Install Url","operationId":"get_install_url_repos_install_url_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InstallUrlOut"}}}}}}},"/repos/callback":{"get":{"tags":["repos"],"summary":"Github Callback","description":"GitHub redirects here after the user installs the app.","operationId":"github_callback_repos_callback_get","parameters":[{"name":"installation_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Installation Id"}},{"name":"setup_action","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Setup Action"}},{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/repos/integrations":{"get":{"tags":["repos"],"summary":"List Integrations","operationId":"list_integrations_repos_integrations_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/pencheff_api__routers__repos__IntegrationOut"},"type":"array","title":"Response List Integrations Repos Integrations Get"}}}}}}},"/repos/integrations/{integration_id}":{"delete":{"tags":["repos"],"summary":"Remove Integration","operationId":"remove_integration_repos_integrations__integration_id__delete","parameters":[{"name":"integration_id","in":"path","required":true,"schema":{"type":"string","title":"Integration Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/repos/integrations/{integration_id}/sync":{"post":{"tags":["repos"],"summary":"Sync Integration","operationId":"sync_integration_repos_integrations__integration_id__sync_post","parameters":[{"name":"integration_id","in":"path","required":true,"schema":{"type":"string","title":"Integration Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/RepositoryOut"},"title":"Response Sync Integration Repos Integrations  Integration Id  Sync Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/repos/local":{"post":{"tags":["repos"],"summary":"Register Local Repo","description":"Register a directory on the worker's filesystem as a scannable repo.\n\nThe path is stored verbatim — no clone, no copy. The Celery worker\nreads files in place when ``run_repo_scan`` runs. The worker process\nmust be able to ``os.path.isdir(local_path)``; in Docker setups,\nthat means the path has to be inside a bind-mounted volume.","operationId":"register_local_repo_repos_local_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocalRepoCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RepositoryOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/repos/github":{"post":{"tags":["repos"],"summary":"Connect Github Url","description":"Connect a GitHub repo by URL.\n\nTwo paths:\n\n* **Public** (``token`` omitted) — public repo, anonymous shallow clone.\n* **Private via PAT** (``token`` provided) — we validate the token\n  against the GitHub REST API, confirm it has read access to the\n  target, then encrypt + persist the token on the Repository row.\n  The scan task uses it as the ``x-access-token`` password for\n  ``git clone``.\n\nFor private repos, we authenticate the metadata fetch with the PAT.\nFor public repos we use the anonymous endpoint (which 404s on\nprivate/missing repos).","operationId":"connect_github_url_repos_github_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GithubUrlConnect"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RepositoryOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/repos/{repo_id}":{"delete":{"tags":["repos"],"summary":"Delete Repo","operationId":"delete_repo_repos__repo_id__delete","parameters":[{"name":"repo_id","in":"path","required":true,"schema":{"type":"string","title":"Repo Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["repos"],"summary":"Update Repo","operationId":"update_repo_repos__repo_id__patch","parameters":[{"name":"repo_id","in":"path","required":true,"schema":{"type":"string","title":"Repo Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RepositoryUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RepositoryOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["repos"],"summary":"Get Repo","operationId":"get_repo_repos__repo_id__get","parameters":[{"name":"repo_id","in":"path","required":true,"schema":{"type":"string","title":"Repo Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RepositoryOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/repos":{"get":{"tags":["repos"],"summary":"List Repos","operationId":"list_repos_repos_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Substring search on full_name","title":"Q"},"description":"Substring search on full_name"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/RepositoryOut"},"title":"Response List Repos Repos Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/repos/scans":{"get":{"tags":["repos"],"summary":"List All Workspace Repo Scans","operationId":"list_all_workspace_repo_scans_repos_scans_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/RepoScanOut"},"type":"array","title":"Response List All Workspace Repo Scans Repos Scans Get"}}}}}}},"/repos/{repo_id}/scan":{"post":{"tags":["repos"],"summary":"Start Scan","operationId":"start_scan_repos__repo_id__scan_post","parameters":[{"name":"repo_id","in":"path","required":true,"schema":{"type":"string","title":"Repo Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ScanRequest"},{"type":"null"}],"title":"Body"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RepoScanOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/repos/{repo_id}/scan/local":{"post":{"tags":["repos"],"summary":"Start Local Scan","description":"Open a desktop-driven scan row for a local-provider repo.\n\nUnlike ``/repos/{id}/scan``, this endpoint does **not** dispatch a\nCelery task — the desktop runs the scanners on its own machine and\nstreams findings back via ``/repos/scans/{scan_id}/ingest``. The row\nstarts in ``running`` state so it shows up in the scan history and\nblocks duplicate dispatches.","operationId":"start_local_scan_repos__repo_id__scan_local_post","parameters":[{"name":"repo_id","in":"path","required":true,"schema":{"type":"string","title":"Repo Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/LocalScanStartRequest"},{"type":"null"}],"title":"Body"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RepoScanOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/repos/scans/{scan_id}/ingest":{"post":{"tags":["repos"],"summary":"Ingest Local Scan","description":"Accept findings + optional SBOM from a desktop-driven scan and\nclose out the scan row. Only valid against scans created via the\n``/repos/{id}/scan/local`` endpoint (``trigger=='desktop_local'``);\ncloud-worker scans are owned by Celery and must not be hijacked.","operationId":"ingest_local_scan_repos_scans__scan_id__ingest_post","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocalScanIngestRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RepoScanOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/repos/{repo_id}/sbom":{"post":{"tags":["repos"],"summary":"Generate Repo Sbom","operationId":"generate_repo_sbom_repos__repo_id__sbom_post","parameters":[{"name":"repo_id","in":"path","required":true,"schema":{"type":"string","title":"Repo Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/RepoSbomRequest"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RepoSbomOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["repos"],"summary":"Get Repo Sbom","operationId":"get_repo_sbom_repos__repo_id__sbom_get","parameters":[{"name":"repo_id","in":"path","required":true,"schema":{"type":"string","title":"Repo Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RepoSbomOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/repos/{repo_id}/scans":{"get":{"tags":["repos"],"summary":"List Scans","operationId":"list_scans_repos__repo_id__scans_get","parameters":[{"name":"repo_id","in":"path","required":true,"schema":{"type":"string","title":"Repo Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/RepoScanOut"},"title":"Response List Scans Repos  Repo Id  Scans Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/repos/{repo_id}/trend":{"get":{"tags":["repos"],"summary":"Repo Trend","description":"Per-repository scan history with severity rollup per scan.\n\nPowers the trend dashboard at ``/repos/{id}/dashboard`` — TrendLine\nof total findings + SeverityStack of severity counts per scan.\n\nOne query for the scans, one aggregation for severity counts per\nscan_id (joined into Python dicts), one aggregation each for the\nopen and fixed totals. MTTR is best-effort: RepoFinding doesn't\ntrack a \"fixed_at\" column, so we use ``fix_status='merged'`` rows\nand infer the close timestamp from the most recent scan that no\nlonger contains a matching ``rule_id`` — too expensive to compute\non demand. We return ``None`` when we can't infer it; the frontend\nrenders a dash.","operationId":"repo_trend_repos__repo_id__trend_get","parameters":[{"name":"repo_id","in":"path","required":true,"schema":{"type":"string","title":"Repo Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":2,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RepoTrendOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/repos/scans/{scan_id}":{"get":{"tags":["repos"],"summary":"Get Scan","operationId":"get_scan_repos_scans__scan_id__get","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RepoScanOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["repos"],"summary":"Delete Scan","description":"Remove a repository scan and its findings.\n\nCascades through ORM relationships configured on ``RepoScan`` —\n``RepoFinding`` rows tied to the scan come along with it.","operationId":"delete_scan_repos_scans__scan_id__delete","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/repos/scans/{scan_id}/findings":{"get":{"tags":["repos"],"summary":"List Scan Findings","operationId":"list_scan_findings_repos_scans__scan_id__findings_get","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}},{"name":"severity","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Severity"}},{"name":"scanner","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scanner"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/RepoFindingOut"},"title":"Response List Scan Findings Repos Scans  Scan Id  Findings Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/repos/scans/{scan_id}/compliance":{"get":{"tags":["repos"],"summary":"Get Repo Scan Compliance","description":"Return the per-scan compliance rollup for a repository scan.\n\nMirrors ``GET /scans/{id}/compliance`` (URL / LLM scans) so the\nsame web UI component, JSON exporter, and report appendix can\nconsume any scan id without branching by target kind.\n\nRepoFinding rows do not carry an explicit ``category`` — the\nrollup service infers one from the scanner that produced the row\nplus a few well-known tokens in ``rule_id`` (xss / sql / ssrf /\ncrypto / secret / …). Frameworks emitted: OWASP Top 10, PCI-DSS,\nNIST 800-53, SOC 2, ISO 27001:2022, HIPAA.","operationId":"get_repo_scan_compliance_repos_scans__scan_id__compliance_get","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Repo Scan Compliance Repos Scans  Scan Id  Compliance Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/webhooks/github":{"post":{"tags":["webhooks"],"summary":"Github Webhook","operationId":"github_webhook_webhooks_github_post","parameters":[{"name":"x-hub-signature-256","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Hub-Signature-256"}},{"name":"x-github-event","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Github-Event"}}],"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"string"},"title":"Response Github Webhook Webhooks Github Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/findings/{kind}/{finding_id}/propose_fix":{"post":{"tags":["fix-proposals"],"summary":"Propose Fix","operationId":"propose_fix_findings__kind___finding_id__propose_fix_post","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","pattern":"^(sast|dast)$","title":"Kind"}},{"name":"finding_id","in":"path","required":true,"schema":{"type":"string","title":"Finding Id"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProposeFixRequest","default":{"allow_payg":false,"regenerate":false}}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FixProposalOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/findings/{kind}/{finding_id}/fix_proposal":{"get":{"tags":["fix-proposals"],"summary":"Get Latest Proposal","operationId":"get_latest_proposal_findings__kind___finding_id__fix_proposal_get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","pattern":"^(sast|dast)$","title":"Kind"}},{"name":"finding_id","in":"path","required":true,"schema":{"type":"string","title":"Finding Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/FixProposalOut"},{"type":"null"}],"title":"Response Get Latest Proposal Findings  Kind   Finding Id  Fix Proposal Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/fix-proposals/{proposal_id}":{"get":{"tags":["fix-proposals"],"summary":"Get Proposal","operationId":"get_proposal_fix_proposals__proposal_id__get","parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","title":"Proposal Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FixProposalOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["fix-proposals"],"summary":"Supersede Proposal","operationId":"supersede_proposal_fix_proposals__proposal_id__delete","parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","title":"Proposal Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/fix-proposals/{proposal_id}/apply":{"post":{"tags":["fix-proposals"],"summary":"Apply Proposal","operationId":"apply_proposal_fix_proposals__proposal_id__apply_post","parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","title":"Proposal Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApplyResultOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/fix-proposals/{proposal_id}/revert":{"post":{"tags":["fix-proposals"],"summary":"Revert Proposal Route","operationId":"revert_proposal_route_fix_proposals__proposal_id__revert_post","parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","title":"Proposal Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FixProposalOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/scans/{scan_id}/fix-all":{"post":{"tags":["fix-proposals"],"summary":"Fix All For Scan","description":"Enqueue a bulk fix across every open finding in this scan.\n\nReturns immediately with ``202 Accepted`` and a task id. Poll\n``GET /fix-tasks/{id}`` for progress + the final summary. Long\nbatches no longer time out at the reverse proxy because the\nactual proposing/applying happens in the Celery worker.","operationId":"fix_all_for_scan_scans__scan_id__fix_all_post","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkFixTaskAcceptedOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/repo-scans/{repo_scan_id}/fix-all":{"post":{"tags":["fix-proposals"],"summary":"Fix All For Repo Scan","description":"Repo-scan (SAST) variant of ``fix-all``. Same async pattern.","operationId":"fix_all_for_repo_scan_repo_scans__repo_scan_id__fix_all_post","parameters":[{"name":"repo_scan_id","in":"path","required":true,"schema":{"type":"string","title":"Repo Scan Id"}}],"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkFixTaskAcceptedOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/fix-tasks/latest":{"get":{"tags":["fix-proposals"],"summary":"Get Latest Bulk Fix Task","description":"Look up the most-recent bulk-fix task for a given scan or\nrepo-scan. Used by the frontend on mount so a refresh mid-run\nre-attaches to the live progress instead of showing a fresh\n\"Fix all findings\" button while the worker is still processing.\n\nReturns ``null`` when there's no active or recently-completed task\nfor this scope. \"Recently-completed\" means within 30 minutes —\nolder terminal tasks aren't surfaced because the user has already\nseen them and the UI shouldn't keep nagging about a job from\nyesterday.","operationId":"get_latest_bulk_fix_task_fix_tasks_latest_get","parameters":[{"name":"scan_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scan Id"}},{"name":"repo_scan_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Repo Scan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/BulkFixTaskStatusOut"},{"type":"null"}],"title":"Response Get Latest Bulk Fix Task Fix Tasks Latest Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/fix-tasks/{task_id}":{"get":{"tags":["fix-proposals"],"summary":"Get Bulk Fix Task","description":"Poll for status of an enqueued bulk fix.\n\nThe frontend hits this every ~3s after kicking off ``fix-all`` and\nrenders the same summary card as the old synchronous flow once\n``status`` is ``completed``.","operationId":"get_bulk_fix_task_fix_tasks__task_id__get","parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","title":"Task Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkFixTaskStatusOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/fix-tasks/{task_id}/cancel":{"post":{"tags":["fix-proposals"],"summary":"Cancel Bulk Fix Task","operationId":"cancel_bulk_fix_task_fix_tasks__task_id__cancel_post","parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","title":"Task Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkFixTaskStatusOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/usage/fix-llm":{"get":{"tags":["fix-proposals"],"summary":"Fix Llm Usage","operationId":"fix_llm_usage_usage_fix_llm_get","parameters":[{"name":"scan_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FixUsageOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/fix-tasks/agentic":{"post":{"tags":["agentic-fix"],"summary":"Start Agentic Run","description":"Open a new agentic fix run. Returns immediately with the row;\nthe Celery task picks it up asynchronously (for runtime=server),\nor the desktop client begins driving the loop (for runtime=desktop).","operationId":"start_agentic_run_fix_tasks_agentic_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StartAgenticRunRequest"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgenticRunOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/fix-tasks/agentic/latest":{"get":{"tags":["agentic-fix"],"summary":"Latest Agentic Run","description":"Return the most-recent run for the given scan / repo-scan, or\nnull. Used by the FixAllSheet on mount to re-attach to in-flight\nruns (so a refresh mid-execution shows live status, not a fresh\n\"Start\" button).","operationId":"latest_agentic_run_fix_tasks_agentic_latest_get","parameters":[{"name":"scan_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scan Id"}},{"name":"repo_scan_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Repo Scan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/AgenticRunOut"},{"type":"null"}],"title":"Response Latest Agentic Run Fix Tasks Agentic Latest Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/fix-tasks/agentic/usage":{"get":{"tags":["agentic-fix"],"summary":"Get Agentic Usage","description":"Snapshot of the workspace's current concurrency state + whether\na new run can start right now. Used by the FixAllSheet on mount to\nrender the \"N/M in-flight\" indicator and decide whether to dim the\nRun button.","operationId":"get_agentic_usage_fix_tasks_agentic_usage_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgenticUsageOut"}}}}}}},"/fix-tasks/agentic/{run_id}":{"get":{"tags":["agentic-fix"],"summary":"Get Agentic Run","operationId":"get_agentic_run_fix_tasks_agentic__run_id__get","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}},{"name":"step_limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Step Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgenticRunDetailOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/fix-tasks/agentic/{run_id}/cancel":{"post":{"tags":["agentic-fix"],"summary":"Cancel Agentic Run","operationId":"cancel_agentic_run_fix_tasks_agentic__run_id__cancel_post","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgenticRunOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/fix-tasks/agentic/{run_id}/step":{"post":{"tags":["agentic-fix"],"summary":"Ingest Agentic Step","description":"Insert a tool-call audit row from the desktop runtime.\n\nThe desktop drives its own tool dispatcher (see\n``pencheff-studio/.../LocalScan/Agent/DesktopAgentTools.swift``)\nand the proxy doesn't see individual tool calls — only the LLM\nrequests. This endpoint lets the desktop ship each tool dispatch\naudit row so the UI's progress stream + the AuditLog still see\nthem in real time.","operationId":"ingest_agentic_step_fix_tasks_agentic__run_id__step_post","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgenticStepIngestRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgenticStepOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/fix-tasks/agentic/{run_id}/finish":{"post":{"tags":["agentic-fix"],"summary":"Finish Agentic Run","description":"Terminal status update from the desktop runtime.\n\nIdempotent on already-terminal rows: re-finishing returns the\nexisting row unchanged so a flaky network retry doesn't 409.","operationId":"finish_agentic_run_fix_tasks_agentic__run_id__finish_post","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgenticFinishRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgenticRunOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/fix-tasks/agentic/{run_id}/stream":{"get":{"tags":["agentic-fix"],"summary":"Stream Agentic Run","description":"SSE stream of the run's tool-call steps + status changes.\n\nImplementation here is a polling loop over ``agentic_fix_steps``\nplus the run row's status. Cheap (1 query per 1.5s), and avoids\ncoupling to a pub/sub layer for v1. Switch to NOTIFY/LISTEN in a\nlater pass if the polling load shows up in profiles.","operationId":"stream_agentic_run_fix_tasks_agentic__run_id__stream_get","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/llm/proxy/agentic/messages":{"post":{"tags":["llm-proxy"],"summary":"Proxy Agentic Messages","description":"Forward a chat-completions request to Pencheff's configured\nbackend (Sarvam by default), persisting the resulting usage row\nagainst the supplied run.\n\nAuthorization: the caller must hold ``fix_proposals:write`` (same\nscope the agentic-fix POST endpoint uses). The active workspace\nmust own ``X-Agentic-Run-Id``; otherwise 404.\n\nBody: opaque to the proxy — passed straight through to the\nupstream chat-completions endpoint.","operationId":"proxy_agentic_messages_llm_proxy_agentic_messages_post","parameters":[{"name":"x-agentic-run-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Agentic-Run-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/engagements":{"post":{"tags":["engagements"],"summary":"Create Engagement","operationId":"create_engagement_engagements_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EngagementCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EngagementCreatedOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["engagements"],"summary":"List Engagements","operationId":"list_engagements_engagements_get","parameters":[{"name":"include_closed","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Closed"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EngagementOut"},"title":"Response List Engagements Engagements Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/engagements/{engagement_id}":{"get":{"tags":["engagements"],"summary":"Get Engagement","operationId":"get_engagement_engagements__engagement_id__get","parameters":[{"name":"engagement_id","in":"path","required":true,"schema":{"type":"string","title":"Engagement Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EngagementOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/engagements/{engagement_id}/close":{"post":{"tags":["engagements"],"summary":"Close Engagement","operationId":"close_engagement_engagements__engagement_id__close_post","parameters":[{"name":"engagement_id","in":"path","required":true,"schema":{"type":"string","title":"Engagement Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EngagementOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/engagements/{engagement_id}/pairing-code":{"post":{"tags":["engagements"],"summary":"Rotate Pairing Code","operationId":"rotate_pairing_code_engagements__engagement_id__pairing_code_post","parameters":[{"name":"engagement_id","in":"path","required":true,"schema":{"type":"string","title":"Engagement Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Rotate Pairing Code Engagements  Engagement Id  Pairing Code Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/engagements/{engagement_id}/findings/unified":{"get":{"tags":["engagements"],"summary":"Get Unified Findings","operationId":"get_unified_findings_engagements__engagement_id__findings_unified_get","parameters":[{"name":"engagement_id","in":"path","required":true,"schema":{"type":"string","title":"Engagement Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UnifiedFindingOut"},"title":"Response Get Unified Findings Engagements  Engagement Id  Findings Unified Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/engagements/{engagement_id}/threat-model":{"get":{"tags":["engagements"],"summary":"Get Threat Model","operationId":"get_threat_model_engagements__engagement_id__threat_model_get","parameters":[{"name":"engagement_id","in":"path","required":true,"schema":{"type":"string","title":"Engagement Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ThreatModelOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["engagements"],"summary":"Generate Engagement Threat Model","operationId":"generate_engagement_threat_model_engagements__engagement_id__threat_model_post","parameters":[{"name":"engagement_id","in":"path","required":true,"schema":{"type":"string","title":"Engagement Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ThreatModelGenerateIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ThreatModelOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["engagements"],"summary":"Replace Threat Model","operationId":"replace_threat_model_engagements__engagement_id__threat_model_put","parameters":[{"name":"engagement_id","in":"path","required":true,"schema":{"type":"string","title":"Engagement Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ThreatModelPatchIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ThreatModelOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["engagements"],"summary":"Clear Threat Model","operationId":"clear_threat_model_engagements__engagement_id__threat_model_delete","parameters":[{"name":"engagement_id","in":"path","required":true,"schema":{"type":"string","title":"Engagement Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ingest/extension/handshake":{"post":{"tags":["ingest"],"summary":"Handshake","description":"Exchange a one-time pairing code for the bound ingest token.\n\nThe extension UX is: user pastes the 8-character code, we return the\ntoken (which the extension stores) and the engagement_id it's bound to.","operationId":"handshake_ingest_extension_handshake_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IngestHandshake"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IngestHandshakeOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ingest/extension/batch":{"post":{"tags":["ingest"],"summary":"Ingest Batch","operationId":"ingest_batch_ingest_extension_batch_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IngestBatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IngestBatchOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/engagements/{engagement_id}/traffic":{"get":{"tags":["traffic"],"summary":"List Traffic","operationId":"list_traffic_engagements__engagement_id__traffic_get","parameters":[{"name":"engagement_id","in":"path","required":true,"schema":{"type":"string","title":"Engagement Id"}},{"name":"host","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Host"}},{"name":"method","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Method"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Status"}},{"name":"starred","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Starred"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"default":200,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TrafficRow"},"title":"Response List Traffic Engagements  Engagement Id  Traffic Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/engagements/{engagement_id}/traffic/search":{"get":{"tags":["traffic"],"summary":"Search Traffic","operationId":"search_traffic_engagements__engagement_id__traffic_search_get","parameters":[{"name":"engagement_id","in":"path","required":true,"schema":{"type":"string","title":"Engagement Id"}},{"name":"q","in":"query","required":true,"schema":{"type":"string","title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TrafficRow"},"title":"Response Search Traffic Engagements  Engagement Id  Traffic Search Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/engagements/{engagement_id}/traffic/{traffic_id}":{"get":{"tags":["traffic"],"summary":"Get Traffic","operationId":"get_traffic_engagements__engagement_id__traffic__traffic_id__get","parameters":[{"name":"engagement_id","in":"path","required":true,"schema":{"type":"string","title":"Engagement Id"}},{"name":"traffic_id","in":"path","required":true,"schema":{"type":"string","title":"Traffic Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrafficDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["traffic"],"summary":"Patch Traffic","operationId":"patch_traffic_engagements__engagement_id__traffic__traffic_id__patch","parameters":[{"name":"engagement_id","in":"path","required":true,"schema":{"type":"string","title":"Engagement Id"}},{"name":"traffic_id","in":"path","required":true,"schema":{"type":"string","title":"Traffic Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrafficPatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrafficDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/engagements/{engagement_id}/repeater/tabs":{"post":{"tags":["repeater"],"summary":"Create Tab","operationId":"create_tab_engagements__engagement_id__repeater_tabs_post","parameters":[{"name":"engagement_id","in":"path","required":true,"schema":{"type":"string","title":"Engagement Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TabCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TabOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["repeater"],"summary":"List Tabs","operationId":"list_tabs_engagements__engagement_id__repeater_tabs_get","parameters":[{"name":"engagement_id","in":"path","required":true,"schema":{"type":"string","title":"Engagement Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TabOut"},"title":"Response List Tabs Engagements  Engagement Id  Repeater Tabs Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/engagements/{engagement_id}/repeater/tabs/{tab_id}":{"patch":{"tags":["repeater"],"summary":"Patch Tab","operationId":"patch_tab_engagements__engagement_id__repeater_tabs__tab_id__patch","parameters":[{"name":"engagement_id","in":"path","required":true,"schema":{"type":"string","title":"Engagement Id"}},{"name":"tab_id","in":"path","required":true,"schema":{"type":"string","title":"Tab Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TabPatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TabOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["repeater"],"summary":"Delete Tab","operationId":"delete_tab_engagements__engagement_id__repeater_tabs__tab_id__delete","parameters":[{"name":"engagement_id","in":"path","required":true,"schema":{"type":"string","title":"Engagement Id"}},{"name":"tab_id","in":"path","required":true,"schema":{"type":"string","title":"Tab Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/engagements/{engagement_id}/repeater/tabs/{tab_id}/send":{"post":{"tags":["repeater"],"summary":"Send Tab","operationId":"send_tab_engagements__engagement_id__repeater_tabs__tab_id__send_post","parameters":[{"name":"engagement_id","in":"path","required":true,"schema":{"type":"string","title":"Engagement Id"}},{"name":"tab_id","in":"path","required":true,"schema":{"type":"string","title":"Tab Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/SendOverrides"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/engagements/{engagement_id}/repeater/tabs/{tab_id}/responses":{"get":{"tags":["repeater"],"summary":"List Responses","operationId":"list_responses_engagements__engagement_id__repeater_tabs__tab_id__responses_get","parameters":[{"name":"engagement_id","in":"path","required":true,"schema":{"type":"string","title":"Engagement Id"}},{"name":"tab_id","in":"path","required":true,"schema":{"type":"string","title":"Tab Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ResponseOut"},"title":"Response List Responses Engagements  Engagement Id  Repeater Tabs  Tab Id  Responses Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/engagements/{engagement_id}/intruder/payload-sets":{"post":{"tags":["intruder"],"summary":"Create Payload Set","operationId":"create_payload_set_engagements__engagement_id__intruder_payload_sets_post","parameters":[{"name":"engagement_id","in":"path","required":true,"schema":{"type":"string","title":"Engagement Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PayloadSetCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PayloadSetOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["intruder"],"summary":"List Payload Sets","operationId":"list_payload_sets_engagements__engagement_id__intruder_payload_sets_get","parameters":[{"name":"engagement_id","in":"path","required":true,"schema":{"type":"string","title":"Engagement Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PayloadSetOut"},"title":"Response List Payload Sets Engagements  Engagement Id  Intruder Payload Sets Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/engagements/{engagement_id}/intruder/attacks":{"post":{"tags":["intruder"],"summary":"Create Attack","operationId":"create_attack_engagements__engagement_id__intruder_attacks_post","parameters":[{"name":"engagement_id","in":"path","required":true,"schema":{"type":"string","title":"Engagement Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AttackCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AttackOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["intruder"],"summary":"List Attacks","operationId":"list_attacks_engagements__engagement_id__intruder_attacks_get","parameters":[{"name":"engagement_id","in":"path","required":true,"schema":{"type":"string","title":"Engagement Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AttackOut"},"title":"Response List Attacks Engagements  Engagement Id  Intruder Attacks Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/engagements/{engagement_id}/intruder/attacks/{attack_id}":{"get":{"tags":["intruder"],"summary":"Get Attack","operationId":"get_attack_engagements__engagement_id__intruder_attacks__attack_id__get","parameters":[{"name":"engagement_id","in":"path","required":true,"schema":{"type":"string","title":"Engagement Id"}},{"name":"attack_id","in":"path","required":true,"schema":{"type":"string","title":"Attack Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AttackOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/engagements/{engagement_id}/intruder/attacks/{attack_id}/results":{"get":{"tags":["intruder"],"summary":"List Results","operationId":"list_results_engagements__engagement_id__intruder_attacks__attack_id__results_get","parameters":[{"name":"engagement_id","in":"path","required":true,"schema":{"type":"string","title":"Engagement Id"}},{"name":"attack_id","in":"path","required":true,"schema":{"type":"string","title":"Attack Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":500,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ResultOut"},"title":"Response List Results Engagements  Engagement Id  Intruder Attacks  Attack Id  Results Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/engagements/{engagement_id}/notes":{"post":{"tags":["notes"],"summary":"Create Note","operationId":"create_note_engagements__engagement_id__notes_post","parameters":[{"name":"engagement_id","in":"path","required":true,"schema":{"type":"string","title":"Engagement Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["notes"],"summary":"List Notes","operationId":"list_notes_engagements__engagement_id__notes_get","parameters":[{"name":"engagement_id","in":"path","required":true,"schema":{"type":"string","title":"Engagement Id"}},{"name":"kind","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kind"}},{"name":"target_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/NoteOut"},"title":"Response List Notes Engagements  Engagement Id  Notes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/engagements/{engagement_id}/notes/search":{"get":{"tags":["notes"],"summary":"Search Notes","operationId":"search_notes_engagements__engagement_id__notes_search_get","parameters":[{"name":"engagement_id","in":"path","required":true,"schema":{"type":"string","title":"Engagement Id"}},{"name":"q","in":"query","required":true,"schema":{"type":"string","title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/NoteOut"},"title":"Response Search Notes Engagements  Engagement Id  Notes Search Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/engagements/{engagement_id}/notes/{note_id}":{"patch":{"tags":["notes"],"summary":"Patch Note","operationId":"patch_note_engagements__engagement_id__notes__note_id__patch","parameters":[{"name":"engagement_id","in":"path","required":true,"schema":{"type":"string","title":"Engagement Id"}},{"name":"note_id","in":"path","required":true,"schema":{"type":"string","title":"Note Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotePatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["notes"],"summary":"Delete Note","operationId":"delete_note_engagements__engagement_id__notes__note_id__delete","parameters":[{"name":"engagement_id","in":"path","required":true,"schema":{"type":"string","title":"Engagement Id"}},{"name":"note_id","in":"path","required":true,"schema":{"type":"string","title":"Note Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/workspaces/{workspace_id}/branding":{"get":{"tags":["branding"],"summary":"Get Branding","operationId":"get_branding_workspaces__workspace_id__branding_get","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/BrandingOut"},{"type":"null"}],"title":"Response Get Branding Workspaces  Workspace Id  Branding Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["branding"],"summary":"Upsert Branding","operationId":"upsert_branding_workspaces__workspace_id__branding_put","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string","title":"Workspace Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandingIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandingOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/logs":{"post":{"tags":["observability-ingest"],"summary":"Ingest Logs","operationId":"ingest_logs_v1_logs_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/metrics":{"post":{"tags":["observability-ingest"],"summary":"Ingest Metrics","operationId":"ingest_metrics_v1_metrics_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/observability/scans/{scan_id}/trace":{"get":{"tags":["observability"],"summary":"Scan Trace","operationId":"scan_trace_observability_scans__scan_id__trace_get","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Scan Trace Observability Scans  Scan Id  Trace Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/observability/slo":{"get":{"tags":["observability"],"summary":"Slo Summary","operationId":"slo_summary_observability_slo_get","parameters":[{"name":"window_minutes","in":"query","required":false,"schema":{"type":"integer","maximum":1440,"minimum":5,"default":60,"title":"Window Minutes"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Slo Summary Observability Slo Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/observability/audit":{"get":{"tags":["observability"],"summary":"Audit List","operationId":"audit_list_observability_audit_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"actor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Actor"}},{"name":"action_prefix","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Action Prefix"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Audit List Observability Audit Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/observability/audit/verify":{"get":{"tags":["observability"],"summary":"Audit Verify","operationId":"audit_verify_observability_audit_verify_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100000,"minimum":1,"default":10000,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Audit Verify Observability Audit Verify Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/observability/cost":{"get":{"tags":["observability"],"summary":"Llm Cost","operationId":"llm_cost_observability_cost_get","parameters":[{"name":"window_hours","in":"query","required":false,"schema":{"type":"integer","maximum":720,"minimum":1,"default":168,"title":"Window Hours"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Llm Cost Observability Cost Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/heatmap":{"get":{"tags":["dashboard"],"summary":"Heatmap","description":"Severity × category counts over open (un-suppressed) findings.\nDAST + SAST combined — auditors care about composition, not source.","operationId":"heatmap_dashboard_heatmap_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeatmapOut"}}}}}}},"/dashboard/trend":{"get":{"tags":["dashboard"],"summary":"Trend","description":"Findings created vs. closed per calendar day, last ``days`` days.\n\n\"Closed\" = finding moved to ``verification_status='fixed'`` or was\nsuppressed. We use ``last_rechecked_at`` for the close timestamp;\nthat's the column the recheck task updates on transition.","operationId":"trend_dashboard_trend_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":7,"default":90,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrendOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/top-repos":{"get":{"tags":["dashboard"],"summary":"Top Repos","description":"Repos with the most open SAST findings — joined through\nRepository → RepoScan → RepoFinding.\n\nPer-severity breakdowns use Postgres' ``COUNT(...) FILTER (WHERE\n...)`` aggregate, which keeps the whole roll-up to one query\nrather than three.","operationId":"top_repos_dashboard_top_repos_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TopReposOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dashboard/kev-exposure":{"get":{"tags":["dashboard"],"summary":"Kev Exposure","description":"KEV-flagged finding counts. The Kev (Known Exploited\nVulnerabilities) column is set on the ``Finding`` row by the\nenrichment pipeline at scan time.","operationId":"kev_exposure_dashboard_kev_exposure_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KevExposureOut"}}}}}}},"/dashboard/fix-conversion":{"get":{"tags":["dashboard"],"summary":"Fix Conversion","description":"% of findings with at least one fix proposal / applied PR.\nUseful as a leading indicator of MTTR — lots of proposals but\nfew applied means PR review is the bottleneck.","operationId":"fix_conversion_dashboard_fix_conversion_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FixConversionOut"}}}}}}},"/dashboard/target/{target_id}/trend":{"get":{"tags":["dashboard"],"summary":"Target Trend","description":"Per-target scan history for the trend dashboard.\n\nReturns every Scan for ``target_id`` (ordered oldest→newest) plus\npairwise summary deltas and a workspace-scoped MTTR over fixed\nFindings of this target. The frontend uses ``scans[]`` for the\nseverity stack chart and grade trajectory; ``deltas[]`` powers the\n\"+N new · −N fixed · ±N regressed\" strip between consecutive rows.\n\nDeltas are derived from severity-summary diffs, not finding-by-\nfinding identity comparison — accurate enough for a trend view and\navoids an O(scans²) cross-join over Finding rows.","operationId":"target_trend_dashboard_target__target_id__trend_get","parameters":[{"name":"target_id","in":"path","required":true,"schema":{"type":"string","title":"Target Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TargetTrendOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/compliance/report":{"post":{"tags":["compliance"],"summary":"Report Compliance","description":"Uploads the local workstation compliance state from Pencheff Studio.","operationId":"report_compliance_compliance_report_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkstationComplianceReport"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Report Compliance Compliance Report Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/compliance/my":{"get":{"tags":["compliance"],"summary":"Get My Compliance","description":"Returns the workstation compliance status for the current user.","operationId":"get_my_compliance_compliance_my_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkstationComplianceOut"}}}}}}},"/compliance/members":{"get":{"tags":["compliance"],"summary":"List Member Compliance","description":"Returns compliance status for all workspace members. Only org owners and admins are allowed.","operationId":"list_member_compliance_compliance_members_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/WorkstationComplianceOut"},"type":"array","title":"Response List Member Compliance Compliance Members Get"}}}}}}},"/compliance/export/csv":{"get":{"tags":["compliance"],"summary":"Export Compliance Csv","description":"Exports combined compliance data for all org members as a CSV.","operationId":"export_compliance_csv_compliance_export_csv_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/compliance/export/pdf/{target_user_id}":{"get":{"tags":["compliance"],"summary":"Export Compliance Pdf","description":"Generates and downloads a beautiful, detailed PDF compliance report for an individual user.","operationId":"export_compliance_pdf_compliance_export_pdf__target_user_id__get","parameters":[{"name":"target_user_id","in":"path","required":true,"schema":{"type":"string","title":"Target User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/":{"get":{"summary":"Root","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health":{"get":{"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"AdvisoryListItem":{"properties":{"id":{"type":"string","title":"Id"},"ecosystem":{"type":"string","title":"Ecosystem"},"package":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Package"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"severity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Severity"},"license":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"License"}},"type":"object","required":["id","ecosystem"],"title":"AdvisoryListItem"},"AdvisoryOut":{"properties":{"id":{"type":"string","title":"Id"},"ecosystem":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ecosystem"},"package":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Package"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"severity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Severity"},"license":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"License"},"advisory":{"additionalProperties":true,"type":"object","title":"Advisory"},"nvd":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Nvd"},"epss":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Epss"},"epss_percentile":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Epss Percentile"},"kev":{"type":"boolean","title":"Kev","default":false},"ai":{"anyOf":[{"$ref":"#/components/schemas/_AiEnrichment"},{"type":"null"}]},"provenance":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Provenance","default":[]},"sources":{"items":{"$ref":"#/components/schemas/_Source"},"type":"array","title":"Sources","default":[]}},"type":"object","required":["id","advisory"],"title":"AdvisoryOut"},"AgentConfig":{"properties":{"kind":{"type":"string","const":"agent","title":"Kind","default":"agent"},"source_type":{"type":"string","enum":["agent_http","agent_browser"],"title":"Source Type"},"url":{"anyOf":[{"type":"string","maxLength":2083,"minLength":1,"format":"uri"},{"type":"null"}],"title":"Url"},"provider":{"anyOf":[{"type":"string","enum":["openai-chat","custom","executable","websocket","bedrock","vertex","azure-openai","browser","sema4_agent"]},{"type":"null"}],"title":"Provider"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"request_template":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Request Template"},"response_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Response Path"},"prompt_selector":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prompt Selector"},"send_selector":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Send Selector"},"response_selector":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Response Selector"},"tool_allowlist":{"items":{"type":"string"},"type":"array","title":"Tool Allowlist"},"tool_denylist":{"items":{"type":"string"},"type":"array","title":"Tool Denylist"},"dynamic_invocation":{"type":"boolean","title":"Dynamic Invocation","default":false},"destructive_opt_in":{"type":"boolean","title":"Destructive Opt In","default":false},"redteam":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Redteam"}},"additionalProperties":false,"type":"object","required":["source_type"],"title":"AgentConfig","description":"AI agent target config (conversational endpoint). Split out of McpConfig\n(spec 2026-06-27): agent_http reuses the LlmProbe engine; agent_browser drives\nPlaywright. Auth secrets ride on Target.credentials_encrypted."},"AgenticFinishRequest":{"properties":{"status":{"type":"string","title":"Status"},"branch_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Branch Name"},"pr_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pr Url"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"current_step":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Step"}},"type":"object","required":["status"],"title":"AgenticFinishRequest","description":"Terminal status update from the desktop runtime. Exactly one\nof ``done`` / ``failed`` / ``canceled`` is expected; the server\nrejects re-finishing an already-terminal row."},"AgenticRunDetailOut":{"properties":{"id":{"type":"string","title":"Id"},"runtime":{"type":"string","title":"Runtime"},"status":{"type":"string","title":"Status"},"findings_count":{"type":"integer","title":"Findings Count"},"iterations":{"type":"integer","title":"Iterations"},"current_step":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Step"},"branch_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Branch Name"},"pr_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pr Url"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"repository_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Repository Id"},"model":{"type":"string","title":"Model"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"cancel_requested":{"type":"boolean","title":"Cancel Requested"},"recent_steps":{"items":{"$ref":"#/components/schemas/AgenticStepOut"},"type":"array","title":"Recent Steps","default":[]},"usage_total_input_tokens":{"type":"integer","title":"Usage Total Input Tokens","default":0},"usage_total_output_tokens":{"type":"integer","title":"Usage Total Output Tokens","default":0},"usage_total_cost_cents":{"type":"integer","title":"Usage Total Cost Cents","default":0}},"type":"object","required":["id","runtime","status","findings_count","iterations","current_step","branch_name","pr_url","error","repository_id","model","created_at","started_at","completed_at","cancel_requested"],"title":"AgenticRunDetailOut","description":"Detail view: includes the last N tool-call steps + usage rollup."},"AgenticRunOut":{"properties":{"id":{"type":"string","title":"Id"},"runtime":{"type":"string","title":"Runtime"},"status":{"type":"string","title":"Status"},"findings_count":{"type":"integer","title":"Findings Count"},"iterations":{"type":"integer","title":"Iterations"},"current_step":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Step"},"branch_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Branch Name"},"pr_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pr Url"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"repository_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Repository Id"},"model":{"type":"string","title":"Model"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"cancel_requested":{"type":"boolean","title":"Cancel Requested"}},"type":"object","required":["id","runtime","status","findings_count","iterations","current_step","branch_name","pr_url","error","repository_id","model","created_at","started_at","completed_at","cancel_requested"],"title":"AgenticRunOut"},"AgenticStepIngestRequest":{"properties":{"iteration":{"type":"integer","title":"Iteration"},"step_index":{"type":"integer","title":"Step Index"},"tool_name":{"type":"string","title":"Tool Name"},"tool_input":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Tool Input"},"tool_output_truncated":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool Output Truncated"},"tool_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool Error"},"duration_ms":{"type":"integer","title":"Duration Ms","default":0}},"type":"object","required":["iteration","step_index","tool_name"],"title":"AgenticStepIngestRequest","description":"Tool-call audit row posted by the desktop runtime. The server\ninserts the row exactly as supplied; ``tool_output_truncated``\nand ``tool_error`` are 8 KiB-capped + redacted on the desktop\nbefore send (matching the server-side workers's behaviour)."},"AgenticStepOut":{"properties":{"iteration":{"type":"integer","title":"Iteration"},"step_index":{"type":"integer","title":"Step Index"},"tool_name":{"type":"string","title":"Tool Name"},"tool_input":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Tool Input"},"tool_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool Error"},"duration_ms":{"type":"integer","title":"Duration Ms"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["iteration","step_index","tool_name","tool_input","tool_error","duration_ms","created_at"],"title":"AgenticStepOut"},"AgenticUsageOut":{"properties":{"plan":{"type":"string","title":"Plan"},"in_flight_runs":{"type":"integer","title":"In Flight Runs"},"max_concurrent_runs":{"type":"integer","title":"Max Concurrent Runs"},"can_start":{"type":"boolean","title":"Can Start"},"block_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Block Reason"}},"type":"object","required":["plan","in_flight_runs","max_concurrent_runs","can_start","block_reason"],"title":"AgenticUsageOut","description":"Per-workspace concurrency snapshot. Drives the FixAllSheet's\nin-flight indicator and Run button gating."},"AndroidAppConfig":{"properties":{"file_url":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"File Url"},"sha256":{"type":"string","pattern":"^[0-9a-fA-F]{64}$","title":"Sha256"},"kind":{"type":"string","const":"android_app","title":"Kind","default":"android_app"},"use_mobsf":{"type":"boolean","title":"Use Mobsf","default":false}},"additionalProperties":false,"type":"object","required":["file_url","sha256"],"title":"AndroidAppConfig"},"ApiKeyCreate":{"properties":{"name":{"type":"string","maxLength":120,"minLength":1,"title":"Name"},"org_id":{"type":"string","title":"Org Id"},"workspace_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workspace Id"},"scopes":{"items":{"type":"string"},"type":"array","title":"Scopes"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"}},"type":"object","required":["name","org_id"],"title":"ApiKeyCreate"},"ApiKeyCreated":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"prefix":{"type":"string","title":"Prefix"},"org_id":{"type":"string","title":"Org Id"},"workspace_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workspace Id"},"scopes":{"items":{"type":"string"},"type":"array","title":"Scopes"},"effective_scopes":{"items":{"type":"string"},"type":"array","title":"Effective Scopes"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"revoked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Revoked At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"key":{"type":"string","title":"Key"}},"type":"object","required":["id","name","prefix","org_id","workspace_id","scopes","effective_scopes","expires_at","last_used_at","revoked_at","created_at","key"],"title":"ApiKeyCreated","description":"Issued only on POST. ``key`` is the plaintext — show once, never again."},"ApiKeyOut":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"prefix":{"type":"string","title":"Prefix"},"org_id":{"type":"string","title":"Org Id"},"workspace_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workspace Id"},"scopes":{"items":{"type":"string"},"type":"array","title":"Scopes"},"effective_scopes":{"items":{"type":"string"},"type":"array","title":"Effective Scopes"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"revoked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Revoked At"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","name","prefix","org_id","workspace_id","scopes","effective_scopes","expires_at","last_used_at","revoked_at","created_at"],"title":"ApiKeyOut"},"ApiKeyUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":120,"minLength":1},{"type":"null"}],"title":"Name"},"scopes":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Scopes"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"}},"type":"object","title":"ApiKeyUpdate"},"ApplyResultOut":{"properties":{"proposal_id":{"type":"string","title":"Proposal Id"},"status":{"type":"string","enum":["draft","applied","failed","superseded"],"title":"Status"},"branch_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Branch Name"},"commit_sha":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Commit Sha"},"pr_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pr Url"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["proposal_id","status","branch_name","commit_sha","pr_url"],"title":"ApplyResultOut"},"AssetOut":{"properties":{"id":{"type":"string","title":"Id"},"type":{"type":"string","title":"Type"},"value":{"type":"string","title":"Value"},"meta":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Meta"},"first_seen":{"type":"string","format":"date-time","title":"First Seen"},"last_seen":{"type":"string","format":"date-time","title":"Last Seen"}},"type":"object","required":["id","type","value","meta","first_seen","last_seen"],"title":"AssetOut"},"AssignBody":{"properties":{"assignee_user_id":{"type":"string","title":"Assignee User Id"}},"type":"object","required":["assignee_user_id"],"title":"AssignBody"},"AttackCreate":{"properties":{"name":{"type":"string","title":"Name","default":"Attack"},"request_template":{"additionalProperties":true,"type":"object","title":"Request Template"},"payload_set_id":{"type":"string","title":"Payload Set Id"},"attack_type":{"type":"string","title":"Attack Type","default":"sniper"},"concurrency":{"type":"integer","title":"Concurrency","default":5},"rate_limit":{"type":"integer","title":"Rate Limit","default":20}},"type":"object","required":["request_template","payload_set_id"],"title":"AttackCreate"},"AttackOut":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"attack_type":{"type":"string","title":"Attack Type"},"status":{"type":"string","title":"Status"},"progress_pct":{"type":"integer","title":"Progress Pct"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"finished_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Finished At"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","name","attack_type","status","progress_pct","started_at","finished_at","created_at"],"title":"AttackOut"},"BrandingIn":{"properties":{"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"primary_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Color"},"secondary_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondary Color"},"opening_letter_md":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Opening Letter Md"},"methodology_md":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Methodology Md"},"footer_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Footer Text"}},"type":"object","title":"BrandingIn"},"BrandingOut":{"properties":{"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"primary_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Color"},"secondary_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondary Color"},"opening_letter_md":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Opening Letter Md"},"methodology_md":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Methodology Md"},"footer_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Footer Text"},"workspace_id":{"type":"string","title":"Workspace Id"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["workspace_id","updated_at"],"title":"BrandingOut"},"BrowserExtensionConfig":{"properties":{"file_url":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"File Url"},"sha256":{"type":"string","pattern":"^[0-9a-fA-F]{64}$","title":"Sha256"},"kind":{"type":"string","const":"browser_extension","title":"Kind","default":"browser_extension"}},"additionalProperties":false,"type":"object","required":["file_url","sha256"],"title":"BrowserExtensionConfig"},"BulkFixResultOut":{"properties":{"repository_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Repository Id"},"ok":{"type":"boolean","title":"Ok","default":true},"proposal_ids":{"items":{"type":"string"},"type":"array","title":"Proposal Ids"},"branch_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Branch Name"},"commit_sha":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Commit Sha"},"pr_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pr Url"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","title":"BulkFixResultOut","description":"One row per repository the bulk request touched."},"BulkFixSummary":{"properties":{"proposals_total":{"type":"integer","title":"Proposals Total"},"proposals_failed":{"type":"integer","title":"Proposals Failed"},"results":{"items":{"$ref":"#/components/schemas/BulkFixResultOut"},"type":"array","title":"Results"}},"type":"object","required":["proposals_total","proposals_failed","results"],"title":"BulkFixSummary"},"BulkFixTaskAcceptedOut":{"properties":{"id":{"type":"string","title":"Id"},"status":{"type":"string","title":"Status"},"total_findings":{"type":"integer","title":"Total Findings"}},"type":"object","required":["id","status","total_findings"],"title":"BulkFixTaskAcceptedOut","description":"``202 Accepted`` body — frontend polls the GET endpoint with this id."},"BulkFixTaskStatusOut":{"properties":{"id":{"type":"string","title":"Id"},"status":{"type":"string","title":"Status"},"total_findings":{"type":"integer","title":"Total Findings"},"completed_findings":{"type":"integer","title":"Completed Findings"},"results":{"anyOf":[{"$ref":"#/components/schemas/BulkFixSummary"},{"type":"null"}]},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"}},"type":"object","required":["id","status","total_findings","completed_findings","created_at","updated_at"],"title":"BulkFixTaskStatusOut","description":"Polling response. ``results`` is populated once status is\nterminal (``completed`` or ``failed``)."},"CicdCreds":{"properties":{"kind":{"type":"string","const":"cicd_pipeline","title":"Kind","default":"cicd_pipeline"},"provider":{"type":"string","enum":["github_actions","gitlab_ci","jenkins","azure_pipelines","circleci"],"title":"Provider"},"token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token"},"github_app_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Github App Id"},"github_app_private_key":{"anyOf":[{"type":"string","maxLength":8192},{"type":"null"}],"title":"Github App Private Key"},"jenkins_user":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Jenkins User"}},"additionalProperties":false,"type":"object","required":["provider"],"title":"CicdCreds"},"CicdPipelineConfig":{"properties":{"kind":{"type":"string","const":"cicd_pipeline","title":"Kind","default":"cicd_pipeline"},"provider":{"type":"string","enum":["github_actions","gitlab_ci","jenkins","azure_pipelines","circleci"],"title":"Provider"},"repo_url":{"anyOf":[{"type":"string","maxLength":2083,"minLength":1,"format":"uri"},{"type":"null"}],"title":"Repo Url"},"config_paths":{"items":{"type":"string"},"type":"array","title":"Config Paths"},"live_api_enabled":{"type":"boolean","title":"Live Api Enabled","default":false}},"additionalProperties":false,"type":"object","required":["provider"],"title":"CicdPipelineConfig"},"CicdPipelinePayload":{"properties":{"kind":{"type":"string","const":"cicd_pipeline","title":"Kind","default":"cicd_pipeline"}},"additionalProperties":false,"type":"object","title":"CicdPipelinePayload"},"CloudAccountConfig":{"properties":{"provider":{"type":"string","enum":["aws","azure","gcp"],"title":"Provider"},"account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Id"},"subscription_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subscription Id"},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Id"},"regions":{"items":{"type":"string"},"type":"array","title":"Regions"},"resource_tags":{"additionalProperties":{"type":"string"},"type":"object","title":"Resource Tags"},"inventory":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Inventory"},"read_only":{"type":"boolean","title":"Read Only","default":true},"kind":{"type":"string","const":"cloud_account","title":"Kind","default":"cloud_account"},"services":{"items":{"type":"string"},"type":"array","title":"Services"},"include_iam":{"type":"boolean","title":"Include Iam","default":true},"include_network":{"type":"boolean","title":"Include Network","default":true},"include_audit_logging":{"type":"boolean","title":"Include Audit Logging","default":true}},"additionalProperties":false,"type":"object","required":["provider"],"title":"CloudAccountConfig"},"CloudDatabaseConfig":{"properties":{"provider":{"type":"string","enum":["aws","azure","gcp"],"title":"Provider"},"account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Id"},"subscription_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subscription Id"},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Id"},"regions":{"items":{"type":"string"},"type":"array","title":"Regions"},"resource_tags":{"additionalProperties":{"type":"string"},"type":"object","title":"Resource Tags"},"inventory":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Inventory"},"read_only":{"type":"boolean","title":"Read Only","default":true},"kind":{"type":"string","const":"cloud_database","title":"Kind","default":"cloud_database"},"resource_names":{"items":{"type":"string"},"type":"array","title":"Resource Names"},"engines":{"items":{"type":"string"},"type":"array","title":"Engines"},"check_public_access":{"type":"boolean","title":"Check Public Access","default":true},"check_encryption":{"type":"boolean","title":"Check Encryption","default":true},"check_backups":{"type":"boolean","title":"Check Backups","default":true}},"additionalProperties":false,"type":"object","required":["provider"],"title":"CloudDatabaseConfig"},"CloudProviderCreds":{"properties":{"kind":{"type":"string","enum":["cloud_account","serverless_function","cloud_storage","load_balancer_cdn","cloud_database","secrets_manager"],"title":"Kind"},"provider":{"type":"string","enum":["aws","azure","gcp"],"title":"Provider"},"aws_access_key_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Aws Access Key Id"},"aws_secret_access_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Aws Secret Access Key"},"aws_session_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Aws Session Token"},"aws_role_arn":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Aws Role Arn"},"azure_tenant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Azure Tenant Id"},"azure_client_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Azure Client Id"},"azure_client_secret":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Azure Client Secret"},"gcp_service_account_json":{"anyOf":[{"type":"string","maxLength":16384},{"type":"null"}],"title":"Gcp Service Account Json"}},"additionalProperties":false,"type":"object","required":["kind","provider"],"title":"CloudProviderCreds"},"CloudStorageConfig":{"properties":{"provider":{"type":"string","enum":["aws","azure","gcp"],"title":"Provider"},"account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Id"},"subscription_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subscription Id"},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Id"},"regions":{"items":{"type":"string"},"type":"array","title":"Regions"},"resource_tags":{"additionalProperties":{"type":"string"},"type":"object","title":"Resource Tags"},"inventory":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Inventory"},"read_only":{"type":"boolean","title":"Read Only","default":true},"kind":{"type":"string","const":"cloud_storage","title":"Kind","default":"cloud_storage"},"resource_names":{"items":{"type":"string"},"type":"array","title":"Resource Names"},"check_public_access":{"type":"boolean","title":"Check Public Access","default":true},"check_encryption":{"type":"boolean","title":"Check Encryption","default":true},"check_logging":{"type":"boolean","title":"Check Logging","default":true}},"additionalProperties":false,"type":"object","required":["provider"],"title":"CloudStorageConfig"},"CommentCreate":{"properties":{"body":{"type":"string","title":"Body"}},"type":"object","required":["body"],"title":"CommentCreate"},"CommentOut":{"properties":{"id":{"type":"string","title":"Id"},"user_id":{"type":"string","title":"User Id"},"body":{"type":"string","title":"Body"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","user_id","body","created_at"],"title":"CommentOut"},"ConsentPayload":{"properties":{"version":{"type":"integer","title":"Version","default":2},"acknowledged":{"type":"boolean","title":"Acknowledged"},"authorization_text":{"type":"string","maxLength":4000,"minLength":50,"title":"Authorization Text"},"disclosed_actions":{"items":{"type":"string"},"type":"array","minItems":1,"title":"Disclosed Actions"},"consent_given_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Consent Given At"},"consent_given_by_user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Consent Given By User Id"},"authorized_hosts":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Authorized Hosts"},"acknowledged_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Acknowledged At"},"acknowledged_by_user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Acknowledged By User Id"},"acknowledged_from_ip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Acknowledged From Ip"},"acknowledged_user_agent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Acknowledged User Agent"}},"type":"object","required":["acknowledged","authorization_text","disclosed_actions"],"title":"ConsentPayload","description":"Operator consent captured at scan-creation time.\n\nThe server overwrites ``consent_given_by_user_id`` with the\nauthenticated user's id — the client's value is never trusted.\n``consent_given_at`` is rejected if it is more than 5 minutes in the\npast (stale consent); the server sets it when absent."},"ContainerImageConfig":{"properties":{"kind":{"type":"string","const":"container_image","title":"Kind","default":"container_image"},"image_ref":{"type":"string","minLength":1,"title":"Image Ref"},"registry":{"type":"string","enum":["dockerhub","ecr","gcr","ghcr","acr","custom"],"title":"Registry","default":"dockerhub"},"scan_layers":{"type":"boolean","title":"Scan Layers","default":true},"scan_secrets":{"type":"boolean","title":"Scan Secrets","default":true},"scan_misconfigs":{"type":"boolean","title":"Scan Misconfigs","default":true}},"additionalProperties":false,"type":"object","required":["image_ref"],"title":"ContainerImageConfig"},"ContainerImagePayload":{"properties":{"kind":{"type":"string","const":"container_image","title":"Kind","default":"container_image"},"digest_override":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Digest Override"},"skip_layers":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Skip Layers"}},"additionalProperties":false,"type":"object","title":"ContainerImagePayload"},"Credentials":{"properties":{"username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Username"},"password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Password"},"api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key"},"token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token"},"cookie":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cookie"},"headers":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Headers"}},"type":"object","title":"Credentials"},"DependencyOut":{"properties":{"id":{"type":"string","title":"Id"},"scan_id":{"type":"string","title":"Scan Id"},"ecosystem":{"type":"string","title":"Ecosystem"},"name":{"type":"string","title":"Name"},"version":{"type":"string","title":"Version"},"license":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"License"},"scope":{"type":"string","title":"Scope"},"vulnerabilities":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Vulnerabilities"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","scan_id","ecosystem","name","version","license","scope","vulnerabilities","created_at"],"title":"DependencyOut"},"DesktopAppConfig":{"properties":{"file_url":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"File Url"},"sha256":{"type":"string","pattern":"^[0-9a-fA-F]{64}$","title":"Sha256"},"kind":{"type":"string","const":"desktop_app","title":"Kind","default":"desktop_app"}},"additionalProperties":false,"type":"object","required":["file_url","sha256"],"title":"DesktopAppConfig"},"DiscoverBody":{"properties":{"root_domain":{"type":"string","title":"Root Domain"}},"type":"object","required":["root_domain"],"title":"DiscoverBody"},"EngagementCreate":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"retention_days":{"type":"integer","title":"Retention Days","default":90}},"type":"object","required":["name"],"title":"EngagementCreate"},"EngagementCreatedOut":{"properties":{"id":{"type":"string","title":"Id"},"workspace_id":{"type":"string","title":"Workspace Id"},"name":{"type":"string","title":"Name"},"slug":{"type":"string","title":"Slug"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"status":{"type":"string","title":"Status"},"oast_mode":{"type":"string","title":"Oast Mode"},"oast_domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Oast Domain"},"retention_days":{"type":"integer","title":"Retention Days"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"closed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Closed At"},"ingest_token":{"type":"string","title":"Ingest Token"},"pairing_code":{"type":"string","title":"Pairing Code"}},"type":"object","required":["id","workspace_id","name","slug","description","status","oast_mode","oast_domain","retention_days","created_at","closed_at","ingest_token","pairing_code"],"title":"EngagementCreatedOut"},"EngagementOut":{"properties":{"id":{"type":"string","title":"Id"},"workspace_id":{"type":"string","title":"Workspace Id"},"name":{"type":"string","title":"Name"},"slug":{"type":"string","title":"Slug"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"status":{"type":"string","title":"Status"},"oast_mode":{"type":"string","title":"Oast Mode"},"oast_domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Oast Domain"},"retention_days":{"type":"integer","title":"Retention Days"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"closed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Closed At"}},"type":"object","required":["id","workspace_id","name","slug","description","status","oast_mode","oast_domain","retention_days","created_at","closed_at"],"title":"EngagementOut"},"FindingOut":{"properties":{"id":{"type":"string","title":"Id"},"scan_id":{"type":"string","title":"Scan Id"},"title":{"type":"string","title":"Title"},"severity":{"type":"string","title":"Severity"},"category":{"type":"string","title":"Category"},"owasp_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owasp Category"},"cwe_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cwe Id"},"cvss_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cvss Score"},"cvss_vector":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cvss Vector"},"endpoint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Endpoint"},"parameter":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parameter"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"remediation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Remediation"},"evidence":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Evidence"},"references":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"References"},"verification_status":{"type":"string","title":"Verification Status"},"suppressed":{"type":"boolean","title":"Suppressed"},"suppress_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Suppress Reason"},"last_rechecked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Rechecked At"},"recheck_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Recheck Status"},"ai_triage":{"anyOf":[{"$ref":"#/components/schemas/FindingTriageOut"},{"type":"null"}]},"risk_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Risk Score"},"ssvc_decision":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ssvc Decision"},"reachability":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reachability"},"epss":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Epss"},"kev":{"type":"boolean","title":"Kev","default":false},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","scan_id","title","severity","category","verification_status","suppressed","created_at"],"title":"FindingOut"},"FindingTriageOut":{"properties":{"walkthrough":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Walkthrough"},"blast_radius":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Blast Radius"},"exploit_scenario":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Exploit Scenario"},"fix_outline":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fix Outline"},"confidence":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Confidence"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"}},"type":"object","title":"FindingTriageOut","description":"AI Triage 2.0 — DeepSeek-backed exploitability walkthrough."},"FirewallIn":{"properties":{"firewall":{"additionalProperties":true,"type":"object","title":"Firewall"}},"type":"object","required":["firewall"],"title":"FirewallIn"},"FirewallOut":{"properties":{"target_id":{"type":"string","title":"Target Id"},"proxy_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proxy Url"},"firewall":{"additionalProperties":true,"type":"object","title":"Firewall"},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata","default":{}}},"type":"object","required":["target_id","proxy_url","firewall"],"title":"FirewallOut"},"FirmwareConfig":{"properties":{"file_url":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"File Url"},"sha256":{"type":"string","pattern":"^[0-9a-fA-F]{64}$","title":"Sha256"},"kind":{"type":"string","const":"firmware","title":"Kind","default":"firmware"}},"additionalProperties":false,"type":"object","required":["file_url","sha256"],"title":"FirmwareConfig"},"FixConversionOut":{"properties":{"findings_total":{"type":"integer","title":"Findings Total"},"findings_with_proposal":{"type":"integer","title":"Findings With Proposal"},"findings_with_applied_fix":{"type":"integer","title":"Findings With Applied Fix"},"proposal_coverage_pct":{"type":"number","title":"Proposal Coverage Pct"},"apply_coverage_pct":{"type":"number","title":"Apply Coverage Pct"}},"type":"object","required":["findings_total","findings_with_proposal","findings_with_applied_fix","proposal_coverage_pct","apply_coverage_pct"],"title":"FixConversionOut"},"FixProposalOut":{"properties":{"id":{"type":"string","title":"Id"},"finding_kind":{"type":"string","enum":["sast","dast"],"title":"Finding Kind"},"finding_id":{"type":"string","title":"Finding Id"},"repository_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Repository Id"},"status":{"type":"string","enum":["draft","applied","failed","superseded"],"title":"Status"},"source":{"type":"string","enum":["scanner","llm"],"title":"Source"},"diff":{"type":"string","title":"Diff"},"target_files":{"items":{"type":"string"},"type":"array","title":"Target Files"},"provenance_confidence":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Provenance Confidence"},"provenance_reasoning":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provenance Reasoning"},"llm_input_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Llm Input Tokens"},"llm_output_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Llm Output Tokens"},"cost_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cost Usd"},"branch_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Branch Name"},"pr_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pr Url"},"commit_sha":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Commit Sha"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"notice":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notice"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"applied_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Applied At"}},"type":"object","required":["id","finding_kind","finding_id","status","source","diff","created_at"],"title":"FixProposalOut"},"FixUsageOut":{"properties":{"plan":{"type":"string","title":"Plan"},"has_fix_access":{"type":"boolean","title":"Has Fix Access"},"monthly_cap":{"type":"integer","title":"Monthly Cap"},"monthly_used":{"type":"integer","title":"Monthly Used"},"monthly_remaining":{"type":"integer","title":"Monthly Remaining"},"period_resets_at":{"type":"string","title":"Period Resets At"},"beta":{"type":"boolean","title":"Beta","default":false}},"type":"object","required":["plan","has_fix_access","monthly_cap","monthly_used","monthly_remaining","period_resets_at"],"title":"FixUsageOut","description":"Returned by ``GET /usage/fix-llm``. Drives the UI quota strip.\n\nMonthly hard-cap model: one flat per-org fix counter that resets on the\ncalendar-month boundary. ``has_fix_access`` is True for every plan that\nhas a non-zero allotment (all plans today)."},"FlowIn":{"properties":{"method":{"type":"string","title":"Method"},"url":{"type":"string","title":"Url"},"request_headers":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Request Headers"},"request_body":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Request Body"},"response_status":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Response Status"},"response_headers":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Response Headers"},"response_body":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Response Body"},"response_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Response Size"},"duration_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Ms"},"captured_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Captured At"},"tab_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tab Id"},"frame_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Frame Id"},"initiator":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Initiator"},"body_capture":{"type":"string","title":"Body Capture","default":"full"},"ws_frames":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Ws Frames"}},"type":"object","required":["method","url"],"title":"FlowIn"},"GithubUrlConnect":{"properties":{"url":{"type":"string","title":"Url"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token"}},"type":"object","required":["url"],"title":"GithubUrlConnect","description":"Connect a GitHub repo by URL.\n\n* ``token`` omitted → public repo, anonymous shallow clone.\n* ``token`` provided → private repo via Personal Access Token. The\n  token is Fernet-encrypted at rest and used as the\n  ``x-access-token`` password for ``git clone`` in the worker. The\n  token must have read access to the target repo (``repo`` for a\n  classic PAT; ``Contents: Read`` + ``Metadata: Read`` for a\n  fine-grained PAT scoped to the repo)."},"GraphqlConfig":{"properties":{"kind":{"type":"string","const":"graphql","title":"Kind","default":"graphql"},"introspection_enabled":{"type":"boolean","title":"Introspection Enabled","default":true},"schema_sdl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schema Sdl"},"max_query_depth":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"Max Query Depth","default":10},"operations_to_test":{"items":{"type":"string","enum":["query","mutation","subscription"]},"type":"array","title":"Operations To Test"}},"additionalProperties":false,"type":"object","title":"GraphqlConfig"},"GraphqlPayload":{"properties":{"kind":{"type":"string","const":"graphql","title":"Kind","default":"graphql"},"max_query_depth_override":{"anyOf":[{"type":"integer","maximum":50.0,"minimum":1.0},{"type":"null"}],"title":"Max Query Depth Override"}},"additionalProperties":false,"type":"object","title":"GraphqlPayload"},"GrpcConfig":{"properties":{"kind":{"type":"string","const":"grpc","title":"Kind","default":"grpc"},"reflection_enabled":{"type":"boolean","title":"Reflection Enabled","default":true},"proto_files":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Proto Files"},"tls_verify":{"type":"boolean","title":"Tls Verify","default":true},"plaintext":{"type":"boolean","title":"Plaintext","default":false}},"additionalProperties":false,"type":"object","title":"GrpcConfig"},"GrpcPayload":{"properties":{"kind":{"type":"string","const":"grpc","title":"Kind","default":"grpc"}},"additionalProperties":false,"type":"object","title":"GrpcPayload"},"GuardrailsIn":{"properties":{"guardrails":{"additionalProperties":true,"type":"object","title":"Guardrails"}},"type":"object","required":["guardrails"],"title":"GuardrailsIn"},"GuardrailsMetadataOut":{"properties":{"defaults":{"additionalProperties":true,"type":"object","title":"Defaults"},"enforcement":{"additionalProperties":true,"type":"object","title":"Enforcement"},"presets":{"additionalProperties":true,"type":"object","title":"Presets"}},"type":"object","required":["defaults","enforcement","presets"],"title":"GuardrailsMetadataOut"},"GuardrailsOut":{"properties":{"target_id":{"type":"string","title":"Target Id"},"proxy_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proxy Url"},"guardrails":{"additionalProperties":true,"type":"object","title":"Guardrails"},"enforcement":{"additionalProperties":true,"type":"object","title":"Enforcement","default":{}},"presets":{"additionalProperties":true,"type":"object","title":"Presets","default":{}}},"type":"object","required":["target_id","proxy_url","guardrails"],"title":"GuardrailsOut"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HeatmapCell":{"properties":{"severity":{"type":"string","title":"Severity"},"category":{"type":"string","title":"Category"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["severity","category","count"],"title":"HeatmapCell"},"HeatmapOut":{"properties":{"cells":{"items":{"$ref":"#/components/schemas/HeatmapCell"},"type":"array","title":"Cells"},"severities":{"items":{"type":"string"},"type":"array","title":"Severities"},"categories":{"items":{"type":"string"},"type":"array","title":"Categories"}},"type":"object","required":["cells","severities","categories"],"title":"HeatmapOut"},"HostKindConfig":{"properties":{"kind":{"type":"string","const":"host","title":"Kind","default":"host"},"hosts":{"items":{"type":"string"},"type":"array","maxItems":50,"minItems":1,"title":"Hosts"},"is_private_target":{"type":"boolean","title":"Is Private Target","default":false}},"additionalProperties":false,"type":"object","required":["hosts"],"title":"HostKindConfig","description":"Host-kind target config — multi-host list for OS-level scanning.\n\nSub-project A of the Mythos OS-exploit ladder. The agent that consumes\nthis list ships in sub-project B; until then, routers/scans.py returns\nHTTP 409 for any scan against a host-kind Target. See\ndocs/superpowers/specs/2026-05-17-host-target-kind-design.md."},"IacConfig":{"properties":{"kind":{"type":"string","const":"iac","title":"Kind","default":"iac"},"frameworks":{"items":{"type":"string","enum":["terraform","cloudformation","helm","kustomize","arm"]},"type":"array","title":"Frameworks"},"source":{"type":"string","enum":["repo","tarball_url","local_path"],"title":"Source","default":"repo"},"repo_url":{"anyOf":[{"type":"string","maxLength":2083,"minLength":1,"format":"uri"},{"type":"null"}],"title":"Repo Url"}},"additionalProperties":false,"type":"object","title":"IacConfig"},"IacPayload":{"properties":{"kind":{"type":"string","const":"iac","title":"Kind","default":"iac"}},"additionalProperties":false,"type":"object","title":"IacPayload"},"IngestAck":{"properties":{"trace_id":{"type":"string","title":"Trace Id"},"ingested":{"type":"integer","title":"Ingested"}},"type":"object","required":["trace_id","ingested"],"title":"IngestAck"},"IngestBatch":{"properties":{"flows":{"items":{"$ref":"#/components/schemas/FlowIn"},"type":"array","title":"Flows"}},"type":"object","title":"IngestBatch"},"IngestBatchOut":{"properties":{"accepted":{"type":"integer","title":"Accepted"},"rejected":{"type":"integer","title":"Rejected"}},"type":"object","required":["accepted","rejected"],"title":"IngestBatchOut"},"IngestHandshake":{"properties":{"pairing_code":{"type":"string","title":"Pairing Code"}},"type":"object","required":["pairing_code"],"title":"IngestHandshake"},"IngestHandshakeOut":{"properties":{"engagement_id":{"type":"string","title":"Engagement Id"},"ingest_token":{"type":"string","title":"Ingest Token"},"api_base":{"type":"string","title":"Api Base"}},"type":"object","required":["engagement_id","ingest_token","api_base"],"title":"IngestHandshakeOut"},"InstallUrlOut":{"properties":{"url":{"type":"string","title":"Url"},"configured":{"type":"boolean","title":"Configured"}},"type":"object","required":["url","configured"],"title":"InstallUrlOut"},"IntegrationCreate":{"properties":{"kind":{"type":"string","enum":["slack","teams","google_chat","discord","pagerduty","splunk","opsgenie","jira","webhook"],"title":"Kind"},"name":{"type":"string","title":"Name"},"config":{"additionalProperties":true,"type":"object","title":"Config"},"severity_filter":{"type":"string","title":"Severity Filter","default":"high"},"enabled":{"type":"boolean","title":"Enabled","default":true},"target_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Target Ids"},"events":{"anyOf":[{"items":{"type":"string","enum":["scan_started","scan_done","scan_failed","finding_new","finding_changed"]},"type":"array"},{"type":"null"}],"title":"Events"}},"type":"object","required":["kind","name","config"],"title":"IntegrationCreate"},"IntegrationUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"},"severity_filter":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Severity Filter"},"enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enabled"},"target_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Target Ids"},"events":{"anyOf":[{"items":{"type":"string","enum":["scan_started","scan_done","scan_failed","finding_new","finding_changed"]},"type":"array"},{"type":"null"}],"title":"Events"}},"type":"object","title":"IntegrationUpdate"},"InviteCreate":{"properties":{"email":{"type":"string","maxLength":320,"minLength":3,"title":"Email"},"role":{"type":"string","pattern":"^(owner|admin|member)$","title":"Role","default":"member"}},"type":"object","required":["email"],"title":"InviteCreate"},"InviteOut":{"properties":{"id":{"type":"string","title":"Id"},"email":{"type":"string","title":"Email"},"role":{"type":"string","title":"Role"},"invited_by_user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Invited By User Id"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"accepted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Accepted At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token"}},"type":"object","required":["id","email","role","invited_by_user_id","expires_at","accepted_at","created_at"],"title":"InviteOut"},"IosAppConfig":{"properties":{"file_url":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"File Url"},"sha256":{"type":"string","pattern":"^[0-9a-fA-F]{64}$","title":"Sha256"},"kind":{"type":"string","const":"ios_app","title":"Kind","default":"ios_app"}},"additionalProperties":false,"type":"object","required":["file_url","sha256"],"title":"IosAppConfig"},"IotDeviceConfig":{"properties":{"file_url":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"File Url"},"sha256":{"type":"string","pattern":"^[0-9a-fA-F]{64}$","title":"Sha256"},"kind":{"type":"string","const":"iot_device","title":"Kind","default":"iot_device"},"vendor":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Vendor"},"model":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Model"},"device_class":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Device Class"}},"additionalProperties":false,"type":"object","required":["file_url","sha256"],"title":"IotDeviceConfig"},"K8sClusterConfig":{"properties":{"kind":{"type":"string","const":"k8s_cluster","title":"Kind","default":"k8s_cluster"},"target":{"type":"string","enum":["manifests_only","on_prem","live_cluster","aws_eks","azure_aks","gcp_gke"],"title":"Target","default":"manifests_only"},"manifests_archive_url":{"anyOf":[{"type":"string","maxLength":2083,"minLength":1,"format":"uri"},{"type":"null"}],"title":"Manifests Archive Url"},"namespaces":{"items":{"type":"string"},"type":"array","title":"Namespaces"},"rbac_enum":{"type":"boolean","title":"Rbac Enum","default":true},"network_policy_audit":{"type":"boolean","title":"Network Policy Audit","default":true},"aws_region":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Aws Region"},"aws_cluster_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Aws Cluster Name"},"azure_subscription_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Azure Subscription Id"},"azure_resource_group":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Azure Resource Group"},"azure_cluster_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Azure Cluster Name"},"gcp_project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gcp Project Id"},"gcp_location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gcp Location"},"gcp_cluster_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gcp Cluster Name"}},"additionalProperties":false,"type":"object","title":"K8sClusterConfig"},"K8sClusterPayload":{"properties":{"kind":{"type":"string","const":"k8s_cluster","title":"Kind","default":"k8s_cluster"}},"additionalProperties":false,"type":"object","title":"K8sClusterPayload"},"K8sCreds":{"properties":{"kind":{"type":"string","const":"k8s_cluster","title":"Kind","default":"k8s_cluster"},"provider":{"type":"string","enum":["on_prem","aws","azure","gcp"],"title":"Provider","default":"on_prem"},"kubeconfig":{"anyOf":[{"type":"string","maxLength":65536},{"type":"null"}],"title":"Kubeconfig"},"context":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Context"},"aws_access_key_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Aws Access Key Id"},"aws_secret_access_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Aws Secret Access Key"},"aws_session_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Aws Session Token"},"azure_tenant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Azure Tenant Id"},"azure_client_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Azure Client Id"},"azure_client_secret":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Azure Client Secret"},"gcp_service_account_json":{"anyOf":[{"type":"string","maxLength":16384},{"type":"null"}],"title":"Gcp Service Account Json"}},"additionalProperties":false,"type":"object","title":"K8sCreds","description":"Credentials for a Kubernetes cluster target.\n\nDiscriminated by ``provider``:\n  * ``on_prem`` — operator-pasted kubeconfig YAML (legacy + on-prem path)\n  * ``aws``    — IAM access keys; scan worker derives a fresh kubeconfig\n                 via boto3 + EKS DescribeCluster + an inline SigV4 token\n  * ``azure``  — Service Principal (tenant + client id + secret); scan\n                 worker pulls admin kubeconfig via the AKS SDK\n  * ``gcp``    — Service Account JSON; scan worker derives a kubeconfig\n                 via the GKE SDK and SA-backed access token\n\nBack-compat: rows persisted before this change stored the flat shape\n``{kind: 'k8s_cluster', kubeconfig: '...'}``. ``provider`` defaults to\n``on_prem`` so those rows parse unchanged."},"KevExposureOut":{"properties":{"total_kev_findings":{"type":"integer","title":"Total Kev Findings"},"open_kev_findings":{"type":"integer","title":"Open Kev Findings"},"suppressed_kev_findings":{"type":"integer","title":"Suppressed Kev Findings"},"fixed_kev_findings":{"type":"integer","title":"Fixed Kev Findings"},"by_severity":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Severity"}},"type":"object","required":["total_kev_findings","open_kev_findings","suppressed_kev_findings","fixed_kev_findings","by_severity"],"title":"KevExposureOut"},"LakeCorrelation":{"properties":{"cve":{"type":"string","title":"Cve"},"assets":{"type":"integer","title":"Assets"},"findings":{"type":"integer","title":"Findings"}},"type":"object","required":["cve","assets","findings"],"title":"LakeCorrelation"},"LakeDestinationIn":{"properties":{"provider":{"type":"string","enum":["s3","s3_compatible","azure_blob","gcs"],"title":"Provider"},"warehouse_uri":{"type":"string","title":"Warehouse Uri"},"s3_endpoint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"S3 Endpoint"},"s3_region":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"S3 Region"},"azure_account":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Azure Account"},"azure_container":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Azure Container"},"gcs_bucket":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gcs Bucket"},"gcs_project":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gcs Project"},"credentials":{"additionalProperties":true,"type":"object","title":"Credentials"}},"type":"object","required":["provider","warehouse_uri","credentials"],"title":"LakeDestinationIn"},"LakeDestinationOut":{"properties":{"provider":{"type":"string","enum":["s3","s3_compatible","azure_blob","gcs"],"title":"Provider"},"warehouse_uri":{"type":"string","title":"Warehouse Uri"},"s3_endpoint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"S3 Endpoint"},"s3_region":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"S3 Region"},"azure_account":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Azure Account"},"azure_container":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Azure Container"},"gcs_bucket":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gcs Bucket"},"gcs_project":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gcs Project"},"status":{"type":"string","title":"Status","default":"unverified"},"last_verified_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Verified At"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["provider","warehouse_uri"],"title":"LakeDestinationOut"},"LakeFindingItem":{"properties":{"finding_uid":{"type":"string","title":"Finding Uid"},"class_uid":{"type":"integer","title":"Class Uid"},"source":{"type":"string","title":"Source"},"severity_id":{"type":"integer","title":"Severity Id"},"status_id":{"type":"integer","title":"Status Id"},"asset_id":{"type":"string","title":"Asset Id"},"time":{"type":"integer","title":"Time"},"dt":{"type":"string","title":"Dt"},"org_id":{"type":"string","title":"Org Id"},"ocsf_json":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ocsf Json"}},"type":"object","required":["finding_uid","class_uid","source","severity_id","status_id","asset_id","time","dt","org_id"],"title":"LakeFindingItem"},"LakeFindingsPage":{"properties":{"items":{"items":{"$ref":"#/components/schemas/LakeFindingItem"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"}},"type":"object","required":["items","total","limit","offset"],"title":"LakeFindingsPage"},"LakeTrendPoint":{"properties":{"dt":{"type":"string","title":"Dt"},"open_findings":{"type":"integer","title":"Open Findings"},"high_critical":{"type":"integer","title":"High Critical"}},"type":"object","required":["dt","open_findings","high_critical"],"title":"LakeTrendPoint"},"LlmConfig":{"properties":{"provider":{"type":"string","enum":["openai-chat","custom","executable","websocket","bedrock","vertex","azure-openai","browser","sema4_agent"],"title":"Provider"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"system_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"System Prompt"},"request_template":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Request Template"},"response_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Response Path"},"command":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Command"},"redteam":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Redteam"},"thresholds":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Thresholds"},"budget":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Budget"},"retries":{"type":"integer","maximum":5.0,"minimum":0.0,"title":"Retries","default":0},"backoff_s":{"type":"number","maximum":10.0,"minimum":0.0,"title":"Backoff S","default":0.25},"cache":{"type":"boolean","title":"Cache","default":true},"cache_size":{"type":"integer","maximum":10000.0,"minimum":0.0,"title":"Cache Size","default":256},"timeout_s":{"type":"integer","maximum":120.0,"minimum":1.0,"title":"Timeout S","default":30},"concurrency":{"type":"integer","maximum":20.0,"minimum":1.0,"title":"Concurrency","default":5},"max_rps":{"anyOf":[{"type":"number","maximum":10000.0,"minimum":0.0},{"type":"null"}],"title":"Max Rps"},"max_rpm":{"anyOf":[{"type":"integer","maximum":600000.0,"minimum":0.0},{"type":"null"}],"title":"Max Rpm"},"rate_burst":{"anyOf":[{"type":"number","maximum":100000.0,"minimum":0.0},{"type":"null"}],"title":"Rate Burst"},"aws_region":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Aws Region"},"vertex_project":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vertex Project"},"vertex_location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vertex Location"},"azure_deployment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Azure Deployment"},"azure_api_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Azure Api Version"}},"type":"object","required":["provider"],"title":"LlmConfig","description":"Non-secret LLM target configuration.\n\nStored on Target.llm_config (JSONB). Secrets — API keys, etc. —\nlive on Target.credentials_encrypted via Credentials.headers."},"LlmModelCatalogOut":{"properties":{"provider":{"type":"string","enum":["openai-chat","custom","executable","websocket","bedrock","vertex","azure-openai","browser"],"title":"Provider"},"models":{"items":{"$ref":"#/components/schemas/LlmModelInfo"},"type":"array","title":"Models"},"warning":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Warning"},"manual_allowed":{"type":"boolean","title":"Manual Allowed","default":true}},"type":"object","required":["provider","models"],"title":"LlmModelCatalogOut"},"LlmModelCatalogRequest":{"properties":{"provider":{"type":"string","enum":["openai-chat","custom","executable","websocket","bedrock","vertex","azure-openai","browser"],"title":"Provider"},"endpoint":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Endpoint"},"headers":{"additionalProperties":{"type":"string"},"type":"object","title":"Headers"},"aws_region":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}],"title":"Aws Region"},"vertex_project":{"anyOf":[{"type":"string","maxLength":256},{"type":"null"}],"title":"Vertex Project"},"vertex_location":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}],"title":"Vertex Location"},"azure_deployment":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Azure Deployment"},"azure_api_version":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}],"title":"Azure Api Version"}},"type":"object","required":["provider"],"title":"LlmModelCatalogRequest"},"LlmModelInfo":{"properties":{"id":{"type":"string","title":"Id"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"source":{"type":"string","enum":["live","preset"],"title":"Source","default":"preset"}},"type":"object","required":["id"],"title":"LlmModelInfo"},"LlmProviderCreate":{"properties":{"label":{"type":"string","maxLength":120,"minLength":1,"title":"Label"},"provider":{"type":"string","enum":["openai","anthropic","google","azure_openai","openai_compatible","bedrock","vertex"],"title":"Provider"},"model":{"type":"string","maxLength":200,"minLength":1,"title":"Model"},"base_url":{"anyOf":[{"type":"string","maxLength":1024},{"type":"null"}],"title":"Base Url"},"api_key":{"type":"string","title":"Api Key","default":""},"azure_deployment":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Azure Deployment"},"azure_api_version":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Azure Api Version"},"extra":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Extra"},"credentials":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Credentials"}},"type":"object","required":["label","provider","model"],"title":"LlmProviderCreate"},"LlmProviderOut":{"properties":{"id":{"type":"string","title":"Id"},"label":{"type":"string","title":"Label"},"provider":{"type":"string","title":"Provider"},"model":{"type":"string","title":"Model"},"base_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Base Url"},"azure_deployment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Azure Deployment"},"azure_api_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Azure Api Version"},"extra":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Extra"},"key_set":{"type":"boolean","title":"Key Set","default":false},"key_hint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Key Hint"},"is_active":{"type":"boolean","title":"Is Active","default":false},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","label","provider","model","created_at"],"title":"LlmProviderOut"},"LlmProviderUpdate":{"properties":{"label":{"anyOf":[{"type":"string","maxLength":120,"minLength":1},{"type":"null"}],"title":"Label"},"provider":{"anyOf":[{"type":"string","enum":["openai","anthropic","google","azure_openai","openai_compatible","bedrock","vertex"]},{"type":"null"}],"title":"Provider"},"model":{"anyOf":[{"type":"string","maxLength":200,"minLength":1},{"type":"null"}],"title":"Model"},"base_url":{"anyOf":[{"type":"string","maxLength":1024},{"type":"null"}],"title":"Base Url"},"api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key"},"azure_deployment":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Azure Deployment"},"azure_api_version":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Azure Api Version"},"extra":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Extra"},"credentials":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Credentials"}},"type":"object","title":"LlmProviderUpdate"},"LoadBalancerCdnConfig":{"properties":{"provider":{"type":"string","enum":["aws","azure","gcp"],"title":"Provider"},"account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Id"},"subscription_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subscription Id"},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Id"},"regions":{"items":{"type":"string"},"type":"array","title":"Regions"},"resource_tags":{"additionalProperties":{"type":"string"},"type":"object","title":"Resource Tags"},"inventory":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Inventory"},"read_only":{"type":"boolean","title":"Read Only","default":true},"kind":{"type":"string","const":"load_balancer_cdn","title":"Kind","default":"load_balancer_cdn"},"resource_names":{"items":{"type":"string"},"type":"array","title":"Resource Names"},"domains":{"items":{"type":"string"},"type":"array","title":"Domains"},"check_tls":{"type":"boolean","title":"Check Tls","default":true},"check_origin_exposure":{"type":"boolean","title":"Check Origin Exposure","default":true},"check_waf":{"type":"boolean","title":"Check Waf","default":true},"check_cache_policy":{"type":"boolean","title":"Check Cache Policy","default":true}},"additionalProperties":false,"type":"object","required":["provider"],"title":"LoadBalancerCdnConfig"},"LocalFindingIn":{"properties":{"scanner":{"type":"string","title":"Scanner"},"rule_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rule Id"},"severity":{"type":"string","title":"Severity","default":"info"},"title":{"type":"string","title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"file_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Path"},"line_start":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Line Start"},"line_end":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Line End"},"code_snippet":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code Snippet"},"cve":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cve"},"package":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Package"},"installed_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Installed Version"},"fixed_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fixed Version"},"ai_explanation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ai Explanation"}},"type":"object","required":["scanner","title"],"title":"LocalFindingIn","description":"One finding posted by the desktop ingest endpoint. Matches the\ncolumns of ``RepoFinding`` minus the IDs and timestamps the server\nfills in. ``severity`` is normalised on read (critical/high/medium/\nlow/info); unknown values fall back to ``\"info\"``."},"LocalRepoCreate":{"properties":{"name":{"type":"string","title":"Name"},"local_path":{"type":"string","title":"Local Path"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language"}},"type":"object","required":["name","local_path"],"title":"LocalRepoCreate","description":"Register a local directory as a scannable repo.\n\nThe Celery worker will read files at ``local_path`` directly (no clone).\nThe path must be readable by whichever process runs the worker — if the\nworker runs in Docker, the path must be inside a bind-mounted volume."},"LocalSbomIn":{"properties":{"format":{"type":"string","title":"Format","default":"cyclonedx"},"component_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Component Count"},"content":{"additionalProperties":true,"type":"object","title":"Content"}},"type":"object","required":["content"],"title":"LocalSbomIn","description":"Optional SBOM payload — desktop usually generates one via\n``trivy fs --format=cyclonedx``. Stored under the scan's repo as the\nlatest SBOM and surfaces through ``GET /repos/{id}/sbom``."},"LocalScanIngestRequest":{"properties":{"findings":{"items":{"$ref":"#/components/schemas/LocalFindingIn"},"type":"array","title":"Findings","default":[]},"stats":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Stats"},"sbom":{"anyOf":[{"$ref":"#/components/schemas/LocalSbomIn"},{"type":"null"}]},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","title":"LocalScanIngestRequest","description":"Body for ``POST /repos/scans/{scan_id}/ingest`` — the desktop's\ncompleted-scan payload. Setting ``error`` transitions the scan to\n``failed`` instead of ``done``. ``stats`` mirrors the cloud worker's\nper-scanner roll-up shape (``{scanner: {count: N, duration_ms: M}}``)\nso the existing scan-history table can render it without branching."},"LocalScanStartRequest":{"properties":{"scanners":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Scanners"},"commit_sha":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Commit Sha"}},"type":"object","title":"LocalScanStartRequest","description":"Body for ``POST /repos/{id}/scan/local`` — the desktop sends the\nscanner pack it intends to run + an optional commit SHA. The endpoint\nonly opens the scan row; the desktop then runs the scanners and\nposts results back through ``/repos/scans/{id}/ingest``."},"LoginRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","title":"Password"}},"type":"object","required":["email","password"],"title":"LoginRequest"},"McpConfig":{"properties":{"kind":{"type":"string","const":"mcp","title":"Kind","default":"mcp"},"source_type":{"type":"string","enum":["mcp_http","mcp_stdio"],"title":"Source Type"},"url":{"anyOf":[{"type":"string","maxLength":2083,"minLength":1,"format":"uri"},{"type":"null"}],"title":"Url"},"transport":{"anyOf":[{"type":"string","enum":["sse","streamable_http"]},{"type":"null"}],"title":"Transport"},"command":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Command"},"env":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Env"},"cwd":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cwd"},"tool_allowlist":{"items":{"type":"string"},"type":"array","title":"Tool Allowlist"},"tool_denylist":{"items":{"type":"string"},"type":"array","title":"Tool Denylist"},"dynamic_invocation":{"type":"boolean","title":"Dynamic Invocation","default":false},"destructive_opt_in":{"type":"boolean","title":"Destructive Opt In","default":false}},"additionalProperties":false,"type":"object","required":["source_type"],"title":"McpConfig","description":"MCP server target config (source-aware). mcp_http and mcp_stdio only.\n\nAgent sources (agent_http/agent_browser) are now handled by AgentConfig.\nAuth secrets ride on Target.kind_credentials_encrypted. See spec 2026-06-16."},"Me":{"properties":{"id":{"type":"string","title":"Id"},"email":{"type":"string","title":"Email"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"org_id":{"type":"string","title":"Org Id"},"org_name":{"type":"string","title":"Org Name"},"plan":{"type":"string","title":"Plan"}},"type":"object","required":["id","email","org_id","org_name","plan"],"title":"Me"},"MemberOut":{"properties":{"user_id":{"type":"string","title":"User Id"},"email":{"type":"string","title":"Email"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"role":{"type":"string","title":"Role"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["user_id","email","name","role","created_at"],"title":"MemberOut"},"MemberRoleUpdate":{"properties":{"role":{"type":"string","pattern":"^(owner|admin|member)$","title":"Role"}},"type":"object","required":["role"],"title":"MemberRoleUpdate"},"MemoryFindingOut":{"properties":{"item_id":{"type":"string","title":"Item Id"},"category":{"type":"string","title":"Category"},"detector":{"type":"string","title":"Detector"},"severity":{"type":"string","title":"Severity"},"reason":{"type":"string","title":"Reason"},"matched_text":{"type":"string","title":"Matched Text"},"risk_score":{"type":"number","title":"Risk Score"}},"type":"object","required":["item_id","category","detector","severity","reason","matched_text","risk_score"],"title":"MemoryFindingOut"},"MemoryItemIn":{"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"text":{"type":"string","title":"Text"},"namespace":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Namespace"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}},"additionalProperties":false,"type":"object","required":["text"],"title":"MemoryItemIn","description":"A single structured memory item for ``POST /v1/memory/scan``.\n\nAccepted alongside bare strings in ``MemoryKindConfig.items`` and the\n``items`` body field of the scan endpoint.  The sentry ``_coerce_items``\nhelper (Plan M2 Task 1) already handles both forms."},"MemoryKindConfig":{"properties":{"kind":{"type":"string","const":"memory","title":"Kind","default":"memory"},"source_type":{"type":"string","enum":["manual_items","file_upload","mem0","zep","langgraph_store","redis","pinecone","chroma","qdrant","weaviate","custom_http"],"title":"Source Type","default":"manual_items"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"org_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Org Id"},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Id"},"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"collection":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Collection"},"namespace":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Namespace"},"index_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Index Name"},"file_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Name"},"file_format":{"type":"string","enum":["auto","txt","json","jsonl","csv","md"],"title":"File Format","default":"auto"},"request_template":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Request Template"},"response_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Response Path"},"items":{"items":{"anyOf":[{"type":"string"},{"$ref":"#/components/schemas/MemoryItemIn"}]},"type":"array","maxItems":500,"title":"Items"}},"additionalProperties":false,"type":"object","title":"MemoryKindConfig","description":"Agent memory / vector-store target — a batch of stored memory items\n(long-term memory rows, RAG chunks, retrieved docs) audited for secrets\nat rest + memory poisoning. Scanned on-demand from the target page via\n``POST /v1/memory/scan`` (the memory scanner), NOT the Celery scan\npipeline — so this kind has no scan-consent / discipline coupling."},"MemoryScanOut":{"properties":{"items_scanned":{"type":"integer","title":"Items Scanned"},"clean":{"type":"boolean","title":"Clean"},"severity_counts":{"additionalProperties":{"type":"integer"},"type":"object","title":"Severity Counts"},"findings":{"items":{"$ref":"#/components/schemas/MemoryFindingOut"},"type":"array","title":"Findings"}},"type":"object","required":["items_scanned","clean","severity_counts","findings"],"title":"MemoryScanOut"},"MlModelConfig":{"properties":{"kind":{"type":"string","const":"ml_model","title":"Kind","default":"ml_model"},"source_type":{"type":"string","enum":["file_url","huggingface","local_path"],"title":"Source Type"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"hf_repo":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hf Repo"},"hf_revision":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hf Revision"},"local_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Local Path"},"format_hint":{"type":"string","enum":["auto","pickle","pytorch","safetensors","keras","h5","savedmodel","gguf","joblib"],"title":"Format Hint","default":"auto"},"max_bytes":{"type":"integer","maximum":5368709120.0,"minimum":1.0,"title":"Max Bytes","default":524288000}},"additionalProperties":false,"type":"object","required":["source_type"],"title":"MlModelConfig","description":"ML model artifact target — STATICALLY scanned (never loaded). See spec 2026-06-17."},"NoteCreate":{"properties":{"body_md":{"type":"string","title":"Body Md"},"kind":{"type":"string","title":"Kind","default":"general"},"target_kind":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Kind"},"target_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Id"},"pinned":{"type":"boolean","title":"Pinned","default":false}},"type":"object","required":["body_md"],"title":"NoteCreate"},"NoteOut":{"properties":{"id":{"type":"string","title":"Id"},"kind":{"type":"string","title":"Kind"},"target_kind":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Kind"},"target_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Id"},"body_md":{"type":"string","title":"Body Md"},"pinned":{"type":"boolean","title":"Pinned"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","kind","target_kind","target_id","body_md","pinned","created_at","updated_at"],"title":"NoteOut"},"NotePatch":{"properties":{"body_md":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Body Md"},"pinned":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Pinned"}},"type":"object","title":"NotePatch"},"OrgCreate":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"first_workspace_name":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"First Workspace Name"}},"type":"object","required":["name"],"title":"OrgCreate"},"OrgOut":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"plan":{"type":"string","title":"Plan"},"role":{"type":"string","title":"Role"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"ai_enabled":{"type":"boolean","title":"Ai Enabled","default":false},"force_deterministic_only":{"type":"boolean","title":"Force Deterministic Only","default":false},"allow_private_targets":{"type":"boolean","title":"Allow Private Targets","default":false},"security_lake_enabled":{"type":"boolean","title":"Security Lake Enabled","default":false}},"type":"object","required":["id","name","plan","role","created_at"],"title":"OrgOut"},"OrgUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":200,"minLength":1},{"type":"null"}],"title":"Name"},"force_deterministic_only":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Force Deterministic Only"},"allow_private_targets":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Allow Private Targets"},"private_targets_disclosure_ack":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Private Targets Disclosure Ack"},"security_lake_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Security Lake Enabled"}},"type":"object","title":"OrgUpdate"},"OtIcsScadaConfig":{"properties":{"file_url":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"File Url"},"sha256":{"type":"string","pattern":"^[0-9a-fA-F]{64}$","title":"Sha256"},"kind":{"type":"string","const":"ot_ics_scada","title":"Kind","default":"ot_ics_scada"},"system_type":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"System Type"}},"additionalProperties":false,"type":"object","required":["file_url","sha256"],"title":"OtIcsScadaConfig"},"PackageRegistryConfig":{"properties":{"kind":{"type":"string","const":"package_registry","title":"Kind","default":"package_registry"},"ecosystem":{"type":"string","enum":["npm","pypi","maven","cargo","gem","composer","go","nuget"],"title":"Ecosystem"},"package_list":{"items":{"additionalProperties":true,"type":"object"},"type":"array","minItems":1,"title":"Package List"},"include_dev":{"type":"boolean","title":"Include Dev","default":false}},"additionalProperties":false,"type":"object","required":["ecosystem","package_list"],"title":"PackageRegistryConfig"},"PackageRegistryPayload":{"properties":{"kind":{"type":"string","const":"package_registry","title":"Kind","default":"package_registry"}},"additionalProperties":false,"type":"object","title":"PackageRegistryPayload"},"PayloadSetCreate":{"properties":{"name":{"type":"string","title":"Name"},"kind":{"type":"string","title":"Kind","default":"wordlist"},"entries":{"items":{"type":"string"},"type":"array","title":"Entries"}},"type":"object","required":["name","entries"],"title":"PayloadSetCreate"},"PayloadSetOut":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"kind":{"type":"string","title":"Kind"},"entries_count":{"type":"integer","title":"Entries Count"}},"type":"object","required":["id","name","kind","entries_count"],"title":"PayloadSetOut"},"ProposeFixRequest":{"properties":{"allow_payg":{"type":"boolean","title":"Allow Payg","default":false},"regenerate":{"type":"boolean","title":"Regenerate","default":false}},"type":"object","title":"ProposeFixRequest","description":"Body for ``POST /findings/{kind}/{id}/propose_fix``."},"ProxyOut":{"properties":{"id":{"type":"string","title":"Id"},"scan_id":{"type":"string","title":"Scan Id"},"port":{"type":"integer","title":"Port"},"mode":{"type":"string","title":"Mode"},"request_count":{"type":"integer","title":"Request Count"},"started_at":{"type":"string","format":"date-time","title":"Started At"},"stopped_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Stopped At"}},"type":"object","required":["id","scan_id","port","mode","request_count","started_at","stopped_at"],"title":"ProxyOut"},"ProxyStart":{"properties":{"scan_id":{"type":"string","title":"Scan Id"},"port":{"type":"integer","title":"Port","default":8888}},"type":"object","required":["scan_id"],"title":"ProxyStart"},"RagConfig":{"properties":{"kind":{"type":"string","const":"rag","title":"Kind","default":"rag"},"source_type":{"type":"string","enum":["managed_vdb","self_hosted_vdb","rag_endpoint","embedding_artifact"],"title":"Source Type"},"provider":{"anyOf":[{"type":"string","enum":["pinecone","weaviate","qdrant","chroma","milvus","pgvector","redis"]},{"type":"null"}],"title":"Provider"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"index_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Index Name"},"namespace":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Namespace"},"provider_llm":{"anyOf":[{"type":"string","enum":["openai-chat","custom","executable","websocket","bedrock","vertex","azure-openai","browser","sema4_agent"]},{"type":"null"}],"title":"Provider Llm"},"request_template":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Request Template"},"response_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Response Path"},"items":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Items"},"query_probes":{"type":"boolean","title":"Query Probes","default":false},"poison_injection_opt_in":{"type":"boolean","title":"Poison Injection Opt In","default":false},"canary_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Canary Text"},"redteam":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Redteam"}},"additionalProperties":false,"type":"object","required":["source_type"],"title":"RagConfig","description":"RAG / vector-DB target config (source-aware). See spec 2026-06-17.\nDistinct from MemoryKindConfig (a batch of stored items) — this is the live\nretrieval system. Auth secrets ride on Target.kind_credentials_encrypted."},"RecommendationOut":{"properties":{"category":{"type":"string","title":"Category"},"side":{"type":"string","title":"Side"},"detector":{"type":"string","title":"Detector"},"value":{"title":"Value"},"rationale":{"type":"string","title":"Rationale"},"failure_count":{"type":"integer","title":"Failure Count"}},"type":"object","required":["category","side","detector","value","rationale","failure_count"],"title":"RecommendationOut"},"RecommendedGuardrailsOut":{"properties":{"target_id":{"type":"string","title":"Target Id"},"scan_id":{"type":"string","title":"Scan Id"},"target_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Name"},"summary":{"additionalProperties":{"type":"integer"},"type":"object","title":"Summary"},"recommendations":{"items":{"$ref":"#/components/schemas/RecommendationOut"},"type":"array","title":"Recommendations"},"suggested_config":{"additionalProperties":true,"type":"object","title":"Suggested Config"}},"type":"object","required":["target_id","scan_id","target_name","summary","recommendations","suggested_config"],"title":"RecommendedGuardrailsOut"},"RefreshRequest":{"properties":{"refresh_token":{"type":"string","title":"Refresh Token"}},"type":"object","required":["refresh_token"],"title":"RefreshRequest"},"RegistryCreds":{"properties":{"kind":{"type":"string","const":"container_image","title":"Kind","default":"container_image"},"registry_host":{"type":"string","title":"Registry Host"},"auth_type":{"type":"string","enum":["basic","token","docker_config","ecr_sts","gcr_service_account","acr_sp"],"title":"Auth Type"},"username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Username"},"password_or_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Password Or Token"},"docker_config_json":{"anyOf":[{"type":"string","maxLength":65536},{"type":"null"}],"title":"Docker Config Json"},"gcr_service_account_json":{"anyOf":[{"type":"string","maxLength":16384},{"type":"null"}],"title":"Gcr Service Account Json"},"aws_access_key_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Aws Access Key Id"},"aws_secret_access_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Aws Secret Access Key"},"aws_session_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Aws Session Token"},"aws_region":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Aws Region"},"ecr_sts_role_arn":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ecr Sts Role Arn"},"acr_client_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Acr Client Id"},"acr_client_secret":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Acr Client Secret"},"acr_tenant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Acr Tenant Id"}},"additionalProperties":false,"type":"object","required":["registry_host","auth_type"],"title":"RegistryCreds"},"RepoFindingOut":{"properties":{"id":{"type":"string","title":"Id"},"scanner":{"type":"string","title":"Scanner"},"rule_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rule Id"},"severity":{"type":"string","title":"Severity"},"title":{"type":"string","title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"file_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Path"},"line_start":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Line Start"},"line_end":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Line End"},"code_snippet":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code Snippet"},"cve":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cve"},"package":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Package"},"installed_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Installed Version"},"fixed_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fixed Version"},"ai_explanation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ai Explanation"},"fix_status":{"type":"string","title":"Fix Status"},"fix_pr_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fix Pr Url"},"suppressed":{"type":"boolean","title":"Suppressed"}},"type":"object","required":["id","scanner","rule_id","severity","title","description","file_path","line_start","line_end","code_snippet","cve","package","installed_version","fixed_version","ai_explanation","fix_status","fix_pr_url","suppressed"],"title":"RepoFindingOut"},"RepoSbomOut":{"properties":{"id":{"type":"string","title":"Id"},"repository_id":{"type":"string","title":"Repository Id"},"commit_sha":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Commit Sha"},"format":{"type":"string","title":"Format"},"component_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Component Count"},"content":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Content"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","repository_id","commit_sha","format","component_count","content","created_at"],"title":"RepoSbomOut"},"RepoSbomRequest":{"properties":{"format":{"type":"string","title":"Format","default":"cyclonedx"},"ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ref"},"commit_sha":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Commit Sha"},"content":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Content"},"component_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Component Count"}},"type":"object","title":"RepoSbomRequest"},"RepoScanOut":{"properties":{"id":{"type":"string","title":"Id"},"repository_id":{"type":"string","title":"Repository Id"},"commit_sha":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Commit Sha"},"ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ref"},"trigger":{"type":"string","title":"Trigger"},"status":{"type":"string","title":"Status"},"scanners":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Scanners"},"stats":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Stats"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"summary":{"anyOf":[{"additionalProperties":{"type":"integer"},"type":"object"},{"type":"null"}],"title":"Summary"}},"type":"object","required":["id","repository_id","commit_sha","ref","trigger","status","scanners","stats","started_at","completed_at","error","created_at"],"title":"RepoScanOut"},"RepoTrendOut":{"properties":{"repository":{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":"object","title":"Repository"},"scans":{"items":{"$ref":"#/components/schemas/RepoTrendScan"},"type":"array","title":"Scans"},"open_total":{"type":"integer","title":"Open Total"},"fixed_total":{"type":"integer","title":"Fixed Total"},"mttr_days":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Mttr Days"}},"type":"object","required":["repository","scans","open_total","fixed_total","mttr_days"],"title":"RepoTrendOut"},"RepoTrendScan":{"properties":{"id":{"type":"string","title":"Id"},"commit_sha":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Commit Sha"},"completed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Completed At"},"started_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Started At"},"status":{"type":"string","title":"Status"},"severity_counts":{"additionalProperties":{"type":"integer"},"type":"object","title":"Severity Counts"},"scanner_durations_ms":{"additionalProperties":{"type":"integer"},"type":"object","title":"Scanner Durations Ms"}},"type":"object","required":["id","commit_sha","completed_at","started_at","status","severity_counts","scanner_durations_ms"],"title":"RepoTrendScan"},"ReportCreate":{"properties":{"format":{"type":"string","enum":["docx","csv","json","pdf"],"title":"Format","default":"docx"}},"type":"object","title":"ReportCreate"},"ReportOut":{"properties":{"id":{"type":"string","title":"Id"},"scan_id":{"type":"string","title":"Scan Id"},"format":{"type":"string","title":"Format"},"status":{"type":"string","title":"Status"},"bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bytes"},"generated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Generated At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"download_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Download Url"}},"type":"object","required":["id","scan_id","format","status","created_at"],"title":"ReportOut"},"RepositoryOut":{"properties":{"id":{"type":"string","title":"Id"},"provider":{"type":"string","title":"Provider"},"integration_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Integration Id"},"full_name":{"type":"string","title":"Full Name"},"owner":{"type":"string","title":"Owner"},"name":{"type":"string","title":"Name"},"default_branch":{"type":"string","title":"Default Branch"},"private":{"type":"boolean","title":"Private"},"html_url":{"type":"string","title":"Html Url"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language"},"auto_scan_on_push":{"type":"boolean","title":"Auto Scan On Push"},"last_scan_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Scan Id"},"last_scan_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Scan At"},"severity_counts":{"anyOf":[{"additionalProperties":{"type":"integer"},"type":"object"},{"type":"null"}],"title":"Severity Counts"},"local_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Local Path"}},"type":"object","required":["id","provider","integration_id","full_name","owner","name","default_branch","private","html_url","language","auto_scan_on_push","last_scan_id","last_scan_at"],"title":"RepositoryOut"},"RepositoryUpdate":{"properties":{"default_branch":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Branch"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language"},"auto_scan_on_push":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Auto Scan On Push"},"local_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Local Path"},"token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token"}},"type":"object","title":"RepositoryUpdate","description":"Editable subset of a Repository.\n\nIdentity fields (owner, name, full_name, html_url) are derived from\nthe upstream provider and never editable here. App-installed repos\nhave ``default_branch`` and ``language`` synced from the installation\non each scan, so user edits to those would be transient — the\nendpoint accepts them anyway since the user explicitly chose to set\nthem, and the sync only overwrites at scan time.\n\n``token`` is the optional new PAT for token rotation. Only\nmeaningful for repos that were registered with a PAT\n(``token_encrypted`` already set). Omit / set to ``None`` to leave\nthe token unchanged. Empty string clears it (downgrades the repo to\npublic-clone mode if the upstream is public, or breaks scans if not\n— the user is responsible).\n\n``local_path`` only meaningful when ``provider == \"local\"``."},"ResponseOut":{"properties":{"id":{"type":"string","title":"Id"},"sent_at":{"type":"string","format":"date-time","title":"Sent At"},"response_status":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Response Status"},"response_headers":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Response Headers"},"response_body":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Response Body"},"duration_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Ms"}},"type":"object","required":["id","sent_at","response_status","response_headers","response_body","duration_ms"],"title":"ResponseOut"},"RestApiConfig":{"properties":{"kind":{"type":"string","const":"rest_api","title":"Kind","default":"rest_api"},"api_spec":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Api Spec"},"api_spec_url":{"anyOf":[{"type":"string","maxLength":2083,"minLength":1,"format":"uri"},{"type":"null"}],"title":"Api Spec Url"},"api_spec_format":{"type":"string","enum":["openapi3","swagger2","postman","auto"],"title":"Api Spec Format","default":"auto"},"auth_in_spec":{"type":"boolean","title":"Auth In Spec","default":true}},"additionalProperties":false,"type":"object","title":"RestApiConfig"},"RestApiPayload":{"properties":{"kind":{"type":"string","const":"rest_api","title":"Kind","default":"rest_api"},"api_spec_override":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Api Spec Override"}},"additionalProperties":false,"type":"object","title":"RestApiPayload"},"ResultOut":{"properties":{"id":{"type":"string","title":"Id"},"payload":{"type":"string","title":"Payload"},"response_status":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Response Status"},"response_length":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Response Length"},"response_time_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Response Time Ms"},"grep_match":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Grep Match"},"diff_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Diff Score"}},"type":"object","required":["id","payload","response_status","response_length","response_time_ms","grep_match","diff_score"],"title":"ResultOut"},"SbomConfig":{"properties":{"kind":{"type":"string","const":"sbom","title":"Kind","default":"sbom"},"format":{"type":"string","enum":["cyclonedx-json","cyclonedx-xml","spdx-json","spdx-tag-value"],"title":"Format"},"content":{"anyOf":[{"type":"string","maxLength":16777216},{"type":"null"}],"title":"Content"},"url":{"anyOf":[{"type":"string","maxLength":2083,"minLength":1,"format":"uri"},{"type":"null"}],"title":"Url"},"check_licenses":{"type":"boolean","title":"Check Licenses","default":true},"check_suppliers":{"type":"boolean","title":"Check Suppliers","default":true}},"additionalProperties":false,"type":"object","required":["format"],"title":"SbomConfig"},"SbomDetail":{"properties":{"id":{"type":"string","title":"Id"},"scan_id":{"type":"string","title":"Scan Id"},"format":{"type":"string","title":"Format"},"component_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Component Count"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"content":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Content"}},"type":"object","required":["id","scan_id","format","component_count","created_at","content"],"title":"SbomDetail"},"SbomOut":{"properties":{"id":{"type":"string","title":"Id"},"scan_id":{"type":"string","title":"Scan Id"},"format":{"type":"string","title":"Format"},"component_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Component Count"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","scan_id","format","component_count","created_at"],"title":"SbomOut"},"SbomPayload":{"properties":{"kind":{"type":"string","const":"sbom","title":"Kind","default":"sbom"}},"additionalProperties":false,"type":"object","title":"SbomPayload"},"ScanAiQuotaOut":{"properties":{"plan":{"type":"string","title":"Plan"},"monthly_cap":{"type":"integer","title":"Monthly Cap"},"monthly_used":{"type":"integer","title":"Monthly Used"},"monthly_remaining":{"type":"integer","title":"Monthly Remaining"},"has_ai_access":{"type":"boolean","title":"Has Ai Access"},"quota_exhausted":{"type":"boolean","title":"Quota Exhausted"},"ai_available":{"type":"boolean","title":"Ai Available"},"period_resets_at":{"type":"string","title":"Period Resets At"},"beta":{"type":"boolean","title":"Beta"}},"type":"object","required":["plan","monthly_cap","monthly_used","monthly_remaining","has_ai_access","quota_exhausted","ai_available","period_resets_at","beta"],"title":"ScanAiQuotaOut","description":"Pre-flight scan-AI allowance for the commission modal. Drives whether\nthe 'Use AI for this scan' toggle is enabled or force-disabled."},"ScanCreate":{"properties":{"target_id":{"type":"string","title":"Target Id"},"profile":{"type":"string","enum":["quick","standard","deep"],"title":"Profile","default":"standard"},"engagement_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Engagement Id"},"consent_payload":{"$ref":"#/components/schemas/ConsentPayload"},"notify_emails":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Notify Emails"},"kind_payload":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/WebAppPayload"},{"$ref":"#/components/schemas/RestApiPayload"},{"$ref":"#/components/schemas/GraphqlPayload"},{"$ref":"#/components/schemas/WebsocketPayload"},{"$ref":"#/components/schemas/GrpcPayload"},{"$ref":"#/components/schemas/SourceCodePayload"},{"$ref":"#/components/schemas/CicdPipelinePayload"},{"$ref":"#/components/schemas/IacPayload"},{"$ref":"#/components/schemas/ContainerImagePayload"},{"$ref":"#/components/schemas/K8sClusterPayload"},{"$ref":"#/components/schemas/PackageRegistryPayload"},{"$ref":"#/components/schemas/SbomPayload"}],"discriminator":{"propertyName":"kind","mapping":{"cicd_pipeline":"#/components/schemas/CicdPipelinePayload","container_image":"#/components/schemas/ContainerImagePayload","graphql":"#/components/schemas/GraphqlPayload","grpc":"#/components/schemas/GrpcPayload","iac":"#/components/schemas/IacPayload","k8s_cluster":"#/components/schemas/K8sClusterPayload","package_registry":"#/components/schemas/PackageRegistryPayload","rest_api":"#/components/schemas/RestApiPayload","sbom":"#/components/schemas/SbomPayload","source_code":"#/components/schemas/SourceCodePayload","web_app":"#/components/schemas/WebAppPayload","websocket":"#/components/schemas/WebsocketPayload"}}},{"type":"null"}],"title":"Kind Payload"},"use_ai":{"type":"boolean","title":"Use Ai","default":true}},"type":"object","required":["target_id","consent_payload"],"title":"ScanCreate"},"ScanOut":{"properties":{"id":{"type":"string","title":"Id"},"target_id":{"type":"string","title":"Target Id"},"status":{"type":"string","title":"Status"},"profile":{"type":"string","title":"Profile"},"progress_pct":{"type":"integer","title":"Progress Pct"},"current_stage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Stage"},"grade":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Grade"},"score":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Score"},"summary":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Summary"},"log":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Log"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"finished_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Finished At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"consent_payload":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Consent Payload"},"has_threat_model":{"type":"boolean","title":"Has Threat Model","default":false},"target_kind":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Kind"}},"type":"object","required":["id","target_id","status","profile","progress_pct","created_at"],"title":"ScanOut"},"ScanRequest":{"properties":{"scanners":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Scanners"},"ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ref"},"commit_sha":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Commit Sha"}},"type":"object","title":"ScanRequest"},"ScheduleCreate":{"properties":{"target_id":{"type":"string","title":"Target Id"},"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"cron_expression":{"type":"string","title":"Cron Expression","description":"Standard cron expression (5 fields)"},"timezone":{"type":"string","maxLength":64,"minLength":1,"title":"Timezone","default":"UTC"},"profile":{"type":"string","title":"Profile","default":"standard"},"policy_yaml":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Policy Yaml"},"enabled":{"type":"boolean","title":"Enabled","default":true}},"type":"object","required":["target_id","name","cron_expression"],"title":"ScheduleCreate"},"ScheduleOut":{"properties":{"id":{"type":"string","title":"Id"},"target_id":{"type":"string","title":"Target Id"},"name":{"type":"string","title":"Name"},"cron_expression":{"type":"string","title":"Cron Expression"},"timezone":{"type":"string","title":"Timezone","default":"UTC"},"profile":{"type":"string","title":"Profile"},"policy_yaml":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Policy Yaml"},"enabled":{"type":"boolean","title":"Enabled"},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Run At"},"next_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Next Run At"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","target_id","name","cron_expression","profile","policy_yaml","enabled","last_run_at","next_run_at","created_at"],"title":"ScheduleOut"},"ScheduleUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"cron_expression":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cron Expression"},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone"},"profile":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Profile"},"policy_yaml":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Policy Yaml"},"enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enabled"}},"type":"object","title":"ScheduleUpdate"},"SecretsManagerConfig":{"properties":{"provider":{"type":"string","enum":["aws","azure","gcp"],"title":"Provider"},"account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Id"},"subscription_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subscription Id"},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Id"},"regions":{"items":{"type":"string"},"type":"array","title":"Regions"},"resource_tags":{"additionalProperties":{"type":"string"},"type":"object","title":"Resource Tags"},"inventory":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Inventory"},"read_only":{"type":"boolean","title":"Read Only","default":true},"kind":{"type":"string","const":"secrets_manager","title":"Kind","default":"secrets_manager"},"resource_names":{"items":{"type":"string"},"type":"array","title":"Resource Names"},"check_rotation":{"type":"boolean","title":"Check Rotation","default":true},"check_policy":{"type":"boolean","title":"Check Policy","default":true},"check_encryption":{"type":"boolean","title":"Check Encryption","default":true},"include_secret_values":{"type":"boolean","title":"Include Secret Values","default":false}},"additionalProperties":false,"type":"object","required":["provider"],"title":"SecretsManagerConfig"},"SendOverrides":{"properties":{"request_method":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Request Method"},"request_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Request Url"},"request_headers":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Request Headers"},"request_body":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Request Body"}},"type":"object","title":"SendOverrides"},"ServerlessFunctionConfig":{"properties":{"provider":{"type":"string","enum":["aws","azure","gcp"],"title":"Provider"},"account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Id"},"subscription_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subscription Id"},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Id"},"regions":{"items":{"type":"string"},"type":"array","title":"Regions"},"resource_tags":{"additionalProperties":{"type":"string"},"type":"object","title":"Resource Tags"},"inventory":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Inventory"},"read_only":{"type":"boolean","title":"Read Only","default":true},"kind":{"type":"string","const":"serverless_function","title":"Kind","default":"serverless_function"},"function_names":{"items":{"type":"string"},"type":"array","title":"Function Names"},"include_env_metadata":{"type":"boolean","title":"Include Env Metadata","default":true},"check_public_invocation":{"type":"boolean","title":"Check Public Invocation","default":true},"check_runtime":{"type":"boolean","title":"Check Runtime","default":true}},"additionalProperties":false,"type":"object","required":["provider"],"title":"ServerlessFunctionConfig"},"SignupRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","maxLength":128,"minLength":8,"title":"Password"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"org_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Org Name"}},"type":"object","required":["email","password"],"title":"SignupRequest"},"SourceCodeConfig":{"properties":{"kind":{"type":"string","const":"source_code","title":"Kind","default":"source_code"},"source":{"type":"string","enum":["github_url","github_app","local_path","tarball_url"],"title":"Source","default":"github_url"},"repo_url":{"anyOf":[{"type":"string","maxLength":2083,"minLength":1,"format":"uri"},{"type":"null"}],"title":"Repo Url"},"git_ref":{"type":"string","title":"Git Ref","default":"HEAD"},"languages_hint":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Languages Hint"},"scanners_disabled":{"items":{"type":"string"},"type":"array","title":"Scanners Disabled"}},"additionalProperties":false,"type":"object","title":"SourceCodeConfig"},"SourceCodeCreds":{"properties":{"kind":{"type":"string","const":"source_code","title":"Kind","default":"source_code"},"auth_type":{"type":"string","enum":["pat","github_app","ssh_key"],"title":"Auth Type"},"pat":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pat"},"github_app_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Github App Id"},"github_app_private_key":{"anyOf":[{"type":"string","maxLength":8192},{"type":"null"}],"title":"Github App Private Key"},"github_app_installation_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Github App Installation Id"},"ssh_private_key":{"anyOf":[{"type":"string","maxLength":8192},{"type":"null"}],"title":"Ssh Private Key"}},"additionalProperties":false,"type":"object","required":["auth_type"],"title":"SourceCodeCreds"},"SourceCodePayload":{"properties":{"kind":{"type":"string","const":"source_code","title":"Kind","default":"source_code"},"git_ref_override":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Git Ref Override"}},"additionalProperties":false,"type":"object","title":"SourceCodePayload"},"SpanOut":{"properties":{"span_id":{"type":"string","title":"Span Id"},"trace_id":{"type":"string","title":"Trace Id"},"parent_span_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent Span Id"},"name":{"type":"string","title":"Name"},"kind":{"type":"string","title":"Kind"},"status":{"type":"string","title":"Status"},"source":{"type":"string","title":"Source"},"target_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Id"},"start_time":{"type":"string","format":"date-time","title":"Start Time"},"end_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Time"},"duration_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Ms"},"attributes":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Attributes"}},"type":"object","required":["span_id","trace_id","parent_span_id","name","kind","status","source","target_id","start_time","end_time","duration_ms","attributes"],"title":"SpanOut"},"StartAgenticRunRequest":{"properties":{"scan_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scan Id"},"repo_scan_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Repo Scan Id"},"repository_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Repository Id"},"runtime":{"type":"string","title":"Runtime","default":"server"}},"type":"object","title":"StartAgenticRunRequest","description":"One of ``scan_id`` or ``repo_scan_id`` must be set. ``runtime``\ndefaults to ``server`` for cloud-provider repos and is required to\nbe ``desktop`` for local-provider repos (the API container can't\nsee local paths)."},"StatusUpdate":{"properties":{"verification_status":{"type":"string","enum":["unverified","true_positive","false_positive","fixed"],"title":"Verification Status"}},"type":"object","required":["verification_status"],"title":"StatusUpdate"},"SuppressRequest":{"properties":{"reason":{"type":"string","enum":["accepted_risk","wont_fix","false_positive","duplicate","out_of_scope"],"title":"Reason"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["reason"],"title":"SuppressRequest"},"TabCreate":{"properties":{"name":{"type":"string","title":"Name","default":"Untitled"},"request_method":{"type":"string","title":"Request Method","default":"GET"},"request_url":{"type":"string","title":"Request Url"},"request_headers":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Request Headers"},"request_body":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Request Body"},"source_traffic_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Traffic Id"}},"type":"object","required":["request_url"],"title":"TabCreate"},"TabOut":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"request_method":{"type":"string","title":"Request Method"},"request_url":{"type":"string","title":"Request Url"},"request_headers":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Request Headers"},"request_body":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Request Body"},"pinned":{"type":"boolean","title":"Pinned"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"source_traffic_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Traffic Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","name","request_method","request_url","request_headers","request_body","pinned","notes","source_traffic_id","created_at","updated_at"],"title":"TabOut"},"TabPatch":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"request_method":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Request Method"},"request_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Request Url"},"request_headers":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Request Headers"},"request_body":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Request Body"},"pinned":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Pinned"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","title":"TabPatch"},"TagBody":{"properties":{"tag":{"type":"string","title":"Tag"}},"type":"object","required":["tag"],"title":"TagBody"},"TargetCreate":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"base_url":{"type":"string","maxLength":2048,"minLength":1,"title":"Base Url"},"kind":{"type":"string","enum":["url","repo","llm","web_app","rest_api","graphql","websocket","grpc","cloud_account","serverless_function","cloud_storage","load_balancer_cdn","cloud_database","secrets_manager","source_code","cicd_pipeline","iac","container_image","k8s_cluster","package_registry","sbom","host","memory","mcp","agent","rag","ml_model","voice","android_app","ios_app","browser_extension","desktop_app","firmware","iot_device","ot_ics_scada"],"title":"Kind","default":"url"},"scope":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Scope"},"exclude_paths":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Exclude Paths"},"credentials":{"anyOf":[{"$ref":"#/components/schemas/Credentials"},{"type":"null"}]},"llm_config":{"anyOf":[{"$ref":"#/components/schemas/LlmConfig"},{"type":"null"}]},"kind_config":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/WebAppConfig"},{"$ref":"#/components/schemas/RestApiConfig"},{"$ref":"#/components/schemas/GraphqlConfig"},{"$ref":"#/components/schemas/WebsocketConfig"},{"$ref":"#/components/schemas/GrpcConfig"},{"$ref":"#/components/schemas/CloudAccountConfig"},{"$ref":"#/components/schemas/ServerlessFunctionConfig"},{"$ref":"#/components/schemas/CloudStorageConfig"},{"$ref":"#/components/schemas/LoadBalancerCdnConfig"},{"$ref":"#/components/schemas/CloudDatabaseConfig"},{"$ref":"#/components/schemas/SecretsManagerConfig"},{"$ref":"#/components/schemas/SourceCodeConfig"},{"$ref":"#/components/schemas/CicdPipelineConfig"},{"$ref":"#/components/schemas/IacConfig"},{"$ref":"#/components/schemas/ContainerImageConfig"},{"$ref":"#/components/schemas/K8sClusterConfig"},{"$ref":"#/components/schemas/PackageRegistryConfig"},{"$ref":"#/components/schemas/SbomConfig"},{"$ref":"#/components/schemas/HostKindConfig"},{"$ref":"#/components/schemas/MemoryKindConfig"},{"$ref":"#/components/schemas/McpConfig"},{"$ref":"#/components/schemas/AgentConfig"},{"$ref":"#/components/schemas/RagConfig"},{"$ref":"#/components/schemas/MlModelConfig"},{"$ref":"#/components/schemas/VoiceConfig"},{"$ref":"#/components/schemas/AndroidAppConfig"},{"$ref":"#/components/schemas/IosAppConfig"},{"$ref":"#/components/schemas/BrowserExtensionConfig"},{"$ref":"#/components/schemas/DesktopAppConfig"},{"$ref":"#/components/schemas/FirmwareConfig"},{"$ref":"#/components/schemas/IotDeviceConfig"},{"$ref":"#/components/schemas/OtIcsScadaConfig"}],"discriminator":{"propertyName":"kind","mapping":{"agent":"#/components/schemas/AgentConfig","android_app":"#/components/schemas/AndroidAppConfig","browser_extension":"#/components/schemas/BrowserExtensionConfig","cicd_pipeline":"#/components/schemas/CicdPipelineConfig","cloud_account":"#/components/schemas/CloudAccountConfig","cloud_database":"#/components/schemas/CloudDatabaseConfig","cloud_storage":"#/components/schemas/CloudStorageConfig","container_image":"#/components/schemas/ContainerImageConfig","desktop_app":"#/components/schemas/DesktopAppConfig","firmware":"#/components/schemas/FirmwareConfig","graphql":"#/components/schemas/GraphqlConfig","grpc":"#/components/schemas/GrpcConfig","host":"#/components/schemas/HostKindConfig","iac":"#/components/schemas/IacConfig","ios_app":"#/components/schemas/IosAppConfig","iot_device":"#/components/schemas/IotDeviceConfig","k8s_cluster":"#/components/schemas/K8sClusterConfig","load_balancer_cdn":"#/components/schemas/LoadBalancerCdnConfig","mcp":"#/components/schemas/McpConfig","memory":"#/components/schemas/MemoryKindConfig","ml_model":"#/components/schemas/MlModelConfig","ot_ics_scada":"#/components/schemas/OtIcsScadaConfig","package_registry":"#/components/schemas/PackageRegistryConfig","rag":"#/components/schemas/RagConfig","rest_api":"#/components/schemas/RestApiConfig","sbom":"#/components/schemas/SbomConfig","secrets_manager":"#/components/schemas/SecretsManagerConfig","serverless_function":"#/components/schemas/ServerlessFunctionConfig","source_code":"#/components/schemas/SourceCodeConfig","voice":"#/components/schemas/VoiceConfig","web_app":"#/components/schemas/WebAppConfig","websocket":"#/components/schemas/WebsocketConfig"}}},{"type":"null"}],"title":"Kind Config"},"kind_credentials":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/K8sCreds"},{"$ref":"#/components/schemas/RegistryCreds"},{"$ref":"#/components/schemas/CicdCreds"},{"$ref":"#/components/schemas/SourceCodeCreds"},{"$ref":"#/components/schemas/CloudProviderCreds"}],"discriminator":{"propertyName":"kind","mapping":{"cicd_pipeline":"#/components/schemas/CicdCreds","cloud_account":"#/components/schemas/CloudProviderCreds","cloud_database":"#/components/schemas/CloudProviderCreds","cloud_storage":"#/components/schemas/CloudProviderCreds","container_image":"#/components/schemas/RegistryCreds","k8s_cluster":"#/components/schemas/K8sCreds","load_balancer_cdn":"#/components/schemas/CloudProviderCreds","secrets_manager":"#/components/schemas/CloudProviderCreds","serverless_function":"#/components/schemas/CloudProviderCreds","source_code":"#/components/schemas/SourceCodeCreds"}}},{"type":"null"}],"title":"Kind Credentials"},"attached_repository_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Attached Repository Ids"},"disciplines":{"items":{"type":"string","enum":["cspm","ciem","dspm","serverless_security","edge_security","kspm","kiem","cwpp","aspm","api_security","ai_redteam","ai_spm","sbom_analysis"]},"type":"array","title":"Disciplines"}},"type":"object","required":["name","base_url"],"title":"TargetCreate"},"TargetOut":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"base_url":{"type":"string","title":"Base Url"},"scope":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Scope"},"exclude_paths":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Exclude Paths"},"has_credentials":{"type":"boolean","title":"Has Credentials"},"repository_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Repository Id"},"kind":{"type":"string","enum":["url","repo","llm","web_app","rest_api","graphql","websocket","grpc","cloud_account","serverless_function","cloud_storage","load_balancer_cdn","cloud_database","secrets_manager","source_code","cicd_pipeline","iac","container_image","k8s_cluster","package_registry","sbom","host","memory","mcp","agent","rag","ml_model","voice","android_app","ios_app","browser_extension","desktop_app","firmware","iot_device","ot_ics_scada"],"title":"Kind","default":"url"},"llm_config":{"anyOf":[{"$ref":"#/components/schemas/LlmConfig"},{"type":"null"}]},"kind_config":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/WebAppConfig"},{"$ref":"#/components/schemas/RestApiConfig"},{"$ref":"#/components/schemas/GraphqlConfig"},{"$ref":"#/components/schemas/WebsocketConfig"},{"$ref":"#/components/schemas/GrpcConfig"},{"$ref":"#/components/schemas/CloudAccountConfig"},{"$ref":"#/components/schemas/ServerlessFunctionConfig"},{"$ref":"#/components/schemas/CloudStorageConfig"},{"$ref":"#/components/schemas/LoadBalancerCdnConfig"},{"$ref":"#/components/schemas/CloudDatabaseConfig"},{"$ref":"#/components/schemas/SecretsManagerConfig"},{"$ref":"#/components/schemas/SourceCodeConfig"},{"$ref":"#/components/schemas/CicdPipelineConfig"},{"$ref":"#/components/schemas/IacConfig"},{"$ref":"#/components/schemas/ContainerImageConfig"},{"$ref":"#/components/schemas/K8sClusterConfig"},{"$ref":"#/components/schemas/PackageRegistryConfig"},{"$ref":"#/components/schemas/SbomConfig"},{"$ref":"#/components/schemas/HostKindConfig"},{"$ref":"#/components/schemas/MemoryKindConfig"},{"$ref":"#/components/schemas/McpConfig"},{"$ref":"#/components/schemas/AgentConfig"},{"$ref":"#/components/schemas/RagConfig"},{"$ref":"#/components/schemas/MlModelConfig"},{"$ref":"#/components/schemas/VoiceConfig"},{"$ref":"#/components/schemas/AndroidAppConfig"},{"$ref":"#/components/schemas/IosAppConfig"},{"$ref":"#/components/schemas/BrowserExtensionConfig"},{"$ref":"#/components/schemas/DesktopAppConfig"},{"$ref":"#/components/schemas/FirmwareConfig"},{"$ref":"#/components/schemas/IotDeviceConfig"},{"$ref":"#/components/schemas/OtIcsScadaConfig"}],"discriminator":{"propertyName":"kind","mapping":{"agent":"#/components/schemas/AgentConfig","android_app":"#/components/schemas/AndroidAppConfig","browser_extension":"#/components/schemas/BrowserExtensionConfig","cicd_pipeline":"#/components/schemas/CicdPipelineConfig","cloud_account":"#/components/schemas/CloudAccountConfig","cloud_database":"#/components/schemas/CloudDatabaseConfig","cloud_storage":"#/components/schemas/CloudStorageConfig","container_image":"#/components/schemas/ContainerImageConfig","desktop_app":"#/components/schemas/DesktopAppConfig","firmware":"#/components/schemas/FirmwareConfig","graphql":"#/components/schemas/GraphqlConfig","grpc":"#/components/schemas/GrpcConfig","host":"#/components/schemas/HostKindConfig","iac":"#/components/schemas/IacConfig","ios_app":"#/components/schemas/IosAppConfig","iot_device":"#/components/schemas/IotDeviceConfig","k8s_cluster":"#/components/schemas/K8sClusterConfig","load_balancer_cdn":"#/components/schemas/LoadBalancerCdnConfig","mcp":"#/components/schemas/McpConfig","memory":"#/components/schemas/MemoryKindConfig","ml_model":"#/components/schemas/MlModelConfig","ot_ics_scada":"#/components/schemas/OtIcsScadaConfig","package_registry":"#/components/schemas/PackageRegistryConfig","rag":"#/components/schemas/RagConfig","rest_api":"#/components/schemas/RestApiConfig","sbom":"#/components/schemas/SbomConfig","secrets_manager":"#/components/schemas/SecretsManagerConfig","serverless_function":"#/components/schemas/ServerlessFunctionConfig","source_code":"#/components/schemas/SourceCodeConfig","voice":"#/components/schemas/VoiceConfig","web_app":"#/components/schemas/WebAppConfig","websocket":"#/components/schemas/WebsocketConfig"}}},{"type":"null"}],"title":"Kind Config"},"has_kind_credentials":{"type":"boolean","title":"Has Kind Credentials","default":false},"attached_repository_ids":{"items":{"type":"string"},"type":"array","title":"Attached Repository Ids"},"disciplines":{"items":{"type":"string","enum":["cspm","ciem","dspm","serverless_security","edge_security","kspm","kiem","cwpp","aspm","api_security","ai_redteam","ai_spm","sbom_analysis"]},"type":"array","title":"Disciplines"},"weekly_digest_emails":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Weekly Digest Emails"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","name","base_url","has_credentials","created_at"],"title":"TargetOut"},"TargetTrendDelta":{"properties":{"scan_id":{"type":"string","title":"Scan Id"},"vs_prior_scan_id":{"type":"string","title":"Vs Prior Scan Id"},"new":{"type":"integer","title":"New"},"fixed":{"type":"integer","title":"Fixed"},"regressed":{"type":"integer","title":"Regressed"}},"type":"object","required":["scan_id","vs_prior_scan_id","new","fixed","regressed"],"title":"TargetTrendDelta"},"TargetTrendOut":{"properties":{"target":{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":"object","title":"Target"},"scans":{"items":{"$ref":"#/components/schemas/TargetTrendScan"},"type":"array","title":"Scans"},"deltas":{"items":{"$ref":"#/components/schemas/TargetTrendDelta"},"type":"array","title":"Deltas"},"mttr_days":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Mttr Days"},"open_total":{"type":"integer","title":"Open Total"},"fixed_total":{"type":"integer","title":"Fixed Total"}},"type":"object","required":["target","scans","deltas","mttr_days","open_total","fixed_total"],"title":"TargetTrendOut"},"TargetTrendScan":{"properties":{"id":{"type":"string","title":"Id"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"finished_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Finished At"},"status":{"type":"string","title":"Status"},"grade":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Grade"},"score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score"},"summary":{"additionalProperties":{"type":"integer"},"type":"object","title":"Summary"}},"type":"object","required":["id","created_at","finished_at","status","grade","score","summary"],"title":"TargetTrendScan"},"TargetUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":200,"minLength":1},{"type":"null"}],"title":"Name"},"base_url":{"anyOf":[{"type":"string","maxLength":2048,"minLength":1},{"type":"null"}],"title":"Base Url"},"scope":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Scope"},"exclude_paths":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Exclude Paths"},"credentials":{"anyOf":[{"$ref":"#/components/schemas/Credentials"},{"type":"null"}]},"clear_credentials":{"type":"boolean","title":"Clear Credentials","default":false},"llm_config":{"anyOf":[{"$ref":"#/components/schemas/LlmConfig"},{"type":"null"}]},"kind_config":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/WebAppConfig"},{"$ref":"#/components/schemas/RestApiConfig"},{"$ref":"#/components/schemas/GraphqlConfig"},{"$ref":"#/components/schemas/WebsocketConfig"},{"$ref":"#/components/schemas/GrpcConfig"},{"$ref":"#/components/schemas/CloudAccountConfig"},{"$ref":"#/components/schemas/ServerlessFunctionConfig"},{"$ref":"#/components/schemas/CloudStorageConfig"},{"$ref":"#/components/schemas/LoadBalancerCdnConfig"},{"$ref":"#/components/schemas/CloudDatabaseConfig"},{"$ref":"#/components/schemas/SecretsManagerConfig"},{"$ref":"#/components/schemas/SourceCodeConfig"},{"$ref":"#/components/schemas/CicdPipelineConfig"},{"$ref":"#/components/schemas/IacConfig"},{"$ref":"#/components/schemas/ContainerImageConfig"},{"$ref":"#/components/schemas/K8sClusterConfig"},{"$ref":"#/components/schemas/PackageRegistryConfig"},{"$ref":"#/components/schemas/SbomConfig"},{"$ref":"#/components/schemas/HostKindConfig"},{"$ref":"#/components/schemas/MemoryKindConfig"},{"$ref":"#/components/schemas/McpConfig"},{"$ref":"#/components/schemas/AgentConfig"},{"$ref":"#/components/schemas/RagConfig"},{"$ref":"#/components/schemas/MlModelConfig"},{"$ref":"#/components/schemas/VoiceConfig"},{"$ref":"#/components/schemas/AndroidAppConfig"},{"$ref":"#/components/schemas/IosAppConfig"},{"$ref":"#/components/schemas/BrowserExtensionConfig"},{"$ref":"#/components/schemas/DesktopAppConfig"},{"$ref":"#/components/schemas/FirmwareConfig"},{"$ref":"#/components/schemas/IotDeviceConfig"},{"$ref":"#/components/schemas/OtIcsScadaConfig"}],"discriminator":{"propertyName":"kind","mapping":{"agent":"#/components/schemas/AgentConfig","android_app":"#/components/schemas/AndroidAppConfig","browser_extension":"#/components/schemas/BrowserExtensionConfig","cicd_pipeline":"#/components/schemas/CicdPipelineConfig","cloud_account":"#/components/schemas/CloudAccountConfig","cloud_database":"#/components/schemas/CloudDatabaseConfig","cloud_storage":"#/components/schemas/CloudStorageConfig","container_image":"#/components/schemas/ContainerImageConfig","desktop_app":"#/components/schemas/DesktopAppConfig","firmware":"#/components/schemas/FirmwareConfig","graphql":"#/components/schemas/GraphqlConfig","grpc":"#/components/schemas/GrpcConfig","host":"#/components/schemas/HostKindConfig","iac":"#/components/schemas/IacConfig","ios_app":"#/components/schemas/IosAppConfig","iot_device":"#/components/schemas/IotDeviceConfig","k8s_cluster":"#/components/schemas/K8sClusterConfig","load_balancer_cdn":"#/components/schemas/LoadBalancerCdnConfig","mcp":"#/components/schemas/McpConfig","memory":"#/components/schemas/MemoryKindConfig","ml_model":"#/components/schemas/MlModelConfig","ot_ics_scada":"#/components/schemas/OtIcsScadaConfig","package_registry":"#/components/schemas/PackageRegistryConfig","rag":"#/components/schemas/RagConfig","rest_api":"#/components/schemas/RestApiConfig","sbom":"#/components/schemas/SbomConfig","secrets_manager":"#/components/schemas/SecretsManagerConfig","serverless_function":"#/components/schemas/ServerlessFunctionConfig","source_code":"#/components/schemas/SourceCodeConfig","voice":"#/components/schemas/VoiceConfig","web_app":"#/components/schemas/WebAppConfig","websocket":"#/components/schemas/WebsocketConfig"}}},{"type":"null"}],"title":"Kind Config"},"clear_kind_config":{"type":"boolean","title":"Clear Kind Config","default":false},"kind_credentials":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/K8sCreds"},{"$ref":"#/components/schemas/RegistryCreds"},{"$ref":"#/components/schemas/CicdCreds"},{"$ref":"#/components/schemas/SourceCodeCreds"},{"$ref":"#/components/schemas/CloudProviderCreds"}],"discriminator":{"propertyName":"kind","mapping":{"cicd_pipeline":"#/components/schemas/CicdCreds","cloud_account":"#/components/schemas/CloudProviderCreds","cloud_database":"#/components/schemas/CloudProviderCreds","cloud_storage":"#/components/schemas/CloudProviderCreds","container_image":"#/components/schemas/RegistryCreds","k8s_cluster":"#/components/schemas/K8sCreds","load_balancer_cdn":"#/components/schemas/CloudProviderCreds","secrets_manager":"#/components/schemas/CloudProviderCreds","serverless_function":"#/components/schemas/CloudProviderCreds","source_code":"#/components/schemas/SourceCodeCreds"}}},{"type":"null"}],"title":"Kind Credentials"},"clear_kind_credentials":{"type":"boolean","title":"Clear Kind Credentials","default":false},"attached_repository_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Attached Repository Ids"},"disciplines":{"anyOf":[{"items":{"type":"string","enum":["cspm","ciem","dspm","serverless_security","edge_security","kspm","kiem","cwpp","aspm","api_security","ai_redteam","ai_spm","sbom_analysis"]},"type":"array"},{"type":"null"}],"title":"Disciplines"},"weekly_digest_emails":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Weekly Digest Emails"}},"type":"object","title":"TargetUpdate","description":"Partial update: omit fields to leave them unchanged.\n\nCredentials behaviour:\n  * ``credentials = None`` leaves the stored credentials untouched.\n  * ``credentials = {}`` clears them.\n  * ``credentials = {...}`` replaces them.\n\nattached_repository_ids behaviour:\n  * ``None`` (omitted) leaves the existing set untouched.\n  * ``[]`` clears all attachments.\n  * ``[...]`` replaces the set with the provided IDs."},"ThreatModelGenerateIn":{"properties":{"method":{"type":"string","title":"Method","default":"stride"},"target_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Url"},"asset_types":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Asset Types"},"asset_names":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Asset Names"}},"type":"object","title":"ThreatModelGenerateIn"},"ThreatModelOut":{"properties":{"threat_model":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Threat Model"},"threat_model_updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Threat Model Updated At"},"markdown":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Markdown"},"module_priority_bias":{"items":{"type":"string"},"type":"array","title":"Module Priority Bias"}},"type":"object","required":["threat_model","threat_model_updated_at","markdown","module_priority_bias"],"title":"ThreatModelOut"},"ThreatModelPatchIn":{"properties":{"threat_model":{"additionalProperties":true,"type":"object","title":"Threat Model"}},"type":"object","required":["threat_model"],"title":"ThreatModelPatchIn","description":"Free-form patch — replaces the entire ``threat_model`` JSONB blob.\n\nOperators editing in the UI send the whole JSON back rather than a\nJSON-Patch — simpler, and the model is small enough that bandwidth\nis irrelevant."},"TokenPair":{"properties":{"access_token":{"type":"string","title":"Access Token"},"refresh_token":{"type":"string","title":"Refresh Token"},"token_type":{"type":"string","title":"Token Type","default":"bearer"}},"type":"object","required":["access_token","refresh_token"],"title":"TokenPair"},"TopRepoRow":{"properties":{"repository_id":{"type":"string","title":"Repository Id"},"full_name":{"type":"string","title":"Full Name"},"open_findings":{"type":"integer","title":"Open Findings"},"critical":{"type":"integer","title":"Critical"},"high":{"type":"integer","title":"High"}},"type":"object","required":["repository_id","full_name","open_findings","critical","high"],"title":"TopRepoRow"},"TopReposOut":{"properties":{"rows":{"items":{"$ref":"#/components/schemas/TopRepoRow"},"type":"array","title":"Rows"}},"type":"object","required":["rows"],"title":"TopReposOut"},"TraceDetail":{"properties":{"trace_id":{"type":"string","title":"Trace Id"},"spans":{"items":{"$ref":"#/components/schemas/SpanOut"},"type":"array","title":"Spans"}},"type":"object","required":["trace_id","spans"],"title":"TraceDetail"},"TraceSummary":{"properties":{"trace_id":{"type":"string","title":"Trace Id"},"name":{"type":"string","title":"Name"},"kind":{"type":"string","title":"Kind"},"status":{"type":"string","title":"Status"},"source":{"type":"string","title":"Source"},"target_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Id"},"started_at":{"type":"string","format":"date-time","title":"Started At"},"duration_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Ms"},"span_count":{"type":"integer","title":"Span Count"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"}},"type":"object","required":["trace_id","name","kind","status","source","target_id","started_at","duration_ms","span_count"],"title":"TraceSummary"},"TrafficDetail":{"properties":{"id":{"type":"string","title":"Id"},"captured_at":{"type":"string","format":"date-time","title":"Captured At"},"method":{"type":"string","title":"Method"},"url":{"type":"string","title":"Url"},"host":{"type":"string","title":"Host"},"path":{"type":"string","title":"Path"},"response_status":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Response Status"},"response_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Response Size"},"duration_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Ms"},"is_starred":{"type":"boolean","title":"Is Starred"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"body_capture":{"type":"string","title":"Body Capture"},"request_headers":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Request Headers"},"request_body":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Request Body"},"request_body_truncated":{"type":"boolean","title":"Request Body Truncated"},"response_headers":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Response Headers"},"response_body":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Response Body"},"response_body_truncated":{"type":"boolean","title":"Response Body Truncated"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"ws_frames":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Ws Frames"}},"type":"object","required":["id","captured_at","method","url","host","path","response_status","response_size","duration_ms","is_starred","tags","body_capture","request_headers","request_body","request_body_truncated","response_headers","response_body","response_body_truncated","notes","ws_frames"],"title":"TrafficDetail"},"TrafficPatch":{"properties":{"is_starred":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Starred"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","title":"TrafficPatch"},"TrafficRow":{"properties":{"id":{"type":"string","title":"Id"},"captured_at":{"type":"string","format":"date-time","title":"Captured At"},"method":{"type":"string","title":"Method"},"url":{"type":"string","title":"Url"},"host":{"type":"string","title":"Host"},"path":{"type":"string","title":"Path"},"response_status":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Response Status"},"response_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Response Size"},"duration_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Ms"},"is_starred":{"type":"boolean","title":"Is Starred"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"body_capture":{"type":"string","title":"Body Capture"}},"type":"object","required":["id","captured_at","method","url","host","path","response_status","response_size","duration_ms","is_starred","tags","body_capture"],"title":"TrafficRow"},"TrendOut":{"properties":{"points":{"items":{"$ref":"#/components/schemas/TrendPoint"},"type":"array","title":"Points"},"window_days":{"type":"integer","title":"Window Days"}},"type":"object","required":["points","window_days"],"title":"TrendOut"},"TrendPoint":{"properties":{"date":{"type":"string","title":"Date"},"new":{"type":"integer","title":"New"},"closed":{"type":"integer","title":"Closed"}},"type":"object","required":["date","new","closed"],"title":"TrendPoint"},"UnifiedFindingItem":{"properties":{"id":{"type":"string","title":"Id"},"source":{"type":"string","title":"Source"},"table":{"type":"string","title":"Table"},"title":{"type":"string","title":"Title"},"severity":{"type":"string","title":"Severity"},"risk_score":{"type":"number","title":"Risk Score"},"reachability":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reachability"},"ssvc_decision":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ssvc Decision"},"epss":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Epss"},"kev":{"type":"boolean","title":"Kev","default":false},"cwe_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cwe Id"},"owasp_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owasp Category"},"location":{"type":"string","title":"Location"},"package":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Package"},"fixed_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fixed Version"},"suppressed":{"type":"boolean","title":"Suppressed"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"workspace_id":{"type":"string","title":"Workspace Id"},"target_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Id"},"repository_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Repository Id"}},"type":"object","required":["id","source","table","title","severity","risk_score","location","suppressed","created_at","workspace_id"],"title":"UnifiedFindingItem"},"UnifiedFindingOut":{"properties":{"id":{"type":"string","title":"Id"},"kind":{"type":"string","title":"Kind"},"severity":{"type":"string","title":"Severity"},"title":{"type":"string","title":"Title"},"risk_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Risk Score"},"endpoint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Endpoint"},"file_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Path"},"cve":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cve"},"package":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Package"},"related":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Related"}},"type":"object","required":["id","kind","severity","title","risk_score","endpoint","file_path","cve","package","related"],"title":"UnifiedFindingOut"},"UnifiedFindingsPage":{"properties":{"items":{"items":{"$ref":"#/components/schemas/UnifiedFindingItem"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"}},"type":"object","required":["items","total","limit","offset"],"title":"UnifiedFindingsPage"},"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"},"VoiceConfig":{"properties":{"kind":{"type":"string","const":"voice","title":"Kind","default":"voice"},"source_type":{"type":"string","enum":["stt_endpoint","voice_bot","tts_endpoint","voice_auth"],"title":"Source Type"},"url":{"type":"string","title":"Url"},"audio_format":{"type":"string","enum":["wav","mp3","flac","ogg"],"title":"Audio Format","default":"wav"},"request_template":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Request Template"},"response_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Response Path"},"injection_phrase":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Injection Phrase"},"audio_probes":{"type":"boolean","title":"Audio Probes","default":false}},"additionalProperties":false,"type":"object","required":["source_type","url"],"title":"VoiceConfig","description":"Voice / Speech-AI endpoint target. Static transport probes always; crafted\naudio submission is consent-gated (audio_probes). See spec 2026-06-17."},"WebAppConfig":{"properties":{"kind":{"type":"string","const":"web_app","title":"Kind","default":"web_app"},"crawl_depth":{"type":"integer","maximum":10.0,"minimum":1.0,"title":"Crawl Depth","default":3},"max_pages":{"type":"integer","maximum":1000.0,"minimum":1.0,"title":"Max Pages","default":100},"browser_render":{"type":"boolean","title":"Browser Render","default":true},"api_spec_url":{"anyOf":[{"type":"string","maxLength":2083,"minLength":1,"format":"uri"},{"type":"null"}],"title":"Api Spec Url"}},"additionalProperties":false,"type":"object","title":"WebAppConfig"},"WebAppPayload":{"properties":{"kind":{"type":"string","const":"web_app","title":"Kind","default":"web_app"},"crawl_depth_override":{"anyOf":[{"type":"integer","maximum":10.0,"minimum":1.0},{"type":"null"}],"title":"Crawl Depth Override"},"max_pages_override":{"anyOf":[{"type":"integer","maximum":1000.0,"minimum":1.0},{"type":"null"}],"title":"Max Pages Override"}},"additionalProperties":false,"type":"object","title":"WebAppPayload"},"WebsocketConfig":{"properties":{"kind":{"type":"string","const":"websocket","title":"Kind","default":"websocket"},"subprotocols":{"items":{"type":"string"},"type":"array","title":"Subprotocols"},"origin_header":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Origin Header"},"auth_token_in_query":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Auth Token In Query"}},"additionalProperties":false,"type":"object","title":"WebsocketConfig"},"WebsocketPayload":{"properties":{"kind":{"type":"string","const":"websocket","title":"Kind","default":"websocket"}},"additionalProperties":false,"type":"object","title":"WebsocketPayload"},"WorkspaceCreate":{"properties":{"org_id":{"type":"string","title":"Org Id"},"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"}},"type":"object","required":["org_id","name"],"title":"WorkspaceCreate"},"WorkspaceMemberOut":{"properties":{"user_id":{"type":"string","title":"User Id"},"email":{"type":"string","title":"Email"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"role":{"type":"string","title":"Role"}},"type":"object","required":["user_id","email","role"],"title":"WorkspaceMemberOut"},"WorkspaceOut":{"properties":{"id":{"type":"string","title":"Id"},"org_id":{"type":"string","title":"Org Id"},"name":{"type":"string","title":"Name"},"slug":{"type":"string","title":"Slug"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"weekly_digest_emails":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Weekly Digest Emails"}},"type":"object","required":["id","org_id","name","slug","created_at"],"title":"WorkspaceOut"},"WorkspaceUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":200,"minLength":1},{"type":"null"}],"title":"Name"},"weekly_digest_emails":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Weekly Digest Emails"}},"type":"object","title":"WorkspaceUpdate"},"WorkstationComplianceOut":{"properties":{"user_id":{"type":"string","title":"User Id"},"email":{"type":"string","title":"Email"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"role":{"type":"string","title":"Role"},"studio_installed":{"type":"boolean","title":"Studio Installed"},"monitors_enabled":{"type":"boolean","title":"Monitors Enabled"},"overall_device_score":{"type":"integer","title":"Overall Device Score"},"overall_file_status":{"type":"string","title":"Overall File Status"},"device_checks_json":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Device Checks Json"},"file_checks_json":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"File Checks Json"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["user_id","email","role","studio_installed","monitors_enabled","overall_device_score","overall_file_status"],"title":"WorkstationComplianceOut"},"WorkstationComplianceReport":{"properties":{"overall_device_score":{"type":"integer","maximum":100.0,"minimum":0.0,"title":"Overall Device Score"},"overall_file_status":{"type":"string","maxLength":32,"title":"Overall File Status"},"device_checks":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Device Checks"},"file_checks":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"File Checks"}},"type":"object","required":["overall_device_score","overall_file_status"],"title":"WorkstationComplianceReport"},"_Ack":{"properties":{"ok":{"type":"boolean","title":"Ok"},"image":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image"},"scan_enqueued":{"type":"boolean","title":"Scan Enqueued","default":false}},"type":"object","required":["ok"],"title":"_Ack"},"_AiEnrichment":{"properties":{"exploit_walkthrough":{"type":"string","title":"Exploit Walkthrough"},"fix_recipe":{"type":"string","title":"Fix Recipe"},"reachability_signals":{"items":{"type":"string"},"type":"array","title":"Reachability Signals"},"references":{"items":{"type":"string"},"type":"array","title":"References"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"prompt_version":{"type":"string","title":"Prompt Version"},"cached":{"type":"boolean","title":"Cached"}},"type":"object","required":["exploit_walkthrough","fix_recipe","reachability_signals","references","prompt_version","cached"],"title":"_AiEnrichment"},"_ApplyAck":{"properties":{"ok":{"type":"boolean","title":"Ok"},"target_id":{"type":"string","title":"Target Id"},"applied_recommendations":{"type":"integer","title":"Applied Recommendations"}},"type":"object","required":["ok","target_id","applied_recommendations"],"title":"_ApplyAck"},"_Source":{"properties":{"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"license":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"License"},"retrieved_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Retrieved At"}},"type":"object","title":"_Source"},"_VerifyCallbackBody":{"properties":{"verdict":{"type":"string","enum":["confirmed","duplicate","informative","not-applicable"],"title":"Verdict"},"triager":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Triager"},"triage_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Triage Url"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["verdict"],"title":"_VerifyCallbackBody","description":"Body the partner sends when a triager confirms upstream."},"_VerifyWithHumansAck":{"properties":{"ok":{"type":"boolean","title":"Ok"},"integration_kind":{"type":"string","title":"Integration Kind"},"submission_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Submission Url"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["ok","integration_kind"],"title":"_VerifyWithHumansAck"},"_VerifyWithHumansBody":{"properties":{"integration_kind":{"type":"string","enum":["hackerone","bugcrowd","cobalt"],"title":"Integration Kind"},"integration_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Integration Id"}},"type":"object","required":["integration_kind"],"title":"_VerifyWithHumansBody","description":"Phase 4.2 — request body for ``POST /findings/{id}/verify-with-humans``.\n\n``integration_kind`` must match a partner integration the\nworkspace has configured (one of ``hackerone`` / ``bugcrowd`` /\n``cobalt`` from Phase 1.2)."},"pencheff_api__routers__integrations__IntegrationOut":{"properties":{"id":{"type":"string","title":"Id"},"kind":{"type":"string","title":"Kind"},"name":{"type":"string","title":"Name"},"severity_filter":{"type":"string","title":"Severity Filter"},"enabled":{"type":"boolean","title":"Enabled"},"target_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Target Ids"},"events":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Events"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","kind","name","severity_filter","enabled","created_at"],"title":"IntegrationOut"},"pencheff_api__routers__repos__IntegrationOut":{"properties":{"id":{"type":"string","title":"Id"},"provider":{"type":"string","title":"Provider"},"installation_id":{"type":"string","title":"Installation Id"},"account_login":{"type":"string","title":"Account Login"},"account_type":{"type":"string","title":"Account Type"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"},"installed_at":{"type":"string","format":"date-time","title":"Installed At"}},"type":"object","required":["id","provider","installation_id","account_login","account_type","avatar_url","installed_at"],"title":"IntegrationOut"}},"securitySchemes":{"PencheffApiKey":{"type":"http","scheme":"bearer","description":"Your Pencheff API key, sent as `Authorization: Bearer <key>`."},"WorkspaceId":{"type":"apiKey","in":"header","name":"X-Workspace-Id","description":"Target workspace UUID. Required only for org-scoped keys; leave blank for workspace-pinned keys."}}},"security":[{"PencheffApiKey":[],"WorkspaceId":[]}]}