{"openapi":"3.1.0","info":{"title":"CISO360AI API","description":"REST API + MCP server for CISO360AI — multi-tenant cybersecurity management platform operated by alterSec Limited (NZBN 9429047827035). See /llms.txt for an LLM-readable discovery index.","version":"1.0.0"},"paths":{"/":{"get":{"summary":"Root","description":"Root endpoint returning API information.","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health":{"get":{"summary":"Health Check","description":"Health check endpoint.","operationId":"health_check_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health/temporal":{"get":{"summary":"Worker fleet health check","description":"Liveness probe for the background worker fleet.","operationId":"temporal_health_check_health_temporal_get","responses":{"200":{"description":"Healthy","content":{"application/json":{"schema":{}}}},"503":{"description":"Degraded or unreachable"}}}},"/auth/me":{"get":{"tags":["auth"],"summary":"Me","operationId":"me_auth_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserInfo"}}}}},"security":[{"HTTPBearer":[]}]}},"/auth/me/orgs":{"get":{"tags":["auth"],"summary":"Get My Orgs","description":"Get all organizations for the current user.\n\nWhen the caller authenticates via API key, the response is filtered\nto the bound organisation only (defence-in-depth — keys are scoped\nto a single org by design).","operationId":"get_my_orgs_auth_me_orgs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/auth/me/projects":{"get":{"tags":["auth"],"summary":"Get My Orgs Projects","description":"Get all organizations and their projects for the current user.\n\nAPI-key callers see only data for the bound organisation.","operationId":"get_my_orgs_projects_auth_me_projects_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/MyProjectsEntry"},"type":"array","title":"Response Get My Orgs Projects Auth Me Projects Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/auth/me/api-context":{"get":{"tags":["auth"],"summary":"Get My Api Context","description":"Return the record IDs needed to call org/project routes.\n\nDesigned for API-key / MCP / smoke-test consumers. Same data source as\n``/me/projects``, but flattened to only the IDs the URL router expects.\nAPI-key callers see only the bound organisation (defence-in-depth\nagainst cross-org data leakage on orgless routes).","operationId":"get_my_api_context_auth_me_api_context_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiContextResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/auth/org/{org_id}/project/{project_id}/users/{user_id}/role":{"get":{"tags":["auth"],"summary":"Get User Role In Project","description":"Get a specific user's role in a project.\n\nThe caller must hold a role in the target project.\n\nReturns:\n    UserRoleResponse: the user_id, org_id, project_id, and list of roles.","operationId":"get_user_role_in_project_auth_org__org_id__project__project_id__users__user_id__role_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserRoleResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/projects":{"post":{"tags":["project"],"summary":"Create Project With Roles","description":"Create a new project with admin and reader roles.\nNOTE: Project ID must be main project ID of this organization.","operationId":"create_project_with_roles_org__org_id__projects_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateProjectWithRolesRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["project"],"summary":"List organization projects","description":"List all projects for a given organization with optional filtering.","operationId":"list_organization_projects_org__org_id__projects_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by project state","title":"State"},"description":"Filter by project state"},{"name":"main_only","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Show only main projects","default":false,"title":"Main Only"},"description":"Show only main projects"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ProjectInfo"},"title":"Response List Organization Projects Org  Org Id  Projects Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/roles":{"get":{"tags":["project"],"summary":"List Project Roles","operationId":"list_project_roles_org__org_id__project__project_id__roles_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}":{"delete":{"tags":["project"],"summary":"Delete a project","description":"Delete a project with soft or hard delete options. Supports same functionality as organization deletion.","operationId":"delete_project_org__org_id__project__project_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectDeleteRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["project"],"summary":"Get project details","description":"Get detailed information about a specific project.","operationId":"get_project_org__org_id__project__project_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectInfo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["project"],"summary":"Update project","description":"Update project information.","operationId":"update_project_org__org_id__project__project_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectInfo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/restore":{"post":{"tags":["project"],"summary":"Restore a soft-deleted project","description":"Restore a project that was previously soft-deleted. Requires main project admin role.","operationId":"restore_project_org__org_id__project__project_id__restore_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectInfo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/projects/deleted":{"get":{"tags":["project"],"summary":"List soft-deleted projects","description":"List all soft-deleted projects for the organization. Requires main project admin role.","operationId":"list_soft_deleted_projects_org__org_id__projects_deleted_get","security":[{"HTTPBearer":[]}],"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/ProjectInfo"},"title":"Response List Soft Deleted Projects Org  Org Id  Projects Deleted Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/lock":{"patch":{"tags":["project"],"summary":"Toggle project lock status","description":"Lock or unlock a project. Locked projects use soft-delete (recoverable). Locking requires a paid subscription.","operationId":"toggle_project_lock_org__org_id__project__project_id__lock_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectLockRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectInfo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/users/summary":{"get":{"tags":["users"],"summary":"Get User Summary","description":"Get user summary statistics for an organization project.\n\nReturns:\n    Dict containing total users, active users, inactive users, and admin users count","operationId":"get_user_summary_org__org_id__project__project_id__users_summary_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/users/{user_id}":{"get":{"tags":["users"],"summary":"Get User By Id","description":"Get a specific user by ID within an organization and project.\n\nArgs:\n    org_id: Organization identifier\n    project_id: Project identifier\n    user_id: User identifier\n\nReturns:\n    User object with roles for the project","operationId":"get_user_by_id_org__org_id__project__project_id__users__user_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["users"],"summary":"Update User","operationId":"update_user_org__org_id__project__project_id__users__user_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserUpdateWithRoles"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserInfo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["users"],"summary":"Delete User","description":"Soft-delete a user.\n\nNo identity-provider call is made — the soft-delete keeps the\naccount intact so restore is a single local UPDATE. Tenant\nbinding is enforced inside ``delete_by_id``; a foreign-user delete\nreturns False and is surfaced here as 404 (not 500 — the user does\nnot exist *for this admin*).","operationId":"delete_user_org__org_id__project__project_id__users__user_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/UserDeleteRequest"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/users":{"get":{"tags":["users"],"summary":"List Users","description":"List users with optional filtering and pagination.\n\nPagination is optional - if no limit/offset parameters are provided,\nreturns all matching records.","operationId":"list_users_org__org_id__project__project_id__users_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by user email","title":"Email"},"description":"Filter by user email"},{"name":"username","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by username","title":"Username"},"description":"Filter by username"},{"name":"family_name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by family name","title":"Family Name"},"description":"Filter by family name"},{"name":"given_name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by given name","title":"Given Name"},"description":"Filter by given name"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"enum":["active","inactive","suspended","pending"],"type":"string"},{"type":"null"}],"description":"Filter by user status","title":"Status"},"description":"Filter by user status"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":1000,"minimum":1},{"type":"null"}],"description":"Maximum number of records to return (optional - if not provided, returns all records)","title":"Limit"},"description":"Maximum number of records to return (optional - if not provided, returns all records)"},{"name":"offset","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"description":"Number of records to skip","title":"Offset"},"description":"Number of records to skip"},{"name":"order_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Order by field (optional)","title":"Order By"},"description":"Order by field (optional)"},{"name":"order_direction","in":"query","required":false,"schema":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"description":"Order direction","default":"desc","title":"Order Direction"},"description":"Order direction"},{"name":"include_deleted","in":"query","required":false,"schema":{"type":"boolean","description":"Include soft-deleted users in the response (admin only)","default":false,"title":"Include Deleted"},"description":"Include soft-deleted users in the response (admin only)"},{"name":"deleted_only","in":"query","required":false,"schema":{"type":"boolean","description":"Return only soft-deleted users (admin only, implies include_deleted)","default":false,"title":"Deleted Only"},"description":"Return only soft-deleted users (admin only, implies include_deleted)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedUserResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["users"],"summary":"Create User","operationId":"create_user_org__org_id__project__project_id__users_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserBase"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserInfo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/users/{user_id}/grants":{"post":{"tags":["users"],"summary":"Grant User","operationId":"grant_user_org__org_id__project__project_id__users__user_id__grants_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserGrantRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/grants/cross-org":{"post":{"tags":["users"],"summary":"Grant User Cross Org","description":"Grant roles to a user with cross-organization context.\norg_id : from organization where the user is being granted roles\nproject_id : from the project where the user is being granted roles\ngrant_request : contains the list of project_role_ids to be granted","operationId":"grant_user_cross_org_org__org_id__project__project_id__grants_cross_org_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserGrantRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/users/{user_id}/restore":{"post":{"tags":["users"],"summary":"Restore User","description":"Restore a previously soft-deleted user.\n\nFlips ``is_deleted=false`` and clears the audit-trail deletion\nfields. Memberships, role assignments and the identity-provider account\nwere left intact on soft-delete, so this is sufficient to fully\nrestore access. Idempotent.","operationId":"restore_user_org__org_id__project__project_id__users__user_id__restore_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/invitations":{"post":{"tags":["users"],"summary":"Admin Invite User","description":"Invite a user, by email, to this project (admin only).\n\nWorks whether the invitee is new, already in this organisation, or in\nanother organisation — granting access in each case. An invitation email\nis sent to existing users unless they are already active (who receive a\nsilent grant); new users receive the standard onboarding email.","operationId":"admin_invite_user_org__org_id__project__project_id__invitations_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminInvitationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/users/{user_id}/email":{"post":{"tags":["users"],"summary":"Send User Email Invitation","description":"Send email invitation to a user.\n\nArgs:\n    org_id: Organization identifier\n    project_id: Project identifier\n    user_id: User identifier\n    invitation_data: Email invitation data containing URL template\n\nReturns:\n    Success message","operationId":"send_user_email_invitation_org__org_id__project__project_id__users__user_id__email_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserEmailInvitationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/users":{"get":{"tags":["organizations"],"summary":"List Org Users","operationId":"list_org_users_org__org_id__users_get","security":[{"HTTPBearer":[]}],"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/UserInfo"},"title":"Response List Org Users Org  Org Id  Users Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/orgs":{"get":{"tags":["organizations"],"summary":"List Organizations","description":"List organizations the current user is a member of, with optional filtering.","operationId":"list_organizations_orgs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status","title":"Status"},"description":"Filter by status"},{"name":"subscription_level","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by subscription level","title":"Subscription Level"},"description":"Filter by subscription level"},{"name":"include_deleted","in":"query","required":false,"schema":{"type":"boolean","description":"Include soft-deleted organizations","default":false,"title":"Include Deleted"},"description":"Include soft-deleted organizations"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/OrgInfo"},"title":"Response List Organizations Orgs Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["organizations"],"summary":"Create Organization","description":"Create a new organization. Requires admin role in caller's own organization.","operationId":"create_organization_orgs_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgBase"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgInfo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}":{"get":{"tags":["organizations"],"summary":"Get Organization","description":"Get organization by ID. Requires main admin role in the organization.","operationId":"get_organization_org__org_id__get","security":[{"HTTPBearer":[]}],"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/OrgInfo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["organizations"],"summary":"Update Organization","description":"Update an organization. Requires admin role in the organization.","operationId":"update_organization_org__org_id__put","security":[{"HTTPBearer":[]}],"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/OrgInfo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["organizations"],"summary":"Delete Organization","description":"Delete an organisation and all its associated data.\n\nSupports both soft delete (default) and hard delete via the request body.\n\nSoft delete (``hard_delete=false``, default): marks the organisation as\ndeleted, preserves data relationships, and requires a deletion reason.\n\nHard delete (``hard_delete=true``): permanently removes the organisation\nalong with all its users and projects.\n\nRequires an admin role in the organisation; callers can only delete their\nown organisation.\n\nReturns:\n    dict: success message with deletion details.\n\nRaises:\n    HTTPException: if the organisation is not found, the caller lacks\n    permission, or the deletion fails.","operationId":"delete_organization_org__org_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgDeleteRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete Organization Org  Org Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/onboarding-profile":{"post":{"tags":["organizations"],"summary":"Save Org Onboarding Profile","description":"Persist the org-wide onboarding profile as soon as it's completed.\n\nThe onboarding wizard calls this on reaching the modules step so the organisation\nprofile (country/sector/organisation size/data sensitivity, plus the organisation\ncategory that drives the pricing segment + timezone) is captured even if the rest\nof the wizard is skipped. Set-once / first-write-wins — a later call never\noverwrites values already chosen. Requires admin role in the organisation.","operationId":"save_org_onboarding_profile_org__org_id__onboarding_profile_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingOrgProfileRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingOrgProfileResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/agent-policy":{"get":{"tags":["organizations"],"summary":"Get Agent Scope Policy","description":"Return the org's grantable ``csk_agent`` capability scopes.\n\nAny org member may read it so the key-create dialog can bound the scope\npicker. ``agent:safe`` is implicit and never listed.","operationId":"get_agent_scope_policy_org__org_id__agent_policy_get","security":[{"HTTPBearer":[]}],"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/AgentScopePolicy"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["organizations"],"summary":"Set Agent Scope Policy","description":"Set which agent capability scopes the organisation enables.\n\nAdmin-only. The body must be a subset of the supported agent capability\nscopes.","operationId":"set_agent_scope_policy_org__org_id__agent_policy_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentScopePolicyUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentScopePolicy"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/subscription-level":{"get":{"tags":["organizations"],"summary":"Get Org Subscription Level","description":"Get organization subscription level. Requires main admin role in the organization.","operationId":"get_org_subscription_level_org__org_id__subscription_level_get","security":[{"HTTPBearer":[]}],"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/OrgSubscriptionLevelResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/orgs/soft-deleted":{"get":{"tags":["organizations"],"summary":"List Soft Deleted Organizations","description":"List soft-deleted organizations. Only returns orgs the user is admin of.","operationId":"list_soft_deleted_organizations_orgs_soft_deleted_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/OrgInfo"},"type":"array","title":"Response List Soft Deleted Organizations Orgs Soft Deleted Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/org/{org_id}/restore":{"post":{"tags":["organizations"],"summary":"Restore Organization","description":"Restore a soft-deleted organization. Requires admin role in the organization.","operationId":"restore_organization_org__org_id__restore_post","security":[{"HTTPBearer":[]}],"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/OrgInfo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/asset/":{"post":{"tags":["assets"],"summary":"Create Asset","description":"Create a new asset.","operationId":"create_asset_org__org_id__project__project_id__asset__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["assets"],"summary":"List Assets","description":"List assets with optional filtering and pagination.\n\nPagination is optional. Without `limit` the response carries up to\n5000 assets — `pagination.total` is always the full count, so a shorter\n`assets` array than `total` means the rest need a paged request.","operationId":"list_assets_org__org_id__project__project_id__asset__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by asset name","title":"Name"},"description":"Filter by asset name"},{"name":"asset_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by asset type","title":"Asset Type"},"description":"Filter by asset type"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AssetCategory"},{"type":"null"}],"description":"Filter by asset category","title":"Category"},"description":"Filter by asset category"},{"name":"criticality","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AssetCriticality"},{"type":"null"}],"description":"Filter by asset criticality","title":"Criticality"},"description":"Filter by asset criticality"},{"name":"environment","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AssetEnvironment"},{"type":"null"}],"description":"Filter by asset environment","title":"Environment"},"description":"Filter by asset environment"},{"name":"lifecycle_stage","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AssetLifecycleStage"},{"type":"null"}],"description":"Filter by lifecycle stage","title":"Lifecycle Stage"},"description":"Filter by lifecycle stage"},{"name":"tags","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Filter by tags","title":"Tags"},"description":"Filter by tags"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":1000,"minimum":1},{"type":"null"}],"description":"Maximum number of records to return (optional - if not provided, returns all records)","title":"Limit"},"description":"Maximum number of records to return (optional - if not provided, returns all records)"},{"name":"offset","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"description":"Number of records to skip","title":"Offset"},"description":"Number of records to skip"},{"name":"order_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Order by field (optional)","title":"Order By"},"description":"Order by field (optional)"},{"name":"order_direction","in":"query","required":false,"schema":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"description":"Order direction","default":"desc","title":"Order Direction"},"description":"Order direction"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedAssetResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/asset/risk-stats":{"get":{"tags":["assets"],"summary":"Asset Risk Stats","description":"Per-asset active-finding severity counts, ranked — feeds Top Riskiest Assets.\n\nUsage category (a): free idempotent read — role-gated, tenant-scoped, bounded\n(limit clamped 1–50 in the service).","operationId":"asset_risk_stats_org__org_id__project__project_id__asset_risk_stats_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"description":"Number of top assets to return","default":5,"title":"Limit"},"description":"Number of top assets to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AssetRiskStat"},"title":"Response Asset Risk Stats Org  Org Id  Project  Project Id  Asset Risk Stats Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/asset/summary-stats":{"get":{"tags":["assets"],"summary":"Asset Summary Stats","description":"Asset counts by category, criticality and findings — feeds the summary tiles.\n\nTakes the same filters as the asset list, so the tiles always agree with the\ntable beneath them rather than with the page it happens to be showing.\n\nUsage category (a): free idempotent read — role-gated, tenant-scoped, fixed-size body.","operationId":"asset_summary_stats_org__org_id__project__project_id__asset_summary_stats_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by asset name","title":"Name"},"description":"Filter by asset name"},{"name":"asset_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by asset type","title":"Asset Type"},"description":"Filter by asset type"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AssetCategory"},{"type":"null"}],"description":"Filter by asset category","title":"Category"},"description":"Filter by asset category"},{"name":"criticality","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AssetCriticality"},{"type":"null"}],"description":"Filter by asset criticality","title":"Criticality"},"description":"Filter by asset criticality"},{"name":"environment","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AssetEnvironment"},{"type":"null"}],"description":"Filter by asset environment","title":"Environment"},"description":"Filter by asset environment"},{"name":"lifecycle_stage","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AssetLifecycleStage"},{"type":"null"}],"description":"Filter by lifecycle stage","title":"Lifecycle Stage"},"description":"Filter by lifecycle stage"},{"name":"tags","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Filter by tags","title":"Tags"},"description":"Filter by tags"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetSummaryStats"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/asset/coverage-stats":{"get":{"tags":["assets"],"summary":"Asset Coverage Stats","description":"Scan coverage by asset `last_seen` recency — feeds the Scan Coverage tile.\n\nUsage category (a): free idempotent read — role-gated, tenant-scoped, fixed-size body.","operationId":"asset_coverage_stats_org__org_id__project__project_id__asset_coverage_stats_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetCoverageStats"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/asset/discovery-timeline":{"get":{"tags":["assets"],"summary":"Asset Discovery Timeline","description":"Assets discovered per day, split by category — feeds the Assets Discovered chart.\n\nUsage category (a): free idempotent read — role-gated, tenant-scoped, fixed-size body.","operationId":"asset_discovery_timeline_org__org_id__project__project_id__asset_discovery_timeline_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetDiscoveryTimeline"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/asset/{asset_id}":{"get":{"tags":["assets"],"summary":"Get Asset","description":"Get an asset by ID.","operationId":"get_asset_org__org_id__project__project_id__asset__asset_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["assets"],"summary":"Update Asset","description":"Update an asset by ID.","operationId":"update_asset_org__org_id__project__project_id__asset__asset_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["assets"],"summary":"Delete Asset","description":"Delete an asset by ID.","operationId":"delete_asset_org__org_id__project__project_id__asset__asset_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/asset/search":{"post":{"tags":["assets"],"summary":"Search Assets","description":"Advanced search for assets by type, name, keywords in properties, and more.","operationId":"search_assets_org__org_id__project__project_id__asset_search_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetAdvancedSearchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/categories":{"get":{"tags":["assets"],"summary":"Get All Categories","description":"Get all available asset categories.","operationId":"get_all_categories_org__org_id__project__project_id__categories_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"},"title":"Response Get All Categories Org  Org Id  Project  Project Id  Categories Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/category/{category_name}/assets":{"get":{"tags":["assets"],"summary":"Get Assets By Category","description":"Get assets in a specific category with optional pagination.\n\nPagination is optional - if no limit/offset parameters are provided,\nreturns all matching records.","operationId":"get_assets_by_category_org__org_id__project__project_id__category__category_name__assets_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"category_name","in":"path","required":true,"schema":{"type":"string","title":"Category Name"}},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":1000,"minimum":1},{"type":"null"}],"description":"Maximum number of records to return (optional - if not provided, returns all records)","title":"Limit"},"description":"Maximum number of records to return (optional - if not provided, returns all records)"},{"name":"offset","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"description":"Number of records to skip","title":"Offset"},"description":"Number of records to skip"},{"name":"order_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Order by field (optional)","title":"Order By"},"description":"Order by field (optional)"},{"name":"order_direction","in":"query","required":false,"schema":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"description":"Order direction","default":"desc","title":"Order Direction"},"description":"Order direction"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedAssetResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/category/{category_name}/asset-types":{"get":{"tags":["assets"],"summary":"Get Asset Types By Category","description":"Get asset types associated with a specific category.","operationId":"get_asset_types_by_category_org__org_id__project__project_id__category__category_name__asset_types_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"category_name","in":"path","required":true,"schema":{"type":"string","title":"Category Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"},"title":"Response Get Asset Types By Category Org  Org Id  Project  Project Id  Category  Category Name  Asset Types Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/asset/{asset_id}/tags":{"post":{"tags":["assets"],"summary":"Add Asset Tag","description":"Add a tag to an asset.","operationId":"add_asset_tag_org__org_id__project__project_id__asset__asset_id__tags_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__routers__asset_router__TagAddRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["assets"],"summary":"Replace Asset Tags","description":"Replace all tags for an asset.","operationId":"replace_asset_tags_org__org_id__project__project_id__asset__asset_id__tags_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__routers__asset_router__TagsReplaceRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["assets"],"summary":"Get Asset Tags","description":"Get all tags for an asset.","operationId":"get_asset_tags_org__org_id__project__project_id__asset__asset_id__tags_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/asset/{asset_id}/tags/{tag}":{"delete":{"tags":["assets"],"summary":"Remove Asset Tag","description":"Remove a tag from an asset.","operationId":"remove_asset_tag_org__org_id__project__project_id__asset__asset_id__tags__tag__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"tag","in":"path","required":true,"schema":{"type":"string","title":"Tag"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/asset-tags":{"get":{"tags":["assets"],"summary":"List All Asset Tags","description":"Get all unique tags from all assets in the project.","operationId":"list_all_asset_tags_org__org_id__project__project_id__asset_tags_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/asset/report":{"post":{"tags":["assets"],"summary":"Generate Asset Report","description":"Generate asset report in CSV or PDF format with the same filtering options as list_assets.\n\nThis endpoint reuses the same filtering logic as the list_assets endpoint but generates\na downloadable report in the specified format (CSV or PDF) containing all matching assets.\n\nRequest body supports all the same filtering parameters as list_assets:\n- name: Filter by asset name\n- asset_type: Filter by asset type\n- category: Filter by asset category\n- criticality: Filter by asset criticality\n- environment: Filter by asset environment\n- lifecycle_stage: Filter by lifecycle stage\n- tags: Filter by tags\n- order_by: Order by field\n- order_direction: Order direction (asc/desc)\n\nPlus an additional format field:\n- format: \"csv\" or \"pdf\" to specify the output format","operationId":"generate_asset_report_org__org_id__project__project_id__asset_report_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetReportRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/events/":{"post":{"tags":["events"],"summary":"Create Event","description":"Create a new event record.\n\nArgs:\n    event_data: Event creation data\n    context: User context with authentication\n    event_service: Event service dependency\n\nReturns:\n    Created event information","operationId":"create_event_org__org_id__project__project_id__events__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventInfo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["events"],"summary":"Get Events","description":"Get events with pagination and filtering.\n\nArgs:\n    page: Page number (1-based)\n    limit: Number of events per page\n    event_type: Filter by event type\n    scan_id: Filter by scan ID\n    scan_instance_id: Filter by scan instance ID\n    parent_id: Filter by parent ID\n    tags: Filter by tags (comma-separated)\n    context: User context with authentication\n    event_service: Event service dependency\n\nReturns:\n    Paginated list of events","operationId":"get_events_org__org_id__project__project_id__events__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Events per page","default":20,"title":"Limit"},"description":"Events per page"},{"name":"event_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by event type","title":"Event Type"},"description":"Filter by event type"},{"name":"scan_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by scan ID","title":"Scan Id"},"description":"Filter by scan ID"},{"name":"scan_instance_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by scan instance ID","title":"Scan Instance Id"},"description":"Filter by scan instance ID"},{"name":"parent_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by parent ID","title":"Parent Id"},"description":"Filter by parent ID"},{"name":"tags","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by tags (comma-separated)","title":"Tags"},"description":"Filter by tags (comma-separated)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SecurePaginatedResponse_EventInfo_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/events/bulk":{"post":{"tags":["events"],"summary":"Create Events Bulk","description":"Create multiple event records in bulk.\n\nThis endpoint efficiently creates multiple events in a single request,\nideal for scan engine output or batch imports.\n\nArgs:\n    org_id: Organization ID\n    project_id: Project ID\n    request: Bulk event creation request with list of events\n    event_service: Event service dependency\n\nReturns:\n    BulkEventCreateResponse with creation statistics and results\n\nRaises:\n    HTTPException: If validation fails or all events fail to create","operationId":"create_events_bulk_org__org_id__project__project_id__events_bulk_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkEventCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkEventCreateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/events/{event_id}":{"get":{"tags":["events"],"summary":"Get Event","description":"Get event by ID.\n\nArgs:\n    event_id: Event ID to retrieve\n    context: User context with authentication\n    event_service: Event service dependency\n\nReturns:\n    Event information\n\nRaises:\n    HTTPException: If event not found","operationId":"get_event_org__org_id__project__project_id__events__event_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventInfo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["events"],"summary":"Update Event","description":"Update an existing event.\n\nArgs:\n    event_data: Event update data\n    event_id: Event ID to update\n    context: User context with authentication\n    event_service: Event service dependency\n\nReturns:\n    Updated event information\n\nRaises:\n    HTTPException: If event not found","operationId":"update_event_org__org_id__project__project_id__events__event_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventInfo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["events"],"summary":"Delete Event","description":"Delete an event by ID.\n\nArgs:\n    event_id: Event ID to delete\n    context: User context with authentication (admin only)\n    event_service: Event service dependency\n\nRaises:\n    HTTPException: If event not found","operationId":"delete_event_org__org_id__project__project_id__events__event_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/events/by-type/{event_type}":{"get":{"tags":["events"],"summary":"Get Events By Type","description":"Get events by type.\n\nArgs:\n    event_type: Event type to filter by\n    limit: Maximum number of events to return\n    context: User context with authentication\n    event_service: Event service dependency\n\nReturns:\n    List of events of the specified type","operationId":"get_events_by_type_org__org_id__project__project_id__events_by_type__event_type__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"event_type","in":"path","required":true,"schema":{"type":"string","title":"Event Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Maximum number of events to return","default":100,"title":"Limit"},"description":"Maximum number of events to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EventInfo"},"title":"Response Get Events By Type Org  Org Id  Project  Project Id  Events By Type  Event Type  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/events/by-scan/{scan_id}":{"get":{"tags":["events"],"summary":"Get Events By Scan","description":"Get all events for a specific scan.\n\nArgs:\n    scan_id: Scan ID to filter by\n    limit: Maximum number of events to return\n    context: User context with authentication\n    event_service: Event service dependency\n\nReturns:\n    List of events for the scan","operationId":"get_events_by_scan_org__org_id__project__project_id__events_by_scan__scan_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"description":"Maximum number of events to return","default":1000,"title":"Limit"},"description":"Maximum number of events to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EventInfo"},"title":"Response Get Events By Scan Org  Org Id  Project  Project Id  Events By Scan  Scan Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/events/by-scan-instance/{scan_instance_id}":{"get":{"tags":["events"],"summary":"Get Events By Scan Instance","description":"Get all events for a specific scan instance with optional filtering.\n\nArgs:\n    scan_instance_id: Scan instance ID to filter by\n    limit: Maximum number of events to return\n    search: Optional search query to filter events by data field\n    event_type: Optional event type filter\n    context: User context with authentication\n    event_service: Event service dependency\n\nReturns:\n    List of events for the scan instance","operationId":"get_events_by_scan_instance_org__org_id__project__project_id__events_by_scan_instance__scan_instance_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"scan_instance_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Instance Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"description":"Maximum number of events to return","default":1000,"title":"Limit"},"description":"Maximum number of events to return"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search query to filter events by data field","title":"Search"},"description":"Search query to filter events by data field"},{"name":"event_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter events by type","title":"Event Type"},"description":"Filter events by type"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EventInfo"},"title":"Response Get Events By Scan Instance Org  Org Id  Project  Project Id  Events By Scan Instance  Scan Instance Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/events/types/":{"get":{"tags":["events"],"summary":"Get Event Types","description":"Get all distinct event types.\n\nArgs:\n    context: User context with authentication\n    event_service: Event service dependency\n\nReturns:\n    List of unique event types","operationId":"get_event_types_org__org_id__project__project_id__events_types__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"},"title":"Response Get Event Types Org  Org Id  Project  Project Id  Events Types  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/events/stats/":{"get":{"tags":["events"],"summary":"Get Event Stats","description":"Get event statistics.\n\nArgs:\n    context: User context with authentication\n    event_service: Event service dependency\n\nReturns:\n    Dictionary with event statistics including total count, events by type, etc.","operationId":"get_event_stats_org__org_id__project__project_id__events_stats__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Event Stats Org  Org Id  Project  Project Id  Events Stats  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/events/{event_id}/mark-as-vulnerability":{"post":{"tags":["events"],"summary":"Mark Event As Vulnerability","description":"Mark an event as a vulnerability by creating a vulnerability record from event data.\n\nArgs:\n    org_id: Organization ID\n    project_id: Project ID\n    event_id: Event ID to mark as vulnerability\n    context: User context with authentication (admin only)\n    event_service: Event service dependency\n\nReturns:\n    Created vulnerability information\n\nRaises:\n    HTTPException: If event not found or cannot be converted to vulnerability","operationId":"mark_event_as_vulnerability_org__org_id__project__project_id__events__event_id__mark_as_vulnerability_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VulnerabilityInfo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/events/mark-as-vulnerability-by-types":{"post":{"tags":["events"],"summary":"Mark Events As Vulnerabilities By Types","description":"Mark all events of specified types as vulnerabilities.\n\nArgs:\n    org_id: Organization ID\n    project_id: Project ID\n    request: Request containing list of event types to filter by\n    context: User context with authentication (admin only)\n    event_service: Event service dependency\n\nReturns:\n    List of created vulnerability information\n\nRaises:\n    HTTPException: If any event type is not supported or no events found","operationId":"mark_events_as_vulnerabilities_by_types_org__org_id__project__project_id__events_mark_as_vulnerability_by_types_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarkEventsByTypeRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/VulnerabilityInfo"},"title":"Response Mark Events As Vulnerabilities By Types Org  Org Id  Project  Project Id  Events Mark As Vulnerability By Types Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/events/mark-as-assets":{"post":{"tags":["events"],"summary":"Mark Events As Assets","description":"Convert multiple events to assets by their IDs.\n\nThis endpoint converts events (like DNS_NAME, IP_ADDRESS, etc.) into structured\nasset records. Supports both single and bulk conversions.\n\nArgs:\n    org_id: Organization ID\n    project_id: Project ID\n    request: Request containing list of event IDs to convert\n    event_asset_service: EventAssetService dependency\n    org_service: Organization service dependency\n    project_service: Project service dependency\n\nReturns:\n    Dictionary with conversion results including success count, failures, and created assets\n\nRaises:\n    HTTPException: If all events fail to convert","operationId":"mark_events_as_assets_org__org_id__project__project_id__events_mark_as_assets_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkMarkAsAssetRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/events/mark-as-vulnerability-finding":{"post":{"tags":["events"],"summary":"Mark Event As Vulnerability And Finding","description":"Mark an event as both a vulnerability and a finding.\n\nThis endpoint runs the full promotion in one call:\n1. Look up the event by ID\n2. Resolve the affected asset (uses the provided asset_id, reuses an\n   existing match, or creates a new asset)\n3. Create a vulnerability from the event\n4. Create a finding that links the asset to the vulnerability\n5. Record that the vulnerability affects the asset\n\nArgs:\n    org_id: Organization ID\n    project_id: Project ID\n    request: Request containing event_id and optional asset_id\n\nReturns:\n    Dictionary with created IDs and relationship counts\n\nRaises:\n    HTTPException: If event not found or conversion fails","operationId":"mark_event_as_vulnerability_and_finding_org__org_id__project__project_id__events_mark_as_vulnerability_finding_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarkAsVulnerabilityFindingRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/events/mark-as-vulnerability-finding-bulk":{"post":{"tags":["events"],"summary":"Mark Events As Vulnerability And Finding Bulk","description":"Bulk convert events to vulnerability + finding pairs.\n\nProcesses all events in a single request with one namespace switch,\nreusing DB connections across all events. Much more efficient than\ncalling mark-as-vulnerability-finding per event.","operationId":"mark_events_as_vulnerability_and_finding_bulk_org__org_id__project__project_id__events_mark_as_vulnerability_finding_bulk_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkMarkAsVulnerabilityFindingRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkMarkAsVulnerabilityFindingResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/scans/":{"post":{"tags":["scans"],"summary":"Create Scan","description":"Create a new scan record.\n\nFor scheduled scans, this also creates an initial scan instance and\nregisters the recurring schedule immediately (without running it now) so the\nscan starts honouring its cadence. The onboarding domain scan is held until\nemail verification and registered at that point, so it is skipped here.\nScheduling never blocks scan creation: a scheduling-engine outage leaves the\nscan record created.\n\nArgs:\n    scan_data: Scan creation data\n    context: User context with authentication\n    scan_service: Scan service dependency\n\nReturns:\n    Created scan information","operationId":"create_scan_org__org_id__project__project_id__scans__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanInfo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["scans"],"summary":"Get Scans","description":"Get scans with pagination and filtering.\n\nArgs:\n    page: Page number (1-based)\n    limit: Number of scans per page\n    name_filter: Filter by scan name (partial match)\n    target_filter: Filter by target (exact match)\n    workflow_filter: Filter by workflow name (partial match)\n    run_mode_filter: Filter by run mode (ondemand or scheduled)\n    status_filter: Filter by status (pending, running, paused)\n    context: User context with authentication\n    scan_service: Scan service dependency\n\nReturns:\n    Paginated list of scans","operationId":"get_scans_org__org_id__project__project_id__scans__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Scans per page","default":20,"title":"Limit"},"description":"Scans per page"},{"name":"name_filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by scan name (partial match)","title":"Name Filter"},"description":"Filter by scan name (partial match)"},{"name":"target_filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by target (exact match)","title":"Target Filter"},"description":"Filter by target (exact match)"},{"name":"workflow_filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by workflow name (partial match)","title":"Workflow Filter"},"description":"Filter by workflow name (partial match)"},{"name":"run_mode_filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by run mode (ondemand or scheduled)","title":"Run Mode Filter"},"description":"Filter by run mode (ondemand or scheduled)"},{"name":"status_filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status (pending, running, paused)","title":"Status Filter"},"description":"Filter by status (pending, running, paused)"},{"name":"include_schedule_runs","in":"query","required":false,"schema":{"type":"boolean","description":"Include each scheduled scan's recent and upcoming runs. Off by default: it costs one scheduling round-trip per scheduled scan, and most callers only render the scan itself.","default":false,"title":"Include Schedule Runs"},"description":"Include each scheduled scan's recent and upcoming runs. Off by default: it costs one scheduling round-trip per scheduled scan, and most callers only render the scan itself."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SecurePaginatedResponse_ScanInfoExtended_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/scans/posture-delta":{"get":{"tags":["scans"],"summary":"Get Posture Delta","description":"New assets, vulnerabilities and findings discovered since the last scan.\n\nReturns ``last_scan_at`` and the three ``new_*`` counts (active items only).\nAll zero when no scan has run yet.","operationId":"get_posture_delta_org__org_id__project__project_id__scans_posture_delta_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanPostureDelta"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/scans/{scan_id}":{"get":{"tags":["scans"],"summary":"Get Scan","description":"Get scan by ID with schedule information.\n\nArgs:\n    scan_id: Scan ID to retrieve\n    context: User context with authentication\n\nReturns:\n    Extended scan information including recent and upcoming runs for scheduled scans\n\nRaises:\n    HTTPException: If scan not found","operationId":"get_scan_org__org_id__project__project_id__scans__scan_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"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/ScanInfoExtended"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["scans"],"summary":"Update Scan","description":"Update an existing scan.\n\nArgs:\n    scan_id: Scan ID to update\n    scan_data: Scan update data\n    context: User context with authentication\n    scan_service: Scan service dependency\n\nReturns:\n    Updated scan information\n\nRaises:\n    HTTPException: If scan not found","operationId":"update_scan_org__org_id__project__project_id__scans__scan_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanInfo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["scans"],"summary":"Delete Scan","description":"Delete a scan by ID.\n\nFor scheduled scans, this also removes the associated recurring schedule.\n\nArgs:\n    org_id: Organization ID\n    project_id: Project ID\n    scan_id: Scan ID to delete\n    context: User context with authentication (admin only)\n\nRaises:\n    HTTPException: If scan not found","operationId":"delete_scan_org__org_id__project__project_id__scans__scan_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"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"}}}}}}},"/org/{org_id}/project/{project_id}/scans/{scan_id}/with-instances":{"get":{"tags":["scans"],"summary":"Get Scan With Instances","description":"Get scan with all its instances.\n\nArgs:\n    scan_id: Scan ID to retrieve\n    context: User context with authentication\n    scan_service: Scan service dependency\n\nReturns:\n    Scan with all associated instances\n\nRaises:\n    HTTPException: If scan not found","operationId":"get_scan_with_instances_org__org_id__project__project_id__scans__scan_id__with_instances_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"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/ScanWithInstances"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/scans/stats/":{"get":{"tags":["scans"],"summary":"Get Scan Stats","description":"Get scan statistics.\n\nArgs:\n    context: User context with authentication\n    scan_service: Scan service dependency\n\nReturns:\n    Dictionary with scan statistics including total count, instances by status, etc.","operationId":"get_scan_stats_org__org_id__project__project_id__scans_stats__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Scan Stats Org  Org Id  Project  Project Id  Scans Stats  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/scans/{scan_id}/instances/":{"post":{"tags":["scans"],"summary":"Create Scan Instance","description":"Create a new scan instance for a scan.\n\nArgs:\n    org_id: Organization ID\n    project_id: Project ID\n    scan_id: ID of the scan to create instance for\n    instance_data: Scan instance creation data\n    context: User context with authentication\n    scan_service: Scan service dependency\n\nReturns:\n    Created scan instance information","operationId":"create_scan_instance_org__org_id__project__project_id__scans__scan_id__instances__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanInstanceCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanInstanceInfo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["scans"],"summary":"Get Scan Instances For Scan","description":"Get all scan instances for a specific scan with pagination.\n\nArgs:\n    scan_id: Scan ID to get instances for\n    page: Page number (1-based)\n    limit: Number of scan instances per page\n    context: User context with authentication\n    scan_service: Scan service dependency\n\nReturns:\n    Paginated list of scan instances for the scan","operationId":"get_scan_instances_for_scan_org__org_id__project__project_id__scans__scan_id__instances__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Scan instances per page","default":20,"title":"Limit"},"description":"Scan instances per page"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SecurePaginatedResponse_ScanInstanceInfo_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/scans/{scan_id}/instances/get-or-create":{"post":{"tags":["scans"],"summary":"Get Or Create Scan Instance","description":"Get or create a scan instance for the given scan.","operationId":"get_or_create_scan_instance_org__org_id__project__project_id__scans__scan_id__instances_get_or_create_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanInstanceGetOrCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanInstanceInfo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/scans/instances/{scan_instance_id}/finalize":{"post":{"tags":["scans"],"summary":"Finalise a completed scan instance","description":"Run post-scan processing for a completed scan instance.\n\nIdempotent and safe to retry. Returns 202 (accepted) immediately.","operationId":"finalize_scan_conversion_org__org_id__project__project_id__scans_instances__scan_instance_id__finalize_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"scan_instance_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Instance Id"}}],"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/scans/instances/{instance_id}":{"get":{"tags":["scans"],"summary":"Get Scan Instance","description":"Get scan instance by ID.\n\nArgs:\n    instance_id: Scan instance ID to retrieve\n    context: User context with authentication\n    scan_service: Scan service dependency\n\nReturns:\n    Scan instance information\n\nRaises:\n    HTTPException: If scan instance not found","operationId":"get_scan_instance_org__org_id__project__project_id__scans_instances__instance_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"instance_id","in":"path","required":true,"schema":{"type":"string","title":"Instance Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanInstanceInfo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["scans"],"summary":"Update Scan Instance","description":"Update an existing scan instance.\n\nArgs:\n    instance_id: Scan instance ID to update\n    instance_data: Scan instance update data\n    context: User context with authentication\n    scan_service: Scan service dependency\n\nReturns:\n    Updated scan instance information\n\nRaises:\n    HTTPException: If scan instance not found","operationId":"update_scan_instance_org__org_id__project__project_id__scans_instances__instance_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"instance_id","in":"path","required":true,"schema":{"type":"string","title":"Instance Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanInstanceUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanInstanceInfo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/scans/instances/{instance_id}/summary":{"get":{"tags":["scans"],"summary":"Get Scan Instance Summary","description":"Return authoritative DB-truth counts for a scan_instance.\n\nBacks the Live Scan view's \"swap to DB truth on completion\" — the\nSSE-accumulated tiles are good for live animation but undercount\nevents and conflate vulns with findings.","operationId":"get_scan_instance_summary_org__org_id__project__project_id__scans_instances__instance_id__summary_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"instance_id","in":"path","required":true,"schema":{"type":"string","title":"Instance Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanInstanceSummary"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/scans/instances/":{"get":{"tags":["scans"],"summary":"Get Scan Instances","description":"Get scan instances with associated scan information, with pagination and filtering.\n\nArgs:\n    page: Page number (1-based)\n    limit: Number of scan instances per page\n    status_filter: Filter by scan instance status\n    run_type_filter: Filter by run type\n    context: User context with authentication\n    scan_service: Scan service dependency\n\nReturns:\n    Paginated list of scan instances with scan information","operationId":"get_scan_instances_org__org_id__project__project_id__scans_instances__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Scan instances per page","default":20,"title":"Limit"},"description":"Scan instances per page"},{"name":"status_filter","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/ScanStatus"},{"type":"null"}],"description":"Filter by scan instance status","title":"Status Filter"},"description":"Filter by scan instance status"},{"name":"run_type_filter","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/RunMode"},{"type":"null"}],"description":"Filter by run type","title":"Run Type Filter"},"description":"Filter by run type"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SecurePaginatedResponse_ScanInstanceWithScan_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/scans/{scan_id}/trigger":{"post":{"tags":["scans"],"summary":"Trigger Scan","description":"Trigger a scan run immediately.\n\nArgs:\n    org_id: Organization ID\n    project_id: Project ID\n    scan_id: ID of the scan to trigger\n    context: User context with authentication\n\nReturns:\n    Trigger scan response with scan instance and workflow information\n\nRaises:\n    HTTPException: 402 when the org's monthly manual-scan quota is exhausted,\n        or if the scan is not found / workflow execution fails.","operationId":"trigger_scan_org__org_id__project__project_id__scans__scan_id__trigger_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerScanRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerScanResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/scans/{scan_id}/pause":{"post":{"tags":["scans"],"summary":"Pause Scheduled Scan","description":"Pause a scheduled scan.\n\nOnly scheduled scans can be paused; on-demand scans cannot.\n\nArgs:\n    org_id: Organization ID\n    project_id: Project ID\n    scan_id: ID of the scan to pause\n    context: User context with authentication\n\nReturns:\n    Dictionary with pause operation result\n\nRaises:\n    HTTPException: If scan not found, not scheduled, or pause fails","operationId":"pause_scheduled_scan_org__org_id__project__project_id__scans__scan_id__pause_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"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 Pause Scheduled Scan Org  Org Id  Project  Project Id  Scans  Scan Id  Pause Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/scans/{scan_id}/resume":{"post":{"tags":["scans"],"summary":"Resume Scheduled Scan","description":"Resume a paused scheduled scan.\n\nOnly scheduled scans can be resumed; on-demand scans cannot.\n\nArgs:\n    org_id: Organization ID\n    project_id: Project ID\n    scan_id: ID of the scan to resume\n    context: User context with authentication\n\nReturns:\n    Dictionary with resume operation result\n\nRaises:\n    HTTPException: If scan not found, not scheduled, or resume fails","operationId":"resume_scheduled_scan_org__org_id__project__project_id__scans__scan_id__resume_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"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 Resume Scheduled Scan Org  Org Id  Project  Project Id  Scans  Scan Id  Resume Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/scans/{scan_id}/schedule-status":{"get":{"tags":["scans"],"summary":"Get Schedule Scan Status","description":"Get scheduled scan status including recent and upcoming runs.\n\nArgs:\n    org_id: Organization ID\n    project_id: Project ID\n    scan_id: ID of the scheduled scan\n    context: User context with authentication\n\nReturns:\n    ScheduleScanStatusResponse with recent and upcoming run information\n\nRaises:\n    HTTPException: If scan not found, not scheduled, or status retrieval fails","operationId":"get_schedule_scan_status_org__org_id__project__project_id__scans__scan_id__schedule_status_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"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/ScheduleScanStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/scans/instances/{instance_id}/status":{"put":{"tags":["scans"],"summary":"Update Scan Instance Status Internal","description":"Update scan instance status (internal worker callback).","operationId":"update_scan_instance_status_internal_org__org_id__project__project_id__scans_instances__instance_id__status_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"instance_id","in":"path","required":true,"schema":{"type":"string","title":"Instance Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Status Update"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/vulnerabilities/":{"post":{"tags":["vulnerabilities"],"summary":"Create Vulnerability","description":"Create a new vulnerability record.\n\nArgs:\n    org_id: Organization ID\n    project_id: Project ID\n    vulnerability_data: Vulnerability creation data\n    context: User context with authentication\n    vulnerability_service: Vulnerability service dependency\n\nReturns:\n    Created vulnerability information","operationId":"create_vulnerability_org__org_id__project__project_id__vulnerabilities__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VulnerabilityCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VulnerabilityInfo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["vulnerabilities"],"summary":"List Vulnerabilities","description":"List vulnerabilities with page-based pagination and advanced filtering.\n\nArgs:\n    org_id: Organization ID\n    project_id: Project ID\n    context: User context with authentication\n    vulnerability_service: Vulnerability service dependency\n    page: Page number (1-based)\n    limit: Number of vulnerabilities per page\n    asset_id: Optional asset ID to filter vulnerabilities that affect this asset\n    severity: Filter by severity level\n    cve_id: Filter by CVE ID (partial match)\n    name: Filter by vulnerability name (partial match)\n    description: Search in description (partial match)\n    exploit_available: Filter by exploit availability\n    patch_available: Filter by patch availability\n    tags: Filter by tags (comma-separated list)\n\nReturns:\n    Paginated list of vulnerabilities with metadata","operationId":"list_vulnerabilities_org__org_id__project__project_id__vulnerabilities__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Vulnerabilities per page","default":20,"title":"Limit"},"description":"Vulnerabilities per page"},{"name":"asset_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter vulnerabilities by specific asset ID","title":"Asset Id"},"description":"Filter vulnerabilities by specific asset ID"},{"name":"severity","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by severity level (e.g., CRITICAL, HIGH, MEDIUM, LOW)","title":"Severity"},"description":"Filter by severity level (e.g., CRITICAL, HIGH, MEDIUM, LOW)"},{"name":"cve_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by CVE ID","title":"Cve Id"},"description":"Filter by CVE ID"},{"name":"name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by vulnerability name","title":"Name"},"description":"Filter by vulnerability name"},{"name":"description","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search in description","title":"Description"},"description":"Search in description"},{"name":"exploit_available","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter by exploit availability","title":"Exploit Available"},"description":"Filter by exploit availability"},{"name":"patch_available","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter by patch availability","title":"Patch Available"},"description":"Filter by patch availability"},{"name":"tags","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Filter by tags (comma-separated list)","title":"Tags"},"description":"Filter by tags (comma-separated list)"},{"name":"kev","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter to known-exploited (CISA KEV) vulnerabilities","title":"Kev"},"description":"Filter to known-exploited (CISA KEV) vulnerabilities"},{"name":"epss_min","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"description":"Minimum EPSS exploit probability (0–1)","title":"Epss Min"},"description":"Minimum EPSS exploit probability (0–1)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SecurePaginatedResponse_VulnerabilityInfo_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/vulnerabilities/stats/":{"get":{"tags":["vulnerabilities"],"summary":"Get Vulnerability Stats","description":"Get comprehensive vulnerability statistics.\n\nArgs:\n    org_id: Organization ID\n    project_id: Project ID\n    context: User context with authentication\n    vulnerability_service: Vulnerability service dependency\n    asset_id: Optional asset ID to filter vulnerabilities by specific asset\n\nReturns:\n    Dictionary with comprehensive vulnerability statistics","operationId":"get_vulnerability_stats_org__org_id__project__project_id__vulnerabilities_stats__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"asset_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Vulnerability Stats Org  Org Id  Project  Project Id  Vulnerabilities Stats  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/vulnerabilities/stats/severity":{"get":{"tags":["vulnerabilities"],"summary":"Get Vulnerability Severity Stats","description":"Get vulnerability count statistics grouped by severity.\n\nArgs:\n    org_id: Organization ID\n    project_id: Project ID\n    context: User context with authentication\n    vulnerability_service: Vulnerability service dependency\n\nReturns:\n    Dictionary with severity levels as keys and counts as values","operationId":"get_vulnerability_severity_stats_org__org_id__project__project_id__vulnerabilities_stats_severity_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"integer"},"title":"Response Get Vulnerability Severity Stats Org  Org Id  Project  Project Id  Vulnerabilities Stats Severity Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/vulnerabilities/summary":{"get":{"tags":["vulnerabilities"],"summary":"Get Vulnerability Summary","description":"Get vulnerability summary with key metrics.\n\nArgs:\n    org_id: Organization ID\n    project_id: Project ID\n    context: User context with authentication\n    vulnerability_service: Vulnerability service dependency\n\nReturns:\n    Dictionary with vulnerability summary metrics","operationId":"get_vulnerability_summary_org__org_id__project__project_id__vulnerabilities_summary_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Vulnerability Summary Org  Org Id  Project  Project Id  Vulnerabilities Summary Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/vulnerabilities/bulk-delete":{"post":{"tags":["vulnerabilities"],"summary":"Bulk Delete Vulnerabilities","description":"Bulk delete vulnerabilities.\n\nArgs:\n    org_id: Organization ID\n    project_id: Project ID\n    request: Bulk delete request with vulnerability IDs\n    context: User context with authentication (admin only)\n    vulnerability_service: Vulnerability service dependency\n\nReturns:\n    Bulk operation response with success/failure details\n\nRaises:\n    HTTPException: If bulk size exceeds limit or validation fails","operationId":"bulk_delete_vulnerabilities_org__org_id__project__project_id__vulnerabilities_bulk_delete_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkDeleteRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkOperationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/vulnerabilities/cve/{cve_id}":{"get":{"tags":["vulnerabilities"],"summary":"Get Vulnerability By Cve","description":"Get vulnerability by CVE ID.\n\nArgs:\n    org_id: Organization ID\n    project_id: Project ID\n    cve_id: CVE identifier (e.g., CVE-2023-1234)\n    context: User context with authentication\n    vulnerability_service: Vulnerability service dependency\n\nReturns:\n    Vulnerability information\n\nRaises:\n    HTTPException: If vulnerability not found","operationId":"get_vulnerability_by_cve_org__org_id__project__project_id__vulnerabilities_cve__cve_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"cve_id","in":"path","required":true,"schema":{"type":"string","title":"Cve Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VulnerabilityInfo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/vulnerabilities/{vulnerability_id}":{"get":{"tags":["vulnerabilities"],"summary":"Get Vulnerability","description":"Get vulnerability by ID.\n\nArgs:\n    org_id: Organization ID\n    project_id: Project ID\n    vulnerability_id: Vulnerability ID to retrieve\n    context: User context with authentication\n    vulnerability_service: Vulnerability service dependency\n\nReturns:\n    Vulnerability information\n\nRaises:\n    HTTPException: If vulnerability not found","operationId":"get_vulnerability_org__org_id__project__project_id__vulnerabilities__vulnerability_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"vulnerability_id","in":"path","required":true,"schema":{"type":"string","title":"Vulnerability Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VulnerabilityInfo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["vulnerabilities"],"summary":"Update Vulnerability","description":"Update an existing vulnerability.\n\nChanges are recorded in the audit log. When the severity changes, the new\nvalue is applied to all of the vulnerability's findings so they stay in sync.\n\nRaises:\n    HTTPException: If vulnerability not found.","operationId":"update_vulnerability_org__org_id__project__project_id__vulnerabilities__vulnerability_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"vulnerability_id","in":"path","required":true,"schema":{"type":"string","title":"Vulnerability Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VulnerabilityUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VulnerabilityInfo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["vulnerabilities"],"summary":"Delete Vulnerability","description":"Delete a vulnerability.\n\nArgs:\n    org_id: Organization ID\n    project_id: Project ID\n    vulnerability_id: Vulnerability ID to delete\n    context: User context with authentication\n    vulnerability_service: Vulnerability service dependency\n\nRaises:\n    HTTPException: If vulnerability not found","operationId":"delete_vulnerability_org__org_id__project__project_id__vulnerabilities__vulnerability_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"vulnerability_id","in":"path","required":true,"schema":{"type":"string","title":"Vulnerability Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/vulnerabilities/{vulnerability_id}/triage":{"post":{"tags":["vulnerabilities"],"summary":"Triage a vulnerability and its findings","description":"Apply a verdict and/or severity to all of a vulnerability's findings.\n\nApplies the given `status` and/or `severity` to every finding of this\nvulnerability in the current project. Findings that cannot accept the change\n(for example an invalid status change) are returned in `errors` while the\nrest still succeed. Setting a `severity` also updates the vulnerability and\nkeeps that severity on future scans.","operationId":"triage_vulnerability_findings_org__org_id__project__project_id__vulnerabilities__vulnerability_id__triage_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"vulnerability_id","in":"path","required":true,"schema":{"type":"string","title":"Vulnerability Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VulnerabilityTriageRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VulnerabilityTriageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/vulnerabilities/report":{"post":{"tags":["vulnerabilities"],"summary":"Generate Vulnerability Report","description":"Generate vulnerability report in CSV or PDF format with the same filtering options as list_vulnerabilities.\n\nThis endpoint reuses the same filtering logic as the list_vulnerabilities endpoint but generates\na downloadable report in the specified format (CSV or PDF) containing all matching vulnerabilities.\n\nRequest body supports all the same filtering parameters as list_vulnerabilities:\n- severity: Filter by severity level\n- cve_id: Filter by CVE ID\n- name: Filter by vulnerability name\n- description: Search in description\n- exploit_available: Filter by exploit availability\n- patch_available: Filter by patch availability\n\nPlus an additional format field:\n- format: \"csv\" or \"pdf\" to specify the output format","operationId":"generate_vulnerability_report_org__org_id__project__project_id__vulnerabilities_report_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VulnerabilityReportRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/vulnerabilities/import":{"post":{"tags":["vulnerabilities"],"summary":"Import Vulnerabilities","description":"Import vulnerabilities from a JSON file in CISO360AI native format.\nMax file size: 10MB. Max entries: 500.","operationId":"import_vulnerabilities_org__org_id__project__project_id__vulnerabilities_import_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"dedup_strategy","in":"query","required":false,"schema":{"type":"string","pattern":"^(skip|update)$","description":"How to handle duplicates: 'skip' or 'update'","default":"skip","title":"Dedup Strategy"},"description":"How to handle duplicates: 'skip' or 'update'"}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_import_vulnerabilities_org__org_id__project__project_id__vulnerabilities_import_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VulnerabilityImportResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/vulnerabilities/{vulnerability_id}/tags":{"post":{"tags":["vulnerabilities"],"summary":"Add Vulnerability Tag","description":"Add a single tag to a vulnerability.\n\nArgs:\n    org_id: Organization ID\n    project_id: Project ID\n    vulnerability_id: Vulnerability ID\n    request: Tag to add\n    context: User context with authentication\n    vulnerability_service: Vulnerability service dependency\n\nReturns:\n    Current tags for the vulnerability\n\nRaises:\n    HTTPException: If vulnerability not found","operationId":"add_vulnerability_tag_org__org_id__project__project_id__vulnerabilities__vulnerability_id__tags_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"vulnerability_id","in":"path","required":true,"schema":{"type":"string","title":"Vulnerability Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__routers__vulnerability_router__TagAddRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["vulnerabilities"],"summary":"Replace Vulnerability Tags","description":"Replace all tags for a vulnerability.\n\nArgs:\n    org_id: Organization ID\n    project_id: Project ID\n    vulnerability_id: Vulnerability ID\n    request: New list of tags\n    context: User context with authentication\n    vulnerability_service: Vulnerability service dependency\n\nReturns:\n    Current tags for the vulnerability\n\nRaises:\n    HTTPException: If vulnerability not found","operationId":"replace_vulnerability_tags_org__org_id__project__project_id__vulnerabilities__vulnerability_id__tags_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"vulnerability_id","in":"path","required":true,"schema":{"type":"string","title":"Vulnerability Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__routers__vulnerability_router__TagsReplaceRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["vulnerabilities"],"summary":"Get Vulnerability Tags","description":"Get all tags for a vulnerability.\n\nArgs:\n    org_id: Organization ID\n    project_id: Project ID\n    vulnerability_id: Vulnerability ID\n    context: User context with authentication\n    vulnerability_service: Vulnerability service dependency\n\nReturns:\n    Current tags for the vulnerability\n\nRaises:\n    HTTPException: If vulnerability not found","operationId":"get_vulnerability_tags_org__org_id__project__project_id__vulnerabilities__vulnerability_id__tags_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"vulnerability_id","in":"path","required":true,"schema":{"type":"string","title":"Vulnerability Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/vulnerabilities/{vulnerability_id}/tags/{tag}":{"delete":{"tags":["vulnerabilities"],"summary":"Remove Vulnerability Tag","description":"Remove a single tag from a vulnerability.\n\nArgs:\n    org_id: Organization ID\n    project_id: Project ID\n    vulnerability_id: Vulnerability ID\n    tag: Tag to remove\n    context: User context with authentication\n    vulnerability_service: Vulnerability service dependency\n\nReturns:\n    Current tags for the vulnerability\n\nRaises:\n    HTTPException: If vulnerability not found","operationId":"remove_vulnerability_tag_org__org_id__project__project_id__vulnerabilities__vulnerability_id__tags__tag__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"vulnerability_id","in":"path","required":true,"schema":{"type":"string","title":"Vulnerability Id"}},{"name":"tag","in":"path","required":true,"schema":{"type":"string","title":"Tag"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/vulnerability-tags":{"get":{"tags":["vulnerabilities"],"summary":"List All Vulnerability Tags","description":"Get all unique tags from all vulnerabilities in the project.","operationId":"list_all_vulnerability_tags_org__org_id__project__project_id__vulnerability_tags_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/finding/":{"post":{"tags":["findings"],"summary":"Create Finding","description":"Create a finding that links an asset to a vulnerability.\n\nBoth `asset_id` and `vulnerability_id` are required. A triage status\n(e.g. suppressed or accepted) requires a `triage_reason`, otherwise the\nrequest is rejected with 422.","operationId":"create_finding_org__org_id__project__project_id__finding__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindingCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["findings"],"summary":"List Findings","description":"List findings with filtering and pagination.\n\nProvide either `asset_id` or `vulnerability_id` (not both) to restrict the\nlist to findings for that asset or vulnerability.","operationId":"list_findings_org__org_id__project__project_id__finding__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"enum":["new","open","in_progress","suppressed","resolved","accepted","false_positive","archived"],"type":"string"}},{"type":"null"}],"description":"Filter by status (repeatable; UI defaults to active statuses new/open/in_progress)","title":"Status"},"description":"Filter by status (repeatable; UI defaults to active statuses new/open/in_progress)"},{"name":"severity","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by severity","title":"Severity"},"description":"Filter by severity"},{"name":"priority","in":"query","required":false,"schema":{"anyOf":[{"enum":["p1","p2","p3","p4"],"type":"string"},{"type":"null"}],"description":"Filter by priority","title":"Priority"},"description":"Filter by priority"},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"enum":["scanner","manual","threat_intel"],"type":"string"},{"type":"null"}],"description":"Filter by source","title":"Source"},"description":"Filter by source"},{"name":"scan_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by scan ID","title":"Scan Id"},"description":"Filter by scan ID"},{"name":"risk_score_min","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":100,"minimum":0},{"type":"null"}],"description":"Minimum risk score","title":"Risk Score Min"},"description":"Minimum risk score"},{"name":"risk_score_max","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":100,"minimum":0},{"type":"null"}],"description":"Maximum risk score","title":"Risk Score Max"},"description":"Maximum risk score"},{"name":"exposure_min","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":100,"minimum":0},{"type":"null"}],"description":"Minimum exposure score","title":"Exposure Min"},"description":"Minimum exposure score"},{"name":"discovered_after","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Discovered after this date","title":"Discovered After"},"description":"Discovered after this date"},{"name":"discovered_before","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Discovered before this date","title":"Discovered Before"},"description":"Discovered before this date"},{"name":"asset_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter findings by the associated asset ID","title":"Asset Id"},"description":"Filter findings by the associated asset ID"},{"name":"vulnerability_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter findings by the associated vulnerability ID","title":"Vulnerability Id"},"description":"Filter findings by the associated vulnerability ID"},{"name":"tags","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Filter by tags (comma-separated list)","title":"Tags"},"description":"Filter by tags (comma-separated list)"},{"name":"assignee_email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by assignee email (exact match)","title":"Assignee Email"},"description":"Filter by assignee email (exact match)"},{"name":"name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search findings by name or description (case-insensitive substring)","title":"Name"},"description":"Search findings by name or description (case-insensitive substring)"},{"name":"order_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field to sort by (name, status, severity, priority, risk_score, exposure_score, exposure_band, created_at, updated_at, discovered_at). Defaults to exposure_score (highest first).","title":"Order By"},"description":"Field to sort by (name, status, severity, priority, risk_score, exposure_score, exposure_band, created_at, updated_at, discovered_at). Defaults to exposure_score (highest first)."},{"name":"order_direction","in":"query","required":false,"schema":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"description":"Sort direction","title":"Order Direction"},"description":"Sort direction"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Items per page","default":20,"title":"Limit"},"description":"Items per page"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/finding/stats":{"get":{"tags":["findings"],"summary":"Finding Stats","description":"Status + severity breakdown counts for the findings stat cards.\n\nHonours the same filters as the list endpoint so the cards reflect the whole\nfiltered result set, not just the current page.","operationId":"finding_stats_org__org_id__project__project_id__finding_stats_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"enum":["new","open","in_progress","suppressed","resolved","accepted","false_positive","archived"],"type":"string"}},{"type":"null"}],"title":"Status"}},{"name":"severity","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Severity"}},{"name":"priority","in":"query","required":false,"schema":{"anyOf":[{"enum":["p1","p2","p3","p4"],"type":"string"},{"type":"null"}],"title":"Priority"}},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"enum":["scanner","manual","threat_intel"],"type":"string"},{"type":"null"}],"title":"Source"}},{"name":"exposure_min","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":100,"minimum":0},{"type":"null"}],"title":"Exposure Min"}},{"name":"tags","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Tags"}},{"name":"assignee_email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assignee Email"}},{"name":"name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"}},{"name":"asset_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asset Id"}},{"name":"vulnerability_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vulnerability Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/finding/exposure-stats":{"get":{"tags":["findings"],"summary":"Finding Exposure Stats","description":"Aggregate exposure metrics for the CTEM dashboard (bands, priority, KEV, top, trend).","operationId":"finding_exposure_stats_org__org_id__project__project_id__finding_exposure_stats_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/finding/trend":{"get":{"tags":["findings"],"summary":"Finding Trend","description":"Zero-filled daily severity buckets (active findings) for the dashboard trend charts.\n\nUsage category (a): free idempotent read — role-gated, tenant-scoped, bounded\n(period clamped 1–365 in the service; response is one row per day).","operationId":"finding_trend_org__org_id__project__project_id__finding_trend_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"period","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"description":"Trend window in days","default":30,"title":"Period"},"description":"Trend window in days"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/finding/{finding_id}":{"get":{"tags":["findings"],"summary":"Get Finding","description":"Get a finding by ID.","operationId":"get_finding_org__org_id__project__project_id__finding__finding_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project 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"}}}}}},"put":{"tags":["findings"],"summary":"Update Finding","description":"Update a finding by ID.","operationId":"update_finding_org__org_id__project__project_id__finding__finding_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"finding_id","in":"path","required":true,"schema":{"type":"string","title":"Finding Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindingUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["findings"],"summary":"Delete Finding","description":"Delete a finding by ID.","operationId":"delete_finding_org__org_id__project__project_id__finding__finding_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project 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"}}}}}}},"/org/{org_id}/project/{project_id}/finding/bulk-update":{"post":{"tags":["findings"],"summary":"Bulk Update Findings","description":"Apply a single update to many findings in one request.\n\nReturns a per-ID success/failure result so callers can see exactly which\nfindings were rejected (for example, an invalid status change or a missing\ntriage reason). A maximum of 100 finding IDs may be supplied per request.","operationId":"bulk_update_findings_org__org_id__project__project_id__finding_bulk_update_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkFindingUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkFindingUpdateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/finding/{finding_id}/asset":{"get":{"tags":["findings"],"summary":"Get Asset For Finding","description":"Get the asset associated with a finding.","operationId":"get_asset_for_finding_org__org_id__project__project_id__finding__finding_id__asset_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project 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"}}}}}}},"/org/{org_id}/project/{project_id}/finding/{finding_id}/vulnerability":{"get":{"tags":["findings"],"summary":"Get Vulnerability For Finding","description":"Get the vulnerability associated with a finding.","operationId":"get_vulnerability_for_finding_org__org_id__project__project_id__finding__finding_id__vulnerability_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project 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"}}}}}}},"/org/{org_id}/project/{project_id}/finding/{finding_id}/evidence":{"get":{"tags":["findings"],"summary":"List Evidence For Finding","description":"List the evidence attached to a finding.","operationId":"list_evidence_for_finding_org__org_id__project__project_id__finding__finding_id__evidence_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"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/Evidence"},"title":"Response List Evidence For Finding Org  Org Id  Project  Project Id  Finding  Finding Id  Evidence Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/finding/reports":{"post":{"tags":["findings"],"summary":"Generate Findings Report","description":"Assemble the on-demand findings / posture report (rendered + printed client-side).","operationId":"generate_findings_report_org__org_id__project__project_id__finding_reports_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/FindingsReportRequest"},{"type":"null"}],"title":"Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindingsReportResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/asset/{asset_id}/findings":{"get":{"tags":["findings"],"summary":"List Findings For Asset","description":"Get all findings for an asset.","operationId":"list_findings_for_asset_org__org_id__project__project_id__asset__asset_id__findings_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/vulnerability/{vulnerability_id}/findings":{"get":{"tags":["findings"],"summary":"List Findings For Vulnerability","description":"Get all findings for a vulnerability.","operationId":"list_findings_for_vulnerability_org__org_id__project__project_id__vulnerability__vulnerability_id__findings_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"vulnerability_id","in":"path","required":true,"schema":{"type":"string","title":"Vulnerability Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/finding/{finding_id}/tags":{"put":{"tags":["findings"],"summary":"Replace Finding Tags","description":"Replace all tags for a finding.","operationId":"replace_finding_tags_org__org_id__project__project_id__finding__finding_id__tags_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"finding_id","in":"path","required":true,"schema":{"type":"string","title":"Finding Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__routers__finding_router__TagsReplaceRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["findings"],"summary":"Get Finding Tags","description":"Get all tags for a finding.","operationId":"get_finding_tags_org__org_id__project__project_id__finding__finding_id__tags_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project 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"}}}}}}},"/org/{org_id}/project/{project_id}/finding/{finding_id}/audit-log":{"get":{"tags":["findings"],"summary":"Get Finding Audit Log","description":"Return audit-log entries for a finding (most recent first).\n\nReads from the admin DB via AuditLogService. The Activity tab in\nFindingDetailDialog renders this.","operationId":"get_finding_audit_log_org__org_id__project__project_id__finding__finding_id__audit_log_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"finding_id","in":"path","required":true,"schema":{"type":"string","title":"Finding 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":{"type":"array","items":{"$ref":"#/components/schemas/AuditLogEntry"},"title":"Response Get Finding Audit Log Org  Org Id  Project  Project Id  Finding  Finding Id  Audit Log Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/finding/report":{"post":{"tags":["findings"],"summary":"Generate Finding Report","description":"Stream a CSV report of findings matching the given filters.\n\nMVP: CSV-only. The vuln-side endpoint also generates PDF/JSON; PDF in\nparticular is ~200 lines of ReportLab boilerplate that would need a\nshared layout helper to avoid duplication. Tracked as a follow-up.\n\nPaginates through up to 5000 findings (50 pages × 100) and writes\neach row to a streamed CSV buffer.","operationId":"generate_finding_report_org__org_id__project__project_id__finding_report_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindingReportRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/finding-tags":{"get":{"tags":["findings"],"summary":"List All Finding Tags","description":"Get all unique tags from all findings in the project.","operationId":"list_all_finding_tags_org__org_id__project__project_id__finding_tags_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/reports":{"get":{"tags":["reports"],"summary":"List Reports","operationId":"list_reports_org__org_id__project__project_id__reports_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"description":"Full-text search across report narrative","title":"Q"},"description":"Full-text search across report narrative"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ReportSummary"},"title":"Response List Reports Org  Org Id  Project  Project Id  Reports Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["reports"],"summary":"Create Report","operationId":"create_report_org__org_id__project__project_id__reports_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Report"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/reports/from-findings":{"post":{"tags":["reports"],"summary":"Create Report From Findings","operationId":"create_report_from_findings_org__org_id__project__project_id__reports_from_findings_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"parent_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Prior report id when this is a retest","title":"Parent Id"},"description":"Prior report id when this is a retest"}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Report"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/reports/from-compliance":{"post":{"tags":["reports"],"summary":"Create Report From Compliance","operationId":"create_report_from_compliance_org__org_id__project__project_id__reports_from_compliance_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Report"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/reports/config-posture":{"post":{"tags":["reports"],"summary":"Create Report From Config Posture","description":"Generate a configuration assessment — cloud configuration check results grouped by\nNIST CSF function, with the secure-score trend, the licence position and the derived\nposture insights.","operationId":"create_report_from_config_posture_org__org_id__project__project_id__reports_config_posture_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Report"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/reports/overview":{"post":{"tags":["reports"],"summary":"Create Overview Report","description":"Generate an executive overview — a board-level summary of security posture across\nfindings, compliance, cloud configuration and remediation progress, with prioritised\nrecommendations. The detailed vulnerability, compliance and configuration reports are\ngenerated separately.\n\nWriting the summary uses AI credits, so this returns 402 when the monthly allowance\nis exhausted.","operationId":"create_overview_report_org__org_id__project__project_id__reports_overview_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Report"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/reports/{report_id}":{"get":{"tags":["reports"],"summary":"Get Report","operationId":"get_report_org__org_id__project__project_id__reports__report_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"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/Report"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["reports"],"summary":"Update Report","operationId":"update_report_org__org_id__project__project_id__reports__report_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Report"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["reports"],"summary":"Delete Report","operationId":"delete_report_org__org_id__project__project_id__reports__report_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/reports/{report_id}/transition":{"post":{"tags":["reports"],"summary":"Transition Report","operationId":"transition_report_org__org_id__project__project_id__reports__report_id__transition_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportTransitionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Report"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/reports/{report_id}/checkpoint":{"post":{"tags":["reports"],"summary":"Checkpoint Report","operationId":"checkpoint_report_org__org_id__project__project_id__reports__report_id__checkpoint_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportCheckpointRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Report"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/reports/{report_id}/versions":{"get":{"tags":["reports"],"summary":"List Report Versions","operationId":"list_report_versions_org__org_id__project__project_id__reports__report_id__versions_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ReportSnapshot"},"title":"Response List Report Versions Org  Org Id  Project  Project Id  Reports  Report Id  Versions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/reports/{report_id}/versions/{version}":{"get":{"tags":["reports"],"summary":"Get Report Version","operationId":"get_report_version_org__org_id__project__project_id__reports__report_id__versions__version__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}},{"name":"version","in":"path","required":true,"schema":{"type":"integer","title":"Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportSnapshot"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/reports/{report_id}/versions/{version}/restore":{"post":{"tags":["reports"],"summary":"Restore Report Version","operationId":"restore_report_version_org__org_id__project__project_id__reports__report_id__versions__version__restore_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}},{"name":"version","in":"path","required":true,"schema":{"type":"integer","title":"Version"}},{"name":"expected_version","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}],"title":"Expected Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Report"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/reports/{report_id}/assemble":{"post":{"tags":["reports"],"summary":"Assemble Report","operationId":"assemble_report_org__org_id__project__project_id__reports__report_id__assemble_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"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/AssembleResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/documents/sections":{"get":{"tags":["documents"],"summary":"List Sections","operationId":"list_sections_org__org_id__project__project_id__documents_sections_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"shared_only","in":"query","required":false,"schema":{"type":"boolean","description":"Only reusable (shared) sections","default":false,"title":"Shared Only"},"description":"Only reusable (shared) sections"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DocumentSection"},"title":"Response List Sections Org  Org Id  Project  Project Id  Documents Sections Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["documents"],"summary":"Create Section","operationId":"create_section_org__org_id__project__project_id__documents_sections_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentSectionCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentSection"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/documents/sections/{section_id}":{"get":{"tags":["documents"],"summary":"Get Section","operationId":"get_section_org__org_id__project__project_id__documents_sections__section_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"section_id","in":"path","required":true,"schema":{"type":"string","title":"Section Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentSection"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["documents"],"summary":"Update Section","operationId":"update_section_org__org_id__project__project_id__documents_sections__section_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"section_id","in":"path","required":true,"schema":{"type":"string","title":"Section Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentSectionUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentSection"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["documents"],"summary":"Delete Section","operationId":"delete_section_org__org_id__project__project_id__documents_sections__section_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"section_id","in":"path","required":true,"schema":{"type":"string","title":"Section Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/documents/render":{"post":{"tags":["documents"],"summary":"Render Body","operationId":"render_body_org__org_id__project__project_id__documents_render_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RenderRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RenderResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/policies":{"get":{"tags":["policies"],"summary":"List Policies","operationId":"list_policies_org__org_id__project__project_id__policies_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"description":"Full-text search","title":"Q"},"description":"Full-text search"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PolicySummary"},"title":"Response List Policies Org  Org Id  Project  Project Id  Policies Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["policies"],"summary":"Create Policy","operationId":"create_policy_org__org_id__project__project_id__policies_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Policy"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/policies/sync-starter-policies":{"post":{"tags":["policies"],"summary":"Sync Starter Policies","description":"Add any starter policies missing from this tenant (safe to re-run).","operationId":"sync_starter_policies_org__org_id__project__project_id__policies_sync_starter_policies_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PolicySummary"},"title":"Response Sync Starter Policies Org  Org Id  Project  Project Id  Policies Sync Starter Policies Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/policies/{policy_id}":{"get":{"tags":["policies"],"summary":"Get Policy","operationId":"get_policy_org__org_id__project__project_id__policies__policy_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"policy_id","in":"path","required":true,"schema":{"type":"string","title":"Policy Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Policy"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["policies"],"summary":"Update Policy","operationId":"update_policy_org__org_id__project__project_id__policies__policy_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"policy_id","in":"path","required":true,"schema":{"type":"string","title":"Policy Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Policy"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["policies"],"summary":"Delete Policy","operationId":"delete_policy_org__org_id__project__project_id__policies__policy_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"policy_id","in":"path","required":true,"schema":{"type":"string","title":"Policy Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/policies/{policy_id}/reorder":{"post":{"tags":["policies"],"summary":"Reorder Policy","operationId":"reorder_policy_org__org_id__project__project_id__policies__policy_id__reorder_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"policy_id","in":"path","required":true,"schema":{"type":"string","title":"Policy Id"}},{"name":"position","in":"query","required":true,"schema":{"type":"integer","minimum":1,"description":"1-based target position","title":"Position"},"description":"1-based target position"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PolicySummary"},"title":"Response Reorder Policy Org  Org Id  Project  Project Id  Policies  Policy Id  Reorder Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/policies/{policy_id}/transition":{"post":{"tags":["policies"],"summary":"Transition Policy","operationId":"transition_policy_org__org_id__project__project_id__policies__policy_id__transition_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"policy_id","in":"path","required":true,"schema":{"type":"string","title":"Policy Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyTransitionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Policy"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/policies/{policy_id}/checkpoint":{"post":{"tags":["policies"],"summary":"Checkpoint Policy","operationId":"checkpoint_policy_org__org_id__project__project_id__policies__policy_id__checkpoint_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"policy_id","in":"path","required":true,"schema":{"type":"string","title":"Policy Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyCheckpointRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Policy"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/policies/{policy_id}/versions":{"get":{"tags":["policies"],"summary":"List Policy Versions","operationId":"list_policy_versions_org__org_id__project__project_id__policies__policy_id__versions_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"policy_id","in":"path","required":true,"schema":{"type":"string","title":"Policy Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PolicySnapshot"},"title":"Response List Policy Versions Org  Org Id  Project  Project Id  Policies  Policy Id  Versions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/policies/{policy_id}/versions/{version}":{"get":{"tags":["policies"],"summary":"Get Policy Version","operationId":"get_policy_version_org__org_id__project__project_id__policies__policy_id__versions__version__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"policy_id","in":"path","required":true,"schema":{"type":"string","title":"Policy Id"}},{"name":"version","in":"path","required":true,"schema":{"type":"integer","title":"Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicySnapshot"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/policies/{policy_id}/versions/{version}/restore":{"post":{"tags":["policies"],"summary":"Restore Policy Version","operationId":"restore_policy_version_org__org_id__project__project_id__policies__policy_id__versions__version__restore_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"policy_id","in":"path","required":true,"schema":{"type":"string","title":"Policy Id"}},{"name":"version","in":"path","required":true,"schema":{"type":"integer","title":"Version"}},{"name":"expected_version","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}],"title":"Expected Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Policy"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/policies/{policy_id}/assemble":{"post":{"tags":["policies"],"summary":"Assemble Policy","operationId":"assemble_policy_org__org_id__project__project_id__policies__policy_id__assemble_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"policy_id","in":"path","required":true,"schema":{"type":"string","title":"Policy Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssembleResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/identity-exposures/":{"get":{"tags":["identity-exposures"],"summary":"List Identity Exposures","description":"List identity exposures for the project (exposure-ranked, filterable, sortable).","operationId":"list_identity_exposures_org__org_id__project__project_id__identity_exposures__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"severity","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Severity"}},{"name":"breach_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"description":"stealer_logs, hibp, …","title":"Breach Type"},"description":"stealer_logs, hibp, …"},{"name":"monitored_domain","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":253},{"type":"null"}],"title":"Monitored Domain"}},{"name":"exposure_min","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":100,"minimum":0},{"type":"null"}],"description":"Minimum exposure score","title":"Exposure Min"},"description":"Minimum exposure score"},{"name":"resolved","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter by status: false=open, true=resolved","title":"Resolved"},"description":"Filter by status: false=open, true=resolved"},{"name":"has_password","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter to exposures whose leaked password can be revealed","title":"Has Password"},"description":"Filter to exposures whose leaked password can be revealed"},{"name":"order_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"description":"Sort column (e.g. exposure_score, severity, status)","title":"Order By"},"description":"Sort column (e.g. exposure_score, severity, status)"},{"name":"order_dir","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":4},{"type":"null"}],"description":"Sort direction: asc or desc","title":"Order Dir"},"description":"Sort direction: asc or desc"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/identity-exposures/timeline":{"get":{"tags":["identity-exposures"],"summary":"Identity Exposure Timeline","description":"Yearly leak-date timeline of identity exposures (for the trend chart).","operationId":"identity_exposure_timeline_org__org_id__project__project_id__identity_exposures_timeline_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of trailing yearly buckets","default":20,"title":"Limit"},"description":"Number of trailing yearly buckets"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/identity-exposures/{exposure_id}":{"get":{"tags":["identity-exposures"],"summary":"Get Identity Exposure","operationId":"get_identity_exposure_org__org_id__project__project_id__identity_exposures__exposure_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"exposure_id","in":"path","required":true,"schema":{"type":"string","maxLength":128,"title":"Exposure Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/identity-exposures/{exposure_id}/reveal":{"get":{"tags":["identity-exposures"],"summary":"Reveal Identity Password","description":"Reveal the plaintext of a leaked identity exposure (paid tiers only).\n\nFree tier receives 402 (masked preview only). Every reveal is audit-logged.","operationId":"reveal_identity_password_org__org_id__project__project_id__identity_exposures__exposure_id__reveal_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"exposure_id","in":"path","required":true,"schema":{"type":"string","maxLength":128,"title":"Exposure Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/identity-exposures/{exposure_id}/triage":{"patch":{"tags":["identity-exposures"],"summary":"Triage Identity Exposure","description":"Resolve / re-open an exposure. Its linked findings follow automatically.","operationId":"triage_identity_exposure_org__org_id__project__project_id__identity_exposures__exposure_id__triage_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"exposure_id","in":"path","required":true,"schema":{"type":"string","maxLength":128,"title":"Exposure Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriageRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/identity-exposures/scan":{"post":{"tags":["identity-exposures"],"summary":"Scan Identity Exposures","description":"On-demand dark-web scan for a domain → ingest into identity exposures.","operationId":"scan_identity_exposures_org__org_id__project__project_id__identity_exposures_scan_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/domains/":{"get":{"tags":["domains"],"summary":"List Domains","description":"List the org's domains and their ownership-verification status.","operationId":"list_domains_org__org_id__project__project_id__domains__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["domains"],"summary":"Add Domain","description":"Register a domain and return the DNS TXT record to publish.","operationId":"add_domain_org__org_id__project__project_id__domains__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddDomainRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/domains/{domain}/verify":{"post":{"tags":["domains"],"summary":"Verify Domain","description":"Run the DNS TXT check for a domain and return the updated status.","operationId":"verify_domain_org__org_id__project__project_id__domains__domain__verify_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"domain","in":"path","required":true,"schema":{"type":"string","maxLength":253,"title":"Domain"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/domains/{domain}":{"delete":{"tags":["domains"],"summary":"Delete Domain","description":"Remove a domain-ownership entry.","operationId":"delete_domain_org__org_id__project__project_id__domains__domain__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"domain","in":"path","required":true,"schema":{"type":"string","maxLength":253,"title":"Domain"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/event-assets/convert":{"post":{"tags":["event-assets","event-assets"],"summary":"Convert Events To Assets","description":"Convert scan events to structured asset records.\n\nThis endpoint reads events from the event table (optionally filtered by scan_id\nand/or event_types) and converts them into properly structured asset records\nwith appropriate categorization, criticality assessment, and technical details.\n\nArgs:\n    request: ConversionRequest with optional filters:\n        - scan_id: Filter events from specific scan\n        - event_types: Filter specific event types to convert\n        - limit: Maximum number of events to process (capped at 2000)\n\nReturns:\n    ConversionResponse with conversion results, created assets, and statistics.","operationId":"convert_events_to_assets_org__org_id__project__project_id__event_assets_convert_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/event-assets/sync/{scan_id}":{"post":{"tags":["event-assets","event-assets"],"summary":"Sync Scan Events To Assets","description":"Synchronize all events from a specific scan to assets.\n\nThis endpoint processes all events from a given scan ID and converts\nthem into structured asset records. It's designed to be run after\na scan completes to populate the asset inventory.","operationId":"sync_scan_events_to_assets_org__org_id__project__project_id__event_assets_sync__scan_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"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/SyncResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/event-assets/statistics":{"get":{"tags":["event-assets","event-assets"],"summary":"Get Conversion Statistics","description":"Get statistics about event to asset conversion.\n\nReturns information about:\n- Event counts by type\n- Asset counts by type\n- Supported event types for conversion\n- Total counts","operationId":"get_conversion_statistics_org__org_id__project__project_id__event_assets_statistics_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"scan_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional scan ID to filter statistics","title":"Scan Id"},"description":"Optional scan ID to filter statistics"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Conversion Statistics Org  Org Id  Project  Project Id  Event Assets Statistics Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/event-assets/mapping":{"get":{"tags":["event-assets","event-assets"],"summary":"Get Event Type Mapping","description":"Get the mapping of scan event types to asset categories and types.\n\nThis is useful for understanding how different scan events will be\nconverted into assets, and can help in planning and debugging\nconversion processes.","operationId":"get_event_type_mapping_org__org_id__project__project_id__event_assets_mapping_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Event Type Mapping Org  Org Id  Project  Project Id  Event Assets Mapping Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/event-assets/assets/scan/{scan_id}":{"delete":{"tags":["event-assets","event-assets"],"summary":"Delete Assets From Scan","description":"Delete all assets that were created from a specific scan.\n\nThis is useful for cleaning up assets from test scans or\nre-running conversions with updated logic.","operationId":"delete_assets_from_scan_org__org_id__project__project_id__event_assets_assets_scan__scan_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"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"}}}}}}},"/org/{org_id}/project/{project_id}/subscription/checkout":{"post":{"tags":["subscription","subscription"],"summary":"Create Checkout Session","description":"Create Stripe checkout session for organization subscription.\n\nOnly users with master role can create subscriptions.","operationId":"create_checkout_session_org__org_id__project__project_id__subscription_checkout_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCheckoutRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/subscription/credit-topup/checkout":{"post":{"tags":["subscription","subscription"],"summary":"Create Credit Topup Checkout","description":"Create a one-time Stripe Checkout session for an AI Sidekick credit top-up.\n\nCredits are added to the org's current-month top-up balance when the\n``checkout.session.completed`` webhook arrives (see\n``stripe_service.handle_checkout_completed``).","operationId":"create_credit_topup_checkout_org__org_id__project__project_id__subscription_credit_topup_checkout_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditTopupCheckoutRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditTopupCheckoutResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/subscription/status":{"get":{"tags":["subscription","subscription"],"summary":"Get Subscription Status","description":"Get simple subscription status for current organization.","operationId":"get_subscription_status_org__org_id__project__project_id__subscription_status_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionStatus"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/subscription/cancel":{"post":{"tags":["subscription","subscription"],"summary":"Cancel Subscription","description":"Cancel current organization subscription.","operationId":"cancel_subscription_org__org_id__project__project_id__subscription_cancel_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/subscription/resume":{"post":{"tags":["subscription","subscription"],"summary":"Resume Subscription","description":"Undo a scheduled cancellation — the subscription keeps renewing.\n\nOnly valid while a Stripe subscription is still live (before period end). An\nops-granted tier has no Stripe schedule to resume → 404.","operationId":"resume_subscription_org__org_id__project__project_id__subscription_resume_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/subscription/portal":{"post":{"tags":["subscription","subscription"],"summary":"Create Billing Portal","description":"Open a Stripe Billing Portal session (payment methods, invoices, cancel).","operationId":"create_billing_portal_org__org_id__project__project_id__subscription_portal_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingPortalRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingPortalResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/subscription":{"get":{"tags":["subscription","subscription"],"summary":"Get Detailed Subscription Info","description":"Get comprehensive Stripe subscription information for the organization.\n\nThis endpoint provides detailed subscription data similar to what you see\nin the Stripe dashboard, including billing periods, pricing, customer info,\nand cancellation details.","operationId":"get_detailed_subscription_info_org__org_id__project__project_id__subscription_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedSubscriptionInfo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/subscription/debug":{"get":{"tags":["subscription","subscription"],"summary":"Subscription info","description":"Get subscription status comparing local records and billing provider data.","operationId":"debug_subscription_info_org__org_id__project__project_id__subscription_debug_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Debug Subscription Info Org  Org Id  Project  Project Id  Subscription Debug Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/subscription/sync":{"post":{"tags":["subscription","subscription"],"summary":"Sync Subscription From Stripe","description":"Manually sync organization with correct Stripe subscription ID.","operationId":"sync_subscription_from_stripe_org__org_id__project__project_id__subscription_sync_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateSubscriptionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Sync Subscription From Stripe Org  Org Id  Project  Project Id  Subscription Sync Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/subscription/usage":{"get":{"tags":["subscription","subscription"],"summary":"Get Subscription Usage","description":"Live usage vs cap for every tier resource — feeds the billing page's meters.\n\nPoint-in-time caps (domains/assets/projects/users/evidence) are counted\n**org-wide** (assets/evidence summed across the org's projects); scans is the\nmonthly meter, also read **org-wide** (summed across the org's projects — the\nconsumption cap is an account quota). Caps resolve from the effective\n(project-override-aware) tier.","operationId":"get_subscription_usage_org__org_id__project__project_id__subscription_usage_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsageSummary"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/entity/{entity_type}":{"post":{"tags":["generic-entities","generic-entities"],"summary":"Create Entity","description":"Create a new entity of any type.\n\nThis endpoint creates entities dynamically based on the entity_type parameter.\nEach entity type maps to a specific database table and has its own validation rules.\n\n**Supported Entity Types:**\n- `risk`: Risk management entities\n- `control`: Security control entities\n- `action`: Remediation tasks and action items\n\n**Example Request:**\n```json\n{\n  \"entity_type\": \"risk\",\n  \"name\": \"Data Breach Risk\",\n  \"description\": \"Risk of customer data breach\",\n  \"tags\": [\"security\", \"compliance\"],\n  \"data\": {\n    \"category\": \"operational\",\n    \"subcategory\": \"cyber\",\n    \"likelihood\": 4,\n    \"impact\": 5,\n    \"status\": \"open\",\n    \"owner\": \"security-team\"\n  }\n}\n```","operationId":"create_entity_org__org_id__project__project_id__entity__entity_type__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"entity_type","in":"path","required":true,"schema":{"type":"string","title":"Entity Type"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericEntityCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericEntityInfo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["generic-entities","generic-entities"],"summary":"List Entities","description":"List entities with filtering, sorting and pagination.\n\n**Example:** `GET /generic/org/acme/project/main/entity/risk?limit=10&offset=0&name=breach&tags=security&order_by=status&order_direction=desc`\n\n**Query Parameters:**\n- `limit`: Maximum number of results (1-100, default: 20)\n- `offset`: Number of results to skip (default: 0)\n- `name`: Filter by name containing the given string\n- `tags`: Filter by one or more tags\n- `order_by`: Field to sort by (name, created_at, status, priority, etc.)\n- `order_direction`: Sort direction - 'asc' or 'desc' (default: 'desc')\n\n**Allowed order_by fields:**\n- Common: name, created_at, updated_at, description, id, tags\n- Risk: status, category, subcategory, likelihood, impact, risk_score, owner, review_date\n- Control: type, implementation_type, framework_ref, effectiveness, last_tested\n- Action: status, priority, assigned_to, due_date, completed_date","operationId":"list_entities_org__org_id__project__project_id__entity__entity_type__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"entity_type","in":"path","required":true,"schema":{"type":"string","title":"Entity Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Items per page","default":20,"title":"Limit"},"description":"Items per page"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of items to skip","default":0,"title":"Offset"},"description":"Number of items to skip"},{"name":"name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by name (partial match)","title":"Name"},"description":"Filter by name (partial match)"},{"name":"tags","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Filter by tags","title":"Tags"},"description":"Filter by tags"},{"name":"order_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field to order by (e.g., 'name', 'created_at', 'status', 'priority')","title":"Order By"},"description":"Field to order by (e.g., 'name', 'created_at', 'status', 'priority')"},{"name":"order_direction","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Order direction: 'asc' or 'desc' (default: 'desc')","default":"desc","title":"Order Direction"},"description":"Order direction: 'asc' or 'desc' (default: 'desc')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericEntityListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/entity/{entity_type}/all-tags":{"get":{"tags":["generic-entities","generic-entities"],"summary":"List All Entity Tags","description":"Get all unique tags from all entities of a specific type in the project.","operationId":"list_all_entity_tags_org__org_id__project__project_id__entity__entity_type__all_tags_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"entity_type","in":"path","required":true,"schema":{"type":"string","title":"Entity Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/entity/{entity_type}/{entity_id}":{"get":{"tags":["generic-entities","generic-entities"],"summary":"Get Entity","description":"Get an entity by ID.\n\n**Example:** `GET /generic/org/acme/project/main/entity/risk/risk:abc123`","operationId":"get_entity_org__org_id__project__project_id__entity__entity_type___entity_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"entity_type","in":"path","required":true,"schema":{"type":"string","title":"Entity Type"}},{"name":"entity_id","in":"path","required":true,"schema":{"type":"string","title":"Entity Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericEntityInfo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["generic-entities","generic-entities"],"summary":"Update Entity","description":"Update an entity.\n\n**Example Request:**\n```json\n{\n  \"name\": \"Updated Risk Name\",\n  \"data\": {\n    \"status\": \"mitigated\",\n    \"likelihood\": 2\n  }\n}\n```","operationId":"update_entity_org__org_id__project__project_id__entity__entity_type___entity_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"entity_type","in":"path","required":true,"schema":{"type":"string","title":"Entity Type"}},{"name":"entity_id","in":"path","required":true,"schema":{"type":"string","title":"Entity Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericEntityUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericEntityInfo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["generic-entities","generic-entities"],"summary":"Delete Entity","description":"Delete an entity.\n\nRequires ADMIN role for deletion.","operationId":"delete_entity_org__org_id__project__project_id__entity__entity_type___entity_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"entity_type","in":"path","required":true,"schema":{"type":"string","title":"Entity Type"}},{"name":"entity_id","in":"path","required":true,"schema":{"type":"string","title":"Entity Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/entity/{entity_type}/{entity_id}/tags":{"post":{"tags":["generic-entities","generic-entities"],"summary":"Add Entity Tag","description":"Add a tag to an entity.","operationId":"add_entity_tag_org__org_id__project__project_id__entity__entity_type___entity_id__tags_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"entity_type","in":"path","required":true,"schema":{"type":"string","title":"Entity Type"}},{"name":"entity_id","in":"path","required":true,"schema":{"type":"string","title":"Entity Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__routers__generic_entity_router__TagAddRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["generic-entities","generic-entities"],"summary":"Replace Entity Tags","description":"Replace all tags for an entity.","operationId":"replace_entity_tags_org__org_id__project__project_id__entity__entity_type___entity_id__tags_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"entity_type","in":"path","required":true,"schema":{"type":"string","title":"Entity Type"}},{"name":"entity_id","in":"path","required":true,"schema":{"type":"string","title":"Entity Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__routers__generic_entity_router__TagsReplaceRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["generic-entities","generic-entities"],"summary":"Get Entity Tags","description":"Get all tags for an entity.","operationId":"get_entity_tags_org__org_id__project__project_id__entity__entity_type___entity_id__tags_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"entity_type","in":"path","required":true,"schema":{"type":"string","title":"Entity Type"}},{"name":"entity_id","in":"path","required":true,"schema":{"type":"string","title":"Entity Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/entity/{entity_type}/{entity_id}/tags/{tag}":{"delete":{"tags":["generic-entities","generic-entities"],"summary":"Remove Entity Tag","description":"Remove a tag from an entity.","operationId":"remove_entity_tag_org__org_id__project__project_id__entity__entity_type___entity_id__tags__tag__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"entity_type","in":"path","required":true,"schema":{"type":"string","title":"Entity Type"}},{"name":"entity_id","in":"path","required":true,"schema":{"type":"string","title":"Entity Id"}},{"name":"tag","in":"path","required":true,"schema":{"type":"string","title":"Tag"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/entity/{entity_type}/report":{"post":{"tags":["generic-entities","generic-entities"],"summary":"Generate Entity Report","description":"Generate entity report in CSV or PDF format.","operationId":"generate_entity_report_org__org_id__project__project_id__entity__entity_type__report_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"entity_type","in":"path","required":true,"schema":{"type":"string","title":"Entity Type"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericEntityReportRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/relationships":{"post":{"tags":["relationships","relationships"],"summary":"Create Relationship","description":"Create a relationship between two entities.","operationId":"create_relationship_org__org_id__project__project_id__relationships_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRelationshipRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Create Relationship Org  Org Id  Project  Project Id  Relationships Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/relationships/types/{entity_type}":{"get":{"tags":["relationships","relationships"],"summary":"Get Relationship Types","description":"Return available relationship types for an entity type (no DB call).","operationId":"get_relationship_types_org__org_id__project__project_id__relationships_types__entity_type__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"entity_type","in":"path","required":true,"schema":{"type":"string","title":"Entity Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response Get Relationship Types Org  Org Id  Project  Project Id  Relationships Types  Entity Type  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/relationships/count/{entity_id}":{"get":{"tags":["relationships","relationships"],"summary":"Get Relationship Counts","description":"Return per-edge-type counts for an entity.","operationId":"get_relationship_counts_org__org_id__project__project_id__relationships_count__entity_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"entity_id","in":"path","required":true,"schema":{"type":"string","title":"Entity Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelationshipCountsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/relationships/{entity_id}":{"get":{"tags":["relationships","relationships"],"summary":"Get Relationships","description":"List all edges touching an entity, optionally filtered by type/direction.","operationId":"get_relationships_org__org_id__project__project_id__relationships__entity_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"entity_id","in":"path","required":true,"schema":{"type":"string","title":"Entity Id"}},{"name":"edge_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by edge type","title":"Edge Type"},"description":"Filter by edge type"},{"name":"direction","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(in|out)$"},{"type":"null"}],"description":"Filter by direction: 'in' or 'out'","title":"Direction"},"description":"Filter by direction: 'in' or 'out'"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response Get Relationships Org  Org Id  Project  Project Id  Relationships  Entity Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/relationships/{edge_type}/{in_id}/{out_id}":{"delete":{"tags":["relationships","relationships"],"summary":"Delete Relationship","description":"Delete a specific edge between two entities.","operationId":"delete_relationship_org__org_id__project__project_id__relationships__edge_type___in_id___out_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"edge_type","in":"path","required":true,"schema":{"type":"string","title":"Edge Type"}},{"name":"in_id","in":"path","required":true,"schema":{"type":"string","title":"In Id"}},{"name":"out_id","in":"path","required":true,"schema":{"type":"string","title":"Out Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete Relationship Org  Org Id  Project  Project Id  Relationships  Edge Type   In Id   Out Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/provenance/asset/{asset_id}/chain":{"get":{"tags":["provenance","provenance"],"summary":"Get Asset Provenance Chain","description":"Get the discovery chain (ancestors) for an asset.","operationId":"get_asset_provenance_chain_org__org_id__project__project_id__provenance_asset__asset_id__chain_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"max_depth","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":1,"default":10,"title":"Max Depth"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response Get Asset Provenance Chain Org  Org Id  Project  Project Id  Provenance Asset  Asset Id  Chain Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/provenance/asset/{asset_id}/discovered":{"get":{"tags":["provenance","provenance"],"summary":"Get Asset Discovered Assets","description":"Get assets discovered BY this asset (children).","operationId":"get_asset_discovered_assets_org__org_id__project__project_id__provenance_asset__asset_id__discovered_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response Get Asset Discovered Assets Org  Org Id  Project  Project Id  Provenance Asset  Asset Id  Discovered Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/provenance/asset/{asset_id}/tree":{"get":{"tags":["provenance","provenance"],"summary":"Get Asset Discovery Tree","description":"Get the full discovery tree rooted at an asset.","operationId":"get_asset_discovery_tree_org__org_id__project__project_id__provenance_asset__asset_id__tree_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"max_depth","in":"query","required":false,"schema":{"type":"integer","maximum":10,"minimum":1,"default":5,"title":"Max Depth"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Asset Discovery Tree Org  Org Id  Project  Project Id  Provenance Asset  Asset Id  Tree Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/provenance/vulnerability/{vuln_id}":{"get":{"tags":["provenance","provenance"],"summary":"Get Vulnerability Provenance","description":"Get the provenance trace for a vulnerability.","operationId":"get_vulnerability_provenance_org__org_id__project__project_id__provenance_vulnerability__vuln_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"vuln_id","in":"path","required":true,"schema":{"type":"string","title":"Vuln Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Vulnerability Provenance Org  Org Id  Project  Project Id  Provenance Vulnerability  Vuln Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/graph/neighborhood/{entity_id}":{"get":{"tags":["graph","graph"],"summary":"Get Entity Neighborhood","description":"Get nodes + edges in the neighborhood of an entity.","operationId":"get_entity_neighborhood_org__org_id__project__project_id__graph_neighborhood__entity_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"entity_id","in":"path","required":true,"schema":{"type":"string","title":"Entity Id"}},{"name":"depth","in":"query","required":false,"schema":{"type":"integer","maximum":3,"minimum":1,"default":1,"title":"Depth"}},{"name":"edge_types","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated edge types to include","title":"Edge Types"},"description":"Comma-separated edge types to include"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Entity Neighborhood Org  Org Id  Project  Project Id  Graph Neighborhood  Entity Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/graph/discovery/{asset_id}":{"get":{"tags":["graph","graph"],"summary":"Get Discovery Graph","description":"Get the discovery tree for an asset as flat nodes + edges.","operationId":"get_discovery_graph_org__org_id__project__project_id__graph_discovery__asset_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}},{"name":"max_depth","in":"query","required":false,"schema":{"type":"integer","maximum":10,"minimum":1,"default":5,"title":"Max Depth"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Discovery Graph Org  Org Id  Project  Project Id  Graph Discovery  Asset Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/graph/full":{"get":{"tags":["graph","graph"],"summary":"Get Full Project Graph","description":"Get all assets + vulnerabilities + relationships in the project.","operationId":"get_full_project_graph_org__org_id__project__project_id__graph_full_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Full Project Graph Org  Org Id  Project  Project Id  Graph Full Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/graph/scan/{scan_instance_id}":{"get":{"tags":["graph","graph"],"summary":"Get Scan Discovery Graph","description":"Get all entities discovered in a scan as nodes + edges.","operationId":"get_scan_discovery_graph_org__org_id__project__project_id__graph_scan__scan_instance_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"scan_instance_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Instance Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Scan Discovery Graph Org  Org Id  Project  Project Id  Graph Scan  Scan Instance Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/notifications/settings":{"get":{"tags":["notifications","notifications"],"summary":"Get Notification Settings","description":"Get the org-wide notification settings. Materializes defaults if absent.","operationId":"get_notification_settings_org__org_id__notifications_settings_get","security":[{"HTTPBearer":[]}],"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/OrgNotificationSettings"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["notifications","notifications"],"summary":"Upsert Notification Settings","description":"Admin-only: replace the org-wide notification settings.","operationId":"upsert_notification_settings_org__org_id__notifications_settings_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgNotificationSettingsUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgNotificationSettings"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/notifications/history":{"get":{"tags":["notifications","notifications"],"summary":"Get Notification History","description":"Org-wide notification delivery history. Consumed by the dashboard\nActivity panel and the Settings → Audit Log page's Notifications tab.","operationId":"get_notification_history_org__org_id__notifications_history_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":20,"title":"Limit"},"description":"Items per page"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination","default":0,"title":"Offset"},"description":"Offset for pagination"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by notification category (e.g. `scan_completed`).","title":"Category"},"description":"Filter by notification category (e.g. `scan_completed`)."},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(sent|partial|failed|queued)$"},{"type":"null"}],"description":"Filter by delivery status.","title":"Status"},"description":"Filter by delivery status."},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Free-text fuzzy search across subject + to/cc recipients (case-insensitive).","title":"Search"},"description":"Free-text fuzzy search across subject + to/cc recipients (case-insensitive)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationLogListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/notifications/my-activity":{"get":{"tags":["notifications","notifications"],"summary":"Get My Notification Activity","description":"The caller's **own** notification activity — dispatches where their email\nis a recipient. Any org member (admin or reader) sees only their own log\nhere; the org-wide feed lives on `GET /notifications/history` (admins / the\ndashboard Activity panel).","operationId":"get_my_notification_activity_org__org_id__notifications_my_activity_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":20,"title":"Limit"},"description":"Items per page"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination","default":0,"title":"Offset"},"description":"Offset for pagination"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by notification category (e.g. `scan_completed`).","title":"Category"},"description":"Filter by notification category (e.g. `scan_completed`)."},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(sent|partial|failed|queued)$"},{"type":"null"}],"description":"Filter by delivery status.","title":"Status"},"description":"Filter by delivery status."},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Free-text fuzzy search across subject + recipients.","title":"Search"},"description":"Free-text fuzzy search across subject + recipients."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationLogListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/notifications/test":{"post":{"tags":["notifications","notifications"],"summary":"Send Test Notification","description":"Admin-only: send a test email to the currently-configured recipient list.","operationId":"send_test_notification_org__org_id__notifications_test_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/notifications/test-digest":{"post":{"tags":["notifications","notifications"],"summary":"Send Test Digest","description":"Admin-only: send a test weekly/monthly digest immediately.\n\nBypasses the per-category enable check (admins can preview even if the\nweekly/monthly toggle is off) but still honors `notify_org_admins` and\nthe `recipient_emails` list. Stats are real for the same 7/30-day window\nthe scheduled digest uses.","operationId":"send_test_digest_org__org_id__notifications_test_digest_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"report_type","in":"query","required":false,"schema":{"type":"string","pattern":"^(weekly|monthly)$","description":"Which digest cadence to render and send.","default":"weekly","title":"Report Type"},"description":"Which digest cadence to render and send."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/audit-log":{"get":{"tags":["audit","audit"],"summary":"List Audit Log","description":"Admin-only: list org-wide audit-log entries with filters + pagination.","operationId":"list_audit_log_org__org_id__audit_log_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"action","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by action (CREATE / UPDATE / DELETE).","title":"Action"},"description":"Filter by action (CREATE / UPDATE / DELETE)."},{"name":"event","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by event type. See the product documentation for valid values.","title":"Event"},"description":"Filter by event type. See the product documentation for valid values."},{"name":"key_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by API-key type (user / worker / agent).","title":"Key Type"},"description":"Filter by API-key type (user / worker / agent)."},{"name":"resource_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by resource type (e.g. 'finding', 'user', 'project').","title":"Resource Type"},"description":"Filter by resource type (e.g. 'finding', 'user', 'project')."},{"name":"resource_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by resource id.","title":"Resource Id"},"description":"Filter by resource id."},{"name":"actor_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by actor user id.","title":"Actor Id"},"description":"Filter by actor user id."},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Inclusive lower bound on timestamp.","title":"Start Date"},"description":"Inclusive lower bound on timestamp."},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Inclusive upper bound on timestamp.","title":"End Date"},"description":"Inclusive upper bound on timestamp."},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Free-text fuzzy search across actor_email + resource_id (case-insensitive).","title":"Search"},"description":"Free-text fuzzy search across actor_email + resource_id (case-insensitive)."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Items per page (max 1000).","default":100,"title":"Limit"},"description":"Items per page (max 1000)."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination.","default":0,"title":"Offset"},"description":"Offset for pagination."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuditLogListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/mcp/initialize":{"post":{"tags":["mcp"],"summary":"Mcp Initialize","description":"Initialize an MCP session locked to one org/project context.","operationId":"mcp_initialize_org__org_id__project__project_id__mcp_initialize_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MCPInitializeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MCPInitializeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/mcp/tools":{"get":{"tags":["mcp"],"summary":"Mcp Tools List","description":"List tools available for this immutable MCP session context.","operationId":"mcp_tools_list_org__org_id__project__project_id__mcp_tools_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"X-MCP-Session-Id","in":"header","required":true,"schema":{"type":"string","title":"X-Mcp-Session-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MCPToolsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/mcp/tools/call":{"post":{"tags":["mcp"],"summary":"Mcp Tool Call","description":"Invoke a tool for the current MCP session.\n\nDestructive tools require explicit user authorization and remain non-executing in POC.\nSuccessful tool-call results are pushed to the session's SSE event queue.","operationId":"mcp_tool_call_org__org_id__project__project_id__mcp_tools_call_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"X-MCP-Session-Id","in":"header","required":true,"schema":{"type":"string","title":"X-Mcp-Session-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MCPToolCallRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MCPToolCallResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/mcp/approvals/{request_id}/approve":{"post":{"tags":["mcp"],"summary":"Mcp Approve Request","description":"Approve a pending destructive action request for the same user/session.\n\nApproving a destructive action is itself a contributor-tier act, matching the\nrole floor now enforced on the write tool that raised the approval request.","operationId":"mcp_approve_request_org__org_id__project__project_id__mcp_approvals__request_id__approve_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","title":"Request Id"}},{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"X-MCP-Session-Id","in":"header","required":true,"schema":{"type":"string","title":"X-Mcp-Session-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/mcp/approvals/{request_id}/reject":{"post":{"tags":["mcp"],"summary":"Mcp Reject Request","description":"Reject a pending destructive action request for the same user/session.","operationId":"mcp_reject_request_org__org_id__project__project_id__mcp_approvals__request_id__reject_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","title":"Request Id"}},{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"X-MCP-Session-Id","in":"header","required":true,"schema":{"type":"string","title":"X-Mcp-Session-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/mcp/stream":{"get":{"tags":["mcp"],"summary":"Mcp Stream","description":"SSE stream for MCP clients. Delivers tool-call events and heartbeats.","operationId":"mcp_stream_org__org_id__project__project_id__mcp_stream_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"heartbeat_seconds","in":"query","required":false,"schema":{"type":"integer","maximum":60,"minimum":5,"default":15,"title":"Heartbeat Seconds"}},{"name":"X-MCP-Session-Id","in":"header","required":true,"schema":{"type":"string","title":"X-Mcp-Session-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/mcp/health":{"get":{"tags":["mcp"],"summary":"Mcp Health","description":"Health endpoint for the MCP route group.","operationId":"mcp_health_mcp_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/org/{org_id}/project/{project_id}/chat/conversations":{"post":{"tags":["chat"],"summary":"Create Conversation","operationId":"create_conversation_org__org_id__project__project_id__chat_conversations_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatCreateConversationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatCreateConversationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["chat"],"summary":"List Conversations","description":"Return all conversations for the current user/org/project, newest first.","operationId":"list_conversations_org__org_id__project__project_id__chat_conversations_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ChatCreateConversationResponse"},"title":"Response List Conversations Org  Org Id  Project  Project Id  Chat Conversations Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/chat/conversations/{conversation_id}":{"delete":{"tags":["chat"],"summary":"Delete Conversation","description":"Delete a conversation and all its messages (owner only).","operationId":"delete_conversation_org__org_id__project__project_id__chat_conversations__conversation_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","title":"Conversation Id"}},{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/chat/conversations/{conversation_id}/messages":{"post":{"tags":["chat"],"summary":"Post Message","operationId":"post_message_org__org_id__project__project_id__chat_conversations__conversation_id__messages_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","title":"Conversation Id"}},{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatMessageRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatMessageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["chat"],"summary":"List Messages","operationId":"list_messages_org__org_id__project__project_id__chat_conversations__conversation_id__messages_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","title":"Conversation Id"}},{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ChatMessageResponse"},"title":"Response List Messages Org  Org Id  Project  Project Id  Chat Conversations  Conversation Id  Messages Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/chat/conversations/{conversation_id}/cancel":{"post":{"tags":["chat"],"summary":"Cancel Conversation Turn","description":"Stop the in-flight chat turn for this conversation (the Stop button).\n\nCancels the running agent task so the Bedrock call is abandoned and no credit is\ncharged. Returns ``cancelled: false`` when nothing is running here — the task\nregistry is process-local, so a turn on another replica is bounded only by the\nserver-side timeout.","operationId":"cancel_conversation_turn_org__org_id__project__project_id__chat_conversations__conversation_id__cancel_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","title":"Conversation Id"}},{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/chat/agent-quota":{"get":{"tags":["chat"],"summary":"Get Agent Quota","description":"Current month's AI Sidekick usage for the org. Read-only.","operationId":"get_agent_quota_org__org_id__project__project_id__chat_agent_quota_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentQuotaResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/chat/conversations/{conversation_id}/approvals/{request_id}/approve":{"post":{"tags":["chat"],"summary":"Approve Conversation Request","operationId":"approve_conversation_request_org__org_id__project__project_id__chat_conversations__conversation_id__approvals__request_id__approve_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","title":"Conversation Id"}},{"name":"request_id","in":"path","required":true,"schema":{"type":"string","title":"Request Id"}},{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/chat/conversations/{conversation_id}/approvals/{request_id}/reject":{"post":{"tags":["chat"],"summary":"Reject Conversation Request","operationId":"reject_conversation_request_org__org_id__project__project_id__chat_conversations__conversation_id__approvals__request_id__reject_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","title":"Conversation Id"}},{"name":"request_id","in":"path","required":true,"schema":{"type":"string","title":"Request Id"}},{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/chat/conversations/{conversation_id}/score-batch":{"post":{"tags":["chat"],"summary":"Propose Score Batch","description":"Deterministically create pending SCORE proposals from an interactive grid\nsubmission — no model turn, no hallucinated control codes. The created proposals\nare rendered inline in chat (``metadata.score_proposals``) with an Approve-all.","operationId":"propose_score_batch_org__org_id__project__project_id__chat_conversations__conversation_id__score_batch_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","title":"Conversation Id"}},{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScoreBatchProposeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/chat/conversations/{conversation_id}/score-batch/approve":{"post":{"tags":["chat"],"summary":"Approve Score Batch","description":"Approve (apply) a batch of score proposals in one click, then deterministically\nreturn + post the next batch of unscored controls — driving the scoring loop with\nzero model turns.","operationId":"approve_score_batch_org__org_id__project__project_id__chat_conversations__conversation_id__score_batch_approve_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","title":"Conversation Id"}},{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScoreBatchApproveRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/chat/conversations/{conversation_id}/score-batch/discard":{"post":{"tags":["chat"],"summary":"Discard Score Batch","description":"Reject a batch of pending score proposals (the user spotted a mistake before\napplying) and re-present the same controls to rate again — rejected proposals\nare never applied, so the controls stay unscored and reappear in the grid.","operationId":"discard_score_batch_org__org_id__project__project_id__chat_conversations__conversation_id__score_batch_discard_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","title":"Conversation Id"}},{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScoreBatchApproveRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/agent-settings/personas":{"get":{"tags":["agent-settings"],"summary":"List Persona Policies","operationId":"list_persona_policies_org__org_id__project__project_id__agent_settings_personas_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PersonaPolicy"},"title":"Response List Persona Policies Org  Org Id  Project  Project Id  Agent Settings Personas Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/agent-settings/personas/{persona}":{"put":{"tags":["agent-settings"],"summary":"Set Persona Policy","operationId":"set_persona_policy_org__org_id__project__project_id__agent_settings_personas__persona__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"persona","in":"path","required":true,"schema":{"type":"string","title":"Persona"}},{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersonaPolicyUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersonaPolicy"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["agent-settings"],"summary":"Reset Persona Policy","description":"Reset a persona's policy to the platform default (locked base prompt only).","operationId":"reset_persona_policy_org__org_id__project__project_id__agent_settings_personas__persona__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"persona","in":"path","required":true,"schema":{"type":"string","title":"Persona"}},{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/agent-settings/memory":{"get":{"tags":["agent-settings"],"summary":"List Memory","operationId":"list_memory_org__org_id__project__project_id__agent_settings_memory_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/MemoryEntry"},"title":"Response List Memory Org  Org Id  Project  Project Id  Agent Settings Memory Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["agent-settings"],"summary":"Upsert Memory","operationId":"upsert_memory_org__org_id__project__project_id__agent_settings_memory_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemoryUpsert"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemoryEntry"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["agent-settings"],"summary":"Reset Memory","description":"Reset all team memory for the project to default (empty).","operationId":"reset_memory_org__org_id__project__project_id__agent_settings_memory_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/agent-settings/memory/{memory_id}":{"delete":{"tags":["agent-settings"],"summary":"Delete Memory","operationId":"delete_memory_org__org_id__project__project_id__agent_settings_memory__memory_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"memory_id","in":"path","required":true,"schema":{"type":"string","title":"Memory Id"}},{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/me/api-keys":{"get":{"tags":["api-keys","api-keys"],"summary":"List My Api Keys","description":"List the calling user's API keys for this organisation.","operationId":"list_my_api_keys_org__org_id__me_api_keys_get","security":[{"HTTPBearer":[]}],"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/ApiKeyListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["api-keys","api-keys"],"summary":"Create My Api Key","description":"Create a new API key. The plaintext is returned ONCE — copy it now.","operationId":"create_my_api_key_org__org_id__me_api_keys_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyCreateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/me/api-keys/{key_id}":{"delete":{"tags":["api-keys","api-keys"],"summary":"Revoke My Api Key","description":"Revoke one of your own API keys. Idempotent.","operationId":"revoke_my_api_key_org__org_id__me_api_keys__key_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"key_id","in":"path","required":true,"schema":{"type":"string","description":"Full record id, e.g. 'api_key:abc123'.","title":"Key Id"},"description":"Full record id, e.g. 'api_key:abc123'."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/admin/api-keys":{"get":{"tags":["api-keys","api-keys","admin"],"summary":"List Org Api Keys","description":"Org main-admin view of all keys bound to this organisation.","operationId":"list_org_api_keys_org__org_id__admin_api_keys_get","security":[{"HTTPBearer":[]}],"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/ApiKeyListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/admin/api-keys/{key_id}":{"delete":{"tags":["api-keys","api-keys","admin"],"summary":"Revoke Org Api Key","description":"Org main-admin revocation of any key in their organisation.","operationId":"revoke_org_api_key_org__org_id__admin_api_keys__key_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"key_id","in":"path","required":true,"schema":{"type":"string","description":"Full record id, e.g. 'api_key:abc123'.","title":"Key Id"},"description":"Full record id, e.g. 'api_key:abc123'."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyPublic"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/connector-catalog":{"get":{"tags":["connectors","connectors"],"summary":"Connector Catalog","description":"The connector catalogue: each provider's supported auth methods + config fields.","operationId":"connector_catalog_org__org_id__connector_catalog_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/connectors":{"get":{"tags":["connectors","connectors"],"summary":"List Connectors","description":"List the organisation's cloud connectors.","operationId":"list_connectors_org__org_id__connectors_get","security":[{"HTTPBearer":[]}],"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/ConnectorListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["connectors","connectors"],"summary":"Create Connector","description":"Register a new cloud connector (starts unauthorised).","operationId":"create_connector_org__org_id__connectors_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectorCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Connector"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/connectors/{connector_id}":{"get":{"tags":["connectors","connectors"],"summary":"Get Connector","description":"Fetch one connector's configuration and sync status.","operationId":"get_connector_org__org_id__connectors__connector_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"connector_id","in":"path","required":true,"schema":{"type":"string","title":"Connector Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Connector"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["connectors","connectors"],"summary":"Update Connector","description":"Update a connector's configuration.","operationId":"update_connector_org__org_id__connectors__connector_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"connector_id","in":"path","required":true,"schema":{"type":"string","title":"Connector Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectorUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Connector"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["connectors","connectors"],"summary":"Delete Connector","description":"Remove a connector, its cached data, and its recurring sync schedule.","operationId":"delete_connector_org__org_id__connectors__connector_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"connector_id","in":"path","required":true,"schema":{"type":"string","title":"Connector Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/connectors/{connector_id}/sync":{"post":{"tags":["connectors","connectors"],"summary":"Trigger Connector Sync","description":"Start an immediate sync for this connector.","operationId":"trigger_connector_sync_org__org_id__connectors__connector_id__sync_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"connector_id","in":"path","required":true,"schema":{"type":"string","title":"Connector Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncStartedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/connectors/{connector_id}/authorise":{"post":{"tags":["connectors","connectors"],"summary":"Authorise Connector","description":"Mint the admin-consent redirect for authorising Microsoft 365 access.\n\n``redirect_uri`` (supplied by the BFF from its own origin) is used as the reply\nURL so it matches where the admin is browsing; it must be registered on the app.","operationId":"authorise_connector_org__org_id__connectors__connector_id__authorise_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"connector_id","in":"path","required":true,"schema":{"type":"string","title":"Connector Id"}},{"name":"redirect_uri","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Redirect Uri"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsentUrlResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/connectors/{connector_id}/consent":{"post":{"tags":["connectors","connectors"],"summary":"Confirm Connector Consent","description":"Record a granted consent (tenant id) and start the recurring sync schedule.","operationId":"confirm_connector_consent_org__org_id__connectors__connector_id__consent_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"connector_id","in":"path","required":true,"schema":{"type":"string","title":"Connector Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsentRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Connector"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/connectors/{connector_id}/credentials":{"post":{"tags":["connectors","connectors"],"summary":"Configure Connector Credentials","description":"Store manual credentials (BYO app / API keys) and start the recurring schedule.\n\nNon-secret fields are kept on the connector; secret fields are encrypted at rest.\nRequires the connector-secret key to be configured for the secret material.","operationId":"configure_connector_credentials_org__org_id__connectors__connector_id__credentials_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"connector_id","in":"path","required":true,"schema":{"type":"string","title":"Connector Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManualConfigRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Connector"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/connectors/{connector_id}/config-findings":{"get":{"tags":["config-findings","config-findings"],"summary":"List Connector Config Findings","description":"Cloud-connector configuration findings (defaults to open failures). Paginated;\n``total`` is the unpaginated match count for \"load more\".","operationId":"list_connector_config_findings_org__org_id__project__project_id__connectors__connector_id__config_findings_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"connector_id","in":"path","required":true,"schema":{"type":"string","title":"Connector Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"default":"fail","title":"Status"}},{"name":"severity","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Severity"}},{"name":"check_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Check Id"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Search"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":200,"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/ConfigFindingListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/connectors/{connector_id}/secure-score":{"get":{"tags":["config-findings","config-findings"],"summary":"Connector Secure Score","description":"Microsoft Secure Score for a connected cloud tenant — the current score, its daily\ntrend, the points achieved per category, what changed over the period, and the highest\nimpact outstanding actions. Empty when the tenant has no score data.","operationId":"connector_secure_score_org__org_id__project__project_id__connectors__connector_id__secure_score_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"connector_id","in":"path","required":true,"schema":{"type":"string","title":"Connector Id"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":90,"minimum":7,"default":90,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SecureScoreResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/connectors/{connector_id}/posture-insights":{"get":{"tags":["config-findings","config-findings"],"summary":"Connector Posture Insights","description":"Configuration-posture insights for a connected cloud tenant — the capabilities the\norganisation pays for but has not finished configuring, the outstanding controls\nranked by value against the effort they take, what moved over the period and what it\ncost, and the position against NIST CSF functions.\n\nEntitlement and framework attribution are our own derivations and are labelled as\nsuch; seat counts are measured directly. Empty when the tenant has no score data.","operationId":"connector_posture_insights_org__org_id__project__project_id__connectors__connector_id__posture_insights_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"connector_id","in":"path","required":true,"schema":{"type":"string","title":"Connector Id"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":90,"minimum":7,"default":90,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostureInsightsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/connectors/{connector_id}/licences":{"get":{"tags":["config-findings","config-findings"],"summary":"Connector Licences","description":"Licence inventory and allocation for a connected cloud tenant — what is purchased,\nhow much is assigned, which subscriptions have no seats left, and which licensed\naccounts look like wasted spend. Empty when no licence data has been collected.","operationId":"connector_licences_org__org_id__project__project_id__connectors__connector_id__licences_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"connector_id","in":"path","required":true,"schema":{"type":"string","title":"Connector Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LicenceSummaryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/config-findings":{"get":{"tags":["config-findings","config-findings"],"summary":"List Project Config Findings","description":"Configuration findings across all of the project's connectors (paginated).","operationId":"list_project_config_findings_org__org_id__project__project_id__config_findings_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"default":"fail","title":"Status"}},{"name":"severity","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Severity"}},{"name":"check_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Check Id"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Search"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":200,"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/ConfigFindingListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/config-findings/summary":{"get":{"tags":["config-findings","config-findings"],"summary":"Project Posture Summary","description":"Per-connector posture roll-up (KPI + per-check counts + Secure Score) — the landing\nview's data without shipping every finding.","operationId":"project_posture_summary_org__org_id__project__project_id__config_findings_summary_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostureSummaryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/connectors/{connector_id}/config-findings/summary":{"get":{"tags":["config-findings","config-findings"],"summary":"Connector Posture Summary","description":"One connector's posture roll-up — the detail view's KPI header + check-group counts.\n``status``/``search``/``severity`` filter the check-group counts (the detail view's filter bar);\n``status=all`` clears the filter.","operationId":"connector_posture_summary_org__org_id__project__project_id__connectors__connector_id__config_findings_summary_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"connector_id","in":"path","required":true,"schema":{"type":"string","title":"Connector Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Status"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Search"}},{"name":"severity","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Severity"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostureSummaryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/config-checks":{"get":{"tags":["config-findings","config-findings"],"summary":"List Config Checks","description":"The configuration-check catalogue — each check's stable title, description and\nremediation. Tenant-independent (derived from the check registry); used by the UI to\nlabel check groups consistently rather than inferring a title from the first finding.","operationId":"list_config_checks_org__org_id__project__project_id__config_checks_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckCatalogueResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/connectors/{connector_id}/config-findings/link-evidence":{"post":{"tags":["config-findings","config-findings"],"summary":"Link Config Finding Evidence","description":"Create + link compliance evidence for this connector's failing findings.\n\nGroups failing findings by the NIST CSF requirement they map to and records one\nevidence artefact per requirement (which inherits into every enabled framework).","operationId":"link_config_finding_evidence_org__org_id__project__project_id__connectors__connector_id__config_findings_link_evidence_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"connector_id","in":"path","required":true,"schema":{"type":"string","title":"Connector Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/connectors/{connector_id}/config-findings/derive-actions":{"post":{"tags":["config-findings","config-findings"],"summary":"Derive Config Finding Actions","description":"Derive remediation actions from this connector's failing configuration findings.\n\nProposes one remediation action per failing check (accept/deny inbox), links them to a\nsingle high-level cloud-misconfiguration risk, and materialises config-finding evidence\non the NIST CSF spine. Idempotent. Same write-through the post-sync callback runs.","operationId":"derive_config_finding_actions_org__org_id__project__project_id__connectors__connector_id__config_findings_derive_actions_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"connector_id","in":"path","required":true,"schema":{"type":"string","title":"Connector Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/connectors/{connector_id}/config-findings/actions":{"post":{"tags":["config-findings","config-findings"],"summary":"Request Config Finding Action","description":"Propose a remediation action for one failing configuration check.\n\nAdds a single item to the review inbox for the check's affected resources — nothing\nis changed until a reviewer approves it. Repeat requests for a check that is already\ntracked return ``already_tracked`` instead of a duplicate.","operationId":"request_config_finding_action_org__org_id__project__project_id__connectors__connector_id__config_findings_actions_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"connector_id","in":"path","required":true,"schema":{"type":"string","title":"Connector Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfigFindingActionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfigFindingProposalResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/connectors/{connector_id}/config-findings/exceptions":{"post":{"tags":["config-findings","config-findings"],"summary":"Request Config Finding Exception","description":"Ask to accept one failing configuration check as a known exception.\n\nAdds the request to the review inbox with the supplied reason. The check keeps\nreporting as failing until a reviewer decides; approving records the decision.","operationId":"request_config_finding_exception_org__org_id__project__project_id__connectors__connector_id__config_findings_exceptions_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"connector_id","in":"path","required":true,"schema":{"type":"string","title":"Connector Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfigFindingExceptionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfigFindingProposalResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/frameworks":{"get":{"tags":["compliance"],"summary":"List Enabled Frameworks","operationId":"list_enabled_frameworks_api_org__org_id__project__project_id__compliance_frameworks_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EnabledFrameworkResponse"},"title":"Response List Enabled Frameworks Api Org  Org Id  Project  Project Id  Compliance Frameworks Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/frameworks/available":{"get":{"tags":["compliance"],"summary":"List Available Frameworks","operationId":"list_available_frameworks_api_org__org_id__project__project_id__compliance_frameworks_available_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Framework"},"title":"Response List Available Frameworks Api Org  Org Id  Project  Project Id  Compliance Frameworks Available Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/frameworks/import":{"post":{"tags":["compliance"],"summary":"Import Framework","operationId":"import_framework_api_org__org_id__project__project_id__compliance_frameworks_import_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportFrameworkRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Framework"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/frameworks/templates/{template_id}":{"get":{"tags":["compliance"],"summary":"Get Framework Template","description":"Return a starter template for the custom-framework builder.\n\nThe only template today is ``nist-csf@2.0`` — its categories and controls\npre-populate the builder so an organisation can adapt the spine rather than\nstart from a blank grid.","operationId":"get_framework_template_api_org__org_id__project__project_id__compliance_frameworks_templates__template_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"template_id","in":"path","required":true,"schema":{"type":"string","title":"Template Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Framework Template Api Org  Org Id  Project  Project Id  Compliance Frameworks Templates  Template Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/frameworks/{framework_id}/enable":{"post":{"tags":["compliance"],"summary":"Enable Framework","operationId":"enable_framework_api_org__org_id__project__project_id__compliance_frameworks__framework_id__enable_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"framework_id","in":"path","required":true,"schema":{"type":"string","title":"Framework Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/EnableFrameworkRequest"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnabledFrameworkResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["compliance"],"summary":"Disable Framework","operationId":"disable_framework_api_org__org_id__project__project_id__compliance_frameworks__framework_id__enable_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"framework_id","in":"path","required":true,"schema":{"type":"string","title":"Framework Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/frameworks/{framework_id}":{"delete":{"tags":["compliance"],"summary":"Delete Framework","description":"Permanently delete a custom framework and all of its requirements.\n\nOnly frameworks you authored can be deleted; built-in frameworks are\nread-only. Deletion is refused (409) while the framework is still enabled in\nany project or has any assessments — disable it everywhere and clear its\nassessments first so no data is left behind.","operationId":"delete_framework_api_org__org_id__project__project_id__compliance_frameworks__framework_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"framework_id","in":"path","required":true,"schema":{"type":"string","title":"Framework Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/frameworks/{framework_id}/requirements":{"get":{"tags":["compliance"],"summary":"List Requirements","operationId":"list_requirements_api_org__org_id__project__project_id__compliance_frameworks__framework_id__requirements_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"framework_id","in":"path","required":true,"schema":{"type":"string","title":"Framework Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Requirement"},"title":"Response List Requirements Api Org  Org Id  Project  Project Id  Compliance Frameworks  Framework Id  Requirements Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/frameworks/{framework_id}/assessments":{"post":{"tags":["compliance"],"summary":"Create Assessment","operationId":"create_assessment_api_org__org_id__project__project_id__compliance_frameworks__framework_id__assessments_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"framework_id","in":"path","required":true,"schema":{"type":"string","title":"Framework Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssessmentCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Assessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["compliance"],"summary":"List Assessments","operationId":"list_assessments_api_org__org_id__project__project_id__compliance_frameworks__framework_id__assessments_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"framework_id","in":"path","required":true,"schema":{"type":"string","title":"Framework Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Assessment"},"title":"Response List Assessments Api Org  Org Id  Project  Project Id  Compliance Frameworks  Framework Id  Assessments Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/assessments/overview":{"get":{"tags":["compliance"],"summary":"List Assessments Overview","description":"Project-wide list of every assessment (across all frameworks, enabled or\nnot) with per-assessment stats + a ``framework_enabled`` lock flag.","operationId":"list_assessments_overview_api_org__org_id__project__project_id__compliance_assessments_overview_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AssessmentOverviewItem"},"title":"Response List Assessments Overview Api Org  Org Id  Project  Project Id  Compliance Assessments Overview Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/frameworks/{framework_id}/assessments/{assessment_id}":{"get":{"tags":["compliance"],"summary":"Get Assessment","operationId":"get_assessment_api_org__org_id__project__project_id__compliance_frameworks__framework_id__assessments__assessment_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"framework_id","in":"path","required":true,"schema":{"type":"string","title":"Framework Id"}},{"name":"assessment_id","in":"path","required":true,"schema":{"type":"string","title":"Assessment Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Assessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["compliance"],"summary":"Delete Assessment","description":"Delete an assessment and all of its scores from this project.\n\nThis permanently removes the assessment's recorded scores and cannot be\nundone. It works even when the framework has been disabled, so a leftover\nassessment can be cleared to free the framework for deletion.","operationId":"delete_assessment_api_org__org_id__project__project_id__compliance_frameworks__framework_id__assessments__assessment_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"framework_id","in":"path","required":true,"schema":{"type":"string","title":"Framework Id"}},{"name":"assessment_id","in":"path","required":true,"schema":{"type":"string","title":"Assessment Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/frameworks/{framework_id}/assessments/{assessment_id}/scores":{"get":{"tags":["compliance"],"summary":"List Assessment Scores","operationId":"list_assessment_scores_api_org__org_id__project__project_id__compliance_frameworks__framework_id__assessments__assessment_id__scores_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"framework_id","in":"path","required":true,"schema":{"type":"string","title":"Framework Id"}},{"name":"assessment_id","in":"path","required":true,"schema":{"type":"string","title":"Assessment Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AssessmentScore"},"title":"Response List Assessment Scores Api Org  Org Id  Project  Project Id  Compliance Frameworks  Framework Id  Assessments  Assessment Id  Scores Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/frameworks/{framework_id}/assessments/{assessment_id}/scores/{requirement_id}":{"put":{"tags":["compliance"],"summary":"Upsert Assessment Score","description":"Set a control's numeric score (deprecated).\n\nSuperseded by the state endpoint (`.../scores/{requirement_id}/state`), which\nis the single scoring vocabulary — the numeric score is now a derived\nprojection of the control state. This path is retained for backward\ncompatibility and cannot promote a control to `validated`.","operationId":"upsert_assessment_score_api_org__org_id__project__project_id__compliance_frameworks__framework_id__assessments__assessment_id__scores__requirement_id__put","deprecated":true,"security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"framework_id","in":"path","required":true,"schema":{"type":"string","title":"Framework Id"}},{"name":"assessment_id","in":"path","required":true,"schema":{"type":"string","title":"Assessment Id"}},{"name":"requirement_id","in":"path","required":true,"schema":{"type":"string","title":"Requirement Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssessmentScoreUpsert"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssessmentScore"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/frameworks/{framework_id}/assessments/{assessment_id}/scores/{requirement_id}/state":{"put":{"tags":["compliance"],"summary":"Upsert Assessment Score State","description":"Set a requirement's compliance state.\n\nMoves the requirement between its compliance states (unknown, claimed,\nvalidated, managed, gap, not-applicable). Returns 422 for a disallowed\nstate change, or when a reason is required (moving to managed or\nnot-applicable) but not supplied.","operationId":"upsert_assessment_score_state_api_org__org_id__project__project_id__compliance_frameworks__framework_id__assessments__assessment_id__scores__requirement_id__state_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"framework_id","in":"path","required":true,"schema":{"type":"string","title":"Framework Id"}},{"name":"assessment_id","in":"path","required":true,"schema":{"type":"string","title":"Assessment Id"}},{"name":"requirement_id","in":"path","required":true,"schema":{"type":"string","title":"Requirement Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssessmentScoreStateUpsert"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssessmentScore"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/frameworks/{framework_id}/assessments/{assessment_id}/maturity/{maturity_key}/level":{"put":{"tags":["compliance"],"summary":"Upsert Maturity Level","description":"Set a CS-CMM maturity scale to a single achieved level.\n\nRecords the level the organisation is at for this control: tiers at or below\nit become validated, tiers above become a gap, and the selected tier carries\nthe supplied evidence. Returns the maturity scale's tier records. Returns 404\nfor an unknown maturity scale or assessment, and 422 for a level outside the\nscale's range.","operationId":"upsert_maturity_level_api_org__org_id__project__project_id__compliance_frameworks__framework_id__assessments__assessment_id__maturity__maturity_key__level_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"framework_id","in":"path","required":true,"schema":{"type":"string","title":"Framework Id"}},{"name":"assessment_id","in":"path","required":true,"schema":{"type":"string","title":"Assessment Id"}},{"name":"maturity_key","in":"path","required":true,"schema":{"type":"string","title":"Maturity Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MaturityLevelUpsert"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AssessmentScore"},"title":"Response Upsert Maturity Level Api Org  Org Id  Project  Project Id  Compliance Frameworks  Framework Id  Assessments  Assessment Id  Maturity  Maturity Key  Level Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/assessments/{assessment_id}/derive":{"post":{"tags":["compliance"],"summary":"Derive Scores","operationId":"derive_scores_api_org__org_id__project__project_id__compliance_assessments__assessment_id__derive_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"assessment_id","in":"path","required":true,"schema":{"type":"string","title":"Assessment Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssessmentDeriveRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssessmentDeriveResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/frameworks/{framework_id}/coverage":{"get":{"tags":["compliance"],"summary":"Get Coverage","operationId":"get_coverage_api_org__org_id__project__project_id__compliance_frameworks__framework_id__coverage_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"framework_id","in":"path","required":true,"schema":{"type":"string","title":"Framework Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoverageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/frameworks/{framework_id}/maturity":{"get":{"tags":["compliance"],"summary":"Get Maturity","operationId":"get_maturity_api_org__org_id__project__project_id__compliance_frameworks__framework_id__maturity_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"framework_id","in":"path","required":true,"schema":{"type":"string","title":"Framework Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MaturityResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/frameworks/{framework_id}/gaps":{"get":{"tags":["compliance"],"summary":"Get Gaps","operationId":"get_gaps_api_org__org_id__project__project_id__compliance_frameworks__framework_id__gaps_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"framework_id","in":"path","required":true,"schema":{"type":"string","title":"Framework Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GapResponse"},"title":"Response Get Gaps Api Org  Org Id  Project  Project Id  Compliance Frameworks  Framework Id  Gaps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/frameworks/{framework_id}/posture-kpis":{"get":{"tags":["compliance"],"summary":"Get Posture Kpis","description":"Verified-coverage KPIs for the compliance posture.","operationId":"get_posture_kpis_api_org__org_id__project__project_id__compliance_frameworks__framework_id__posture_kpis_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"framework_id","in":"path","required":true,"schema":{"type":"string","title":"Framework Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostureKpisResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/assessments/{assessment_id}/projected-coverage":{"get":{"tags":["compliance"],"summary":"Get Projected Coverage","description":"Project a framework's coverage onto another framework.","operationId":"get_projected_coverage_api_org__org_id__project__project_id__compliance_assessments__assessment_id__projected_coverage_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"assessment_id","in":"path","required":true,"schema":{"type":"string","title":"Assessment Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectedCoverageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/recommended-frameworks":{"get":{"tags":["compliance"],"summary":"Get Recommended Frameworks","description":"Recommend frameworks based on sector and applicable regulators.","operationId":"get_recommended_frameworks_api_org__org_id__project__project_id__compliance_recommended_frameworks_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecommendedFrameworksResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/reports":{"post":{"tags":["compliance"],"summary":"Generate Compliance Report","description":"Assemble an ephemeral audit-ready report (coverage + maturity +\ngaps + linked evidence + attribution) over the enabled frameworks. Risk +\nSLA sections are stub-flagged pending the risk-register + SLA work. Not persisted.","operationId":"generate_compliance_report_api_org__org_id__project__project_id__compliance_reports_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ComplianceReportRequest"},{"type":"null"}],"title":"Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComplianceReportResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/onboarding/recommend":{"post":{"tags":["compliance"],"summary":"Onboarding Recommend","description":"Onboarding wizard: map quiz answers to recommended frameworks +\na tailored AI summary. Read-only preview — answers are not persisted, so\nthe user can review before committing on the apply step.","operationId":"onboarding_recommend_api_org__org_id__project__project_id__compliance_onboarding_recommend_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingQuizAnswers"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingRecommendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/onboarding/modules":{"post":{"tags":["compliance"],"summary":"Onboarding Confirm Modules","description":"Confirm the wizard's first-step module selection.\n\nPersists ``enabled_modules`` and immediately releases the held main-domain\nscans the user opted into — the admin has already verified their email by\nsigning in, so this is the scan-consent gate. Scan modules turned off stay\ndormant (never deleted). GRC + policy setup still run on the full apply.\n\nWhen a scan module is enabled, the request must carry the scan-target\nauthorisation acknowledgement (``acknowledged`` + current terms version); it's\nrecorded in the audit log — onboarding's held scans bypass the scan router's own\ngate, so this is where that consent is captured. ADMIN only. Idempotent.","operationId":"onboarding_confirm_modules_api_org__org_id__project__project_id__compliance_onboarding_modules_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingModulesRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingModulesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/onboarding/dismiss":{"post":{"tags":["compliance"],"summary":"Onboarding Dismiss","description":"Record that an admin chose \"Skip for now\" in the onboarding wizard.\n\nPersists ``onboarding_dismissed_at`` on the project's preferences — the durable,\nserver-authoritative signal the dashboard reads to stop auto-redirecting to the\nwizard (replacing a client cookie). The persistent banner remains until\nonboarding is completed. ADMIN only.","operationId":"onboarding_dismiss_api_org__org_id__project__project_id__compliance_onboarding_dismiss_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/onboarding/apply":{"post":{"tags":["compliance"],"summary":"Onboarding Apply","description":"Onboarding wizard: write preferences, enable the selected frameworks,\ncreate a first assessment, and best-effort seed the AI Sidekick's team memory\nwith the org profile. Run-once per project. ADMIN only.","operationId":"onboarding_apply_api_org__org_id__project__project_id__compliance_onboarding_apply_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingApplyRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingApplyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/controls/{control_id}/mappings":{"post":{"tags":["compliance"],"summary":"Create Control Mapping","operationId":"create_control_mapping_api_org__org_id__project__project_id__compliance_controls__control_id__mappings_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"control_id","in":"path","required":true,"schema":{"type":"string","title":"Control Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ControlMappingCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ControlMappingResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["compliance"],"summary":"List Mappings For Control","description":"List the compliance Requirements a tenant Control is mapped to (the\ncontrol-centric mirror of `/requirements/{id}/control-mappings`). Traverses\n`mapped_to` forward from the control; unknown control ids surface as 404 via\nthe service ValueError guard.","operationId":"list_mappings_for_control_api_org__org_id__project__project_id__compliance_controls__control_id__mappings_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"control_id","in":"path","required":true,"schema":{"type":"string","title":"Control Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ControlMappingResponse"},"title":"Response List Mappings For Control Api Org  Org Id  Project  Project Id  Compliance Controls  Control Id  Mappings Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/controls/{control_id}/mappings/{mapping_id}":{"delete":{"tags":["compliance"],"summary":"Delete Control Mapping","operationId":"delete_control_mapping_api_org__org_id__project__project_id__compliance_controls__control_id__mappings__mapping_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"control_id","in":"path","required":true,"schema":{"type":"string","title":"Control Id"}},{"name":"mapping_id","in":"path","required":true,"schema":{"type":"string","title":"Mapping Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/requirements/{requirement_id}/control-mappings":{"get":{"tags":["compliance"],"summary":"List Control Mappings For Requirement","description":"List the tenant Controls mapped to a given requirement (reverse of the\ncontrol-centric POST mapping endpoint). Traverses `mapped_to` back from the\ntenant-local `requirement_ref` anchor; unknown/typo requirement ids surface\nas 404 via the service ValueError guard (mirrors the sibling `/evidence`).","operationId":"list_control_mappings_for_requirement_api_org__org_id__project__project_id__compliance_requirements__requirement_id__control_mappings_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"requirement_id","in":"path","required":true,"schema":{"type":"string","title":"Requirement Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ControlMappingResponse"},"title":"Response List Control Mappings For Requirement Api Org  Org Id  Project  Project Id  Compliance Requirements  Requirement Id  Control Mappings Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/controls/mapping-counts":{"get":{"tags":["compliance"],"summary":"List Control Mapping Counts","description":"Per-control mapping counts for the whole project (`{control_id: count}`),\nso the Controls table can show a \"View\" affordance only for controls that\nactually have mappings — one grouped query, no per-row N+1.","operationId":"list_control_mapping_counts_api_org__org_id__project__project_id__compliance_controls_mapping_counts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"integer"},"title":"Response List Control Mapping Counts Api Org  Org Id  Project  Project Id  Compliance Controls Mapping Counts Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/requirements/{requirement_id}/findings":{"get":{"tags":["compliance"],"summary":"List Findings For Requirement","operationId":"list_findings_for_requirement_api_org__org_id__project__project_id__compliance_requirements__requirement_id__findings_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"requirement_id","in":"path","required":true,"schema":{"type":"string","title":"Requirement Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/RequirementFindingResponse"},"title":"Response List Findings For Requirement Api Org  Org Id  Project  Project Id  Compliance Requirements  Requirement Id  Findings Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/requirements/{requirement_id}/evidence":{"get":{"tags":["compliance"],"summary":"List Evidence For Requirement","description":"List every Evidence linked to a given requirement (via the tenant-local\n`requirement_ref` anchor + `evidence_link` RELATION). Path placement under\n`/requirements/{id}/...` matches the sibling `/findings` endpoint for\nsymmetry; the service validates that the global requirement exists and\nraises ValueError for typos / unknown ids, which we map to 404.","operationId":"list_evidence_for_requirement_api_org__org_id__project__project_id__compliance_requirements__requirement_id__evidence_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"requirement_id","in":"path","required":true,"schema":{"type":"string","title":"Requirement Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Evidence"},"title":"Response List Evidence For Requirement Api Org  Org Id  Project  Project Id  Compliance Requirements  Requirement Id  Evidence Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/proposals":{"get":{"tags":["compliance"],"summary":"List Proposals","operationId":"list_proposals_api_org__org_id__project__project_id__compliance_proposals_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"status","in":"query","required":false,"schema":{"$ref":"#/components/schemas/ProposalStatus","default":"pending"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AssistantProposal"},"title":"Response List Proposals Api Org  Org Id  Project  Project Id  Compliance Proposals Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/posture":{"get":{"tags":["compliance"],"summary":"List Posture Items","description":"Aggregated \"what to do today\" view across gap scores, pending\nproposals, and compliance-tagged actions, sorted with minimum-baseline\ncontrol items at the top. Each item includes a `deep_link` to the relevant page.","operationId":"list_posture_items_api_org__org_id__project__project_id__compliance_posture_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PostureItem"},"title":"Response List Posture Items Api Org  Org Id  Project  Project Id  Compliance Posture Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/proposals/{proposal_id}/approve":{"post":{"tags":["compliance"],"summary":"Approve Proposal","operationId":"approve_proposal_api_org__org_id__project__project_id__compliance_proposals__proposal_id__approve_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"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/AssistantProposal"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/proposals/{proposal_id}/reject":{"post":{"tags":["compliance"],"summary":"Reject Proposal","operationId":"reject_proposal_api_org__org_id__project__project_id__compliance_proposals__proposal_id__reject_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"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/AssistantProposal"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/frameworks/{framework_id}/agent/propose-scores":{"post":{"tags":["compliance"],"summary":"Propose Scores From Findings","operationId":"propose_scores_from_findings_api_org__org_id__project__project_id__compliance_frameworks__framework_id__agent_propose_scores_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"framework_id","in":"path","required":true,"schema":{"type":"string","title":"Framework Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentProposeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Propose Scores From Findings Api Org  Org Id  Project  Project Id  Compliance Frameworks  Framework Id  Agent Propose Scores Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/frameworks/{framework_id}/assessments/{assessment_id}/agent/propose-state-validations":{"post":{"tags":["compliance"],"summary":"Propose State Validations","description":"Propose state validations for claimed controls.\n\nInspects every `claimed` control's linked findings and proposes\n`claimed -> validated` (no contradicting evidence) or `claimed -> gap`\n(open critical/high findings). Advisory only; promotion to Verified\nalways requires a human via `/proposals/{id}/approve`.","operationId":"propose_state_validations_api_org__org_id__project__project_id__compliance_frameworks__framework_id__assessments__assessment_id__agent_propose_state_validations_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"framework_id","in":"path","required":true,"schema":{"type":"string","title":"Framework Id"}},{"name":"assessment_id","in":"path","required":true,"schema":{"type":"string","title":"Assessment Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentProposeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Propose State Validations Api Org  Org Id  Project  Project Id  Compliance Frameworks  Framework Id  Assessments  Assessment Id  Agent Propose State Validations Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/frameworks/{framework_id}/agent/propose-remediations":{"post":{"tags":["compliance"],"summary":"Propose Remediations From Gaps","operationId":"propose_remediations_from_gaps_api_org__org_id__project__project_id__compliance_frameworks__framework_id__agent_propose_remediations_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"framework_id","in":"path","required":true,"schema":{"type":"string","title":"Framework Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentProposeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Propose Remediations From Gaps Api Org  Org Id  Project  Project Id  Compliance Frameworks  Framework Id  Agent Propose Remediations Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/workflows/monthly-gap-review":{"post":{"tags":["compliance"],"summary":"Run Monthly Gap Review","operationId":"run_monthly_gap_review_api_org__org_id__project__project_id__compliance_workflows_monthly_gap_review_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentWorkflowRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Run Monthly Gap Review Api Org  Org Id  Project  Project Id  Compliance Workflows Monthly Gap Review Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/workflows/quarterly-full-assessment":{"post":{"tags":["compliance"],"summary":"Run Quarterly Full Assessment","operationId":"run_quarterly_full_assessment_api_org__org_id__project__project_id__compliance_workflows_quarterly_full_assessment_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentWorkflowRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Run Quarterly Full Assessment Api Org  Org Id  Project  Project Id  Compliance Workflows Quarterly Full Assessment Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/preferences":{"get":{"tags":["preferences"],"summary":"Get Preferences","operationId":"get_preferences_api_org__org_id__project__project_id__preferences_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectPreferences"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["preferences"],"summary":"Update Preferences","operationId":"update_preferences_api_org__org_id__project__project_id__preferences_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectPreferencesUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectPreferences"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/preferences/reproject":{"post":{"tags":["preferences"],"summary":"Recompute Inferred Coverage","description":"Recompute Inferred coverage: re-project from every enabled framework's\ndirect scores. Idempotent; never re-assesses.","operationId":"recompute_inferred_coverage_api_org__org_id__project__project_id__preferences_reproject_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReprojectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/modules/activate":{"post":{"tags":["preferences"],"summary":"Activate Modules","description":"Enable a previously-declined scan module and release its dormant held scan.\n\nEnable-only + scan-only; the requested modules are unioned into the existing set.\nWhen a scan module is newly enabled the scan-target authorisation is required and\nrecorded in the audit log. ADMIN only. Idempotent (already-active → no-op).","operationId":"activate_modules_api_org__org_id__project__project_id__modules_activate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModuleActivationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModuleActivationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/evidence/upload-url":{"post":{"tags":["compliance"],"summary":"Mint Upload Url","description":"Mint a short-lived presigned POST so the browser can upload the\nfile body directly to S3. The returned ``blob_ref`` is then passed\nback as ``EvidenceCreate.blob_ref``. Tenant prefix is derived from\n``ctx`` — the client cannot influence the object key.","operationId":"mint_upload_url_api_org__org_id__project__project_id__compliance_evidence_upload_url_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EvidenceUploadUrlRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EvidenceUploadUrlResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/evidence":{"post":{"tags":["compliance"],"summary":"Create Evidence","operationId":"create_evidence_api_org__org_id__project__project_id__compliance_evidence_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EvidenceCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Evidence"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["compliance"],"summary":"List Evidence","operationId":"list_evidence_api_org__org_id__project__project_id__compliance_evidence_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/EvidenceSource"},{"type":"null"}],"title":"Source"}},{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/EvidenceType"},{"type":"null"}],"title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Evidence"},"title":"Response List Evidence Api Org  Org Id  Project  Project Id  Compliance Evidence Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/evidence/{evidence_id}/download-url":{"get":{"tags":["compliance"],"summary":"Mint Download Url","description":"Mint a short-lived presigned GET for the evidence blob. Refuses\nif the stored ``blob_ref`` does not match the request tenant (defense\nagainst data-layer tampering).","operationId":"mint_download_url_api_org__org_id__project__project_id__compliance_evidence__evidence_id__download_url_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"evidence_id","in":"path","required":true,"schema":{"type":"string","title":"Evidence Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EvidenceDownloadUrlResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/evidence/{evidence_id}":{"get":{"tags":["compliance"],"summary":"Get Evidence","operationId":"get_evidence_api_org__org_id__project__project_id__compliance_evidence__evidence_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"evidence_id","in":"path","required":true,"schema":{"type":"string","title":"Evidence Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Evidence"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["compliance"],"summary":"Update Evidence","operationId":"update_evidence_api_org__org_id__project__project_id__compliance_evidence__evidence_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"evidence_id","in":"path","required":true,"schema":{"type":"string","title":"Evidence Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EvidenceUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Evidence"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["compliance"],"summary":"Delete Evidence","operationId":"delete_evidence_api_org__org_id__project__project_id__compliance_evidence__evidence_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"evidence_id","in":"path","required":true,"schema":{"type":"string","title":"Evidence Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/evidence/{evidence_id}/links":{"get":{"tags":["compliance"],"summary":"List Links","operationId":"list_links_api_org__org_id__project__project_id__compliance_evidence__evidence_id__links_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"evidence_id","in":"path","required":true,"schema":{"type":"string","title":"Evidence Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EvidenceLink"},"title":"Response List Links Api Org  Org Id  Project  Project Id  Compliance Evidence  Evidence Id  Links Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/evidence/{evidence_id}/links/requirements/{requirement_id}":{"post":{"tags":["compliance"],"summary":"Link To Requirement","operationId":"link_to_requirement_api_org__org_id__project__project_id__compliance_evidence__evidence_id__links_requirements__requirement_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"evidence_id","in":"path","required":true,"schema":{"type":"string","title":"Evidence Id"}},{"name":"requirement_id","in":"path","required":true,"schema":{"type":"string","title":"Requirement Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EvidenceLinkCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EvidenceLink"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/evidence/{evidence_id}/links/scores/{score_id}":{"post":{"tags":["compliance"],"summary":"Link To Assessment Score","operationId":"link_to_assessment_score_api_org__org_id__project__project_id__compliance_evidence__evidence_id__links_scores__score_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"evidence_id","in":"path","required":true,"schema":{"type":"string","title":"Evidence Id"}},{"name":"score_id","in":"path","required":true,"schema":{"type":"string","title":"Score Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EvidenceLinkCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EvidenceLink"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/evidence/{evidence_id}/links/findings/{finding_id}":{"post":{"tags":["compliance"],"summary":"Link To Finding","operationId":"link_to_finding_api_org__org_id__project__project_id__compliance_evidence__evidence_id__links_findings__finding_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"evidence_id","in":"path","required":true,"schema":{"type":"string","title":"Evidence Id"}},{"name":"finding_id","in":"path","required":true,"schema":{"type":"string","title":"Finding Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EvidenceLinkCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EvidenceLink"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/evidence/{evidence_id}/links/{link_id}":{"delete":{"tags":["compliance"],"summary":"Unlink","operationId":"unlink_api_org__org_id__project__project_id__compliance_evidence__evidence_id__links__link_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"evidence_id","in":"path","required":true,"schema":{"type":"string","title":"Evidence Id"}},{"name":"link_id","in":"path","required":true,"schema":{"type":"string","title":"Link Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/risks/stats":{"get":{"tags":["compliance"],"summary":"Risk Stats","operationId":"risk_stats_api_org__org_id__project__project_id__compliance_risks_stats_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RiskStatsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/risks/treated-over-time":{"get":{"tags":["compliance"],"summary":"Risk Treated Over Time","operationId":"risk_treated_over_time_api_org__org_id__project__project_id__compliance_risks_treated_over_time_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"weeks","in":"query","required":false,"schema":{"type":"integer","maximum":52,"minimum":1,"description":"Number of trailing weeks.","default":12,"title":"Weeks"},"description":"Number of trailing weeks."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RiskTreatedSeriesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/risks/derive":{"post":{"tags":["compliance"],"summary":"Derive Risks","operationId":"derive_risks_api_org__org_id__project__project_id__compliance_risks_derive_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"framework_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bound derivation to one framework; omit to scan all enabled.","title":"Framework Id"},"description":"Bound derivation to one framework; omit to scan all enabled."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RiskDeriveResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/actions/derive":{"post":{"tags":["compliance"],"summary":"Derive Actions","description":"Derive remediation-action proposals from current gaps + below-target\nmaturity (\"opportunities for improvement\"). Idempotent across re-runs.","operationId":"derive_actions_api_org__org_id__project__project_id__compliance_actions_derive_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"framework_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bound derivation to one framework; omit to scan all enabled.","title":"Framework Id"},"description":"Bound derivation to one framework; omit to scan all enabled."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActionDeriveResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/org/{org_id}/project/{project_id}/compliance/risks/{risk_id}/status":{"post":{"tags":["compliance"],"summary":"Transition Risk Status","operationId":"transition_risk_status_api_org__org_id__project__project_id__compliance_risks__risk_id__status_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"risk_id","in":"path","required":true,"schema":{"type":"string","title":"Risk Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RiskStatusTransition"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericEntityInfo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/notifications/scan":{"post":{"tags":["notifications","notifications"],"summary":"Send a scan lifecycle notification","description":"Email the organisation's configured recipients about a scan's progress.","operationId":"send_scan_notification_org__org_id__project__project_id__notifications_scan_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanNotificationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Send Scan Notification Org  Org Id  Project  Project Id  Notifications Scan Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/org/{org_id}/project/{project_id}/notifications/critical-vulnerabilities":{"post":{"tags":["notifications","notifications"],"summary":"Send a critical vulnerability notification for a completed scan","description":"Summarise a scan's critical/high vulnerabilities and email the recipients.","operationId":"send_critical_vulnerability_notification_org__org_id__project__project_id__notifications_critical_vulnerabilities_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string","title":"Org Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CriticalVulnerabilityRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Send Critical Vulnerability Notification Org  Org Id  Project  Project Id  Notifications Critical Vulnerabilities Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"ActionCounts":{"properties":{"to_address":{"type":"integer","title":"To Address","default":0},"planned":{"type":"integer","title":"Planned","default":0},"risk_accepted":{"type":"integer","title":"Risk Accepted","default":0},"regressed":{"type":"integer","title":"Regressed","default":0},"completed":{"type":"integer","title":"Completed","default":0}},"type":"object","title":"ActionCounts","description":"The review queue, mirroring the vendor's own counters."},"ActionDeriveResponse":{"properties":{"created":{"items":{"type":"string"},"type":"array","title":"Created"},"count":{"type":"integer","title":"Count","default":0}},"type":"object","title":"ActionDeriveResponse"},"AddDomainRequest":{"properties":{"domain":{"type":"string","maxLength":253,"minLength":1,"title":"Domain","description":"Domain to verify ownership of"}},"type":"object","required":["domain"],"title":"AddDomainRequest"},"AdminInvitationRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"project_role_ids":{"items":{"type":"string"},"type":"array","minItems":1,"title":"Project Role Ids"},"url_template":{"type":"string","title":"Url Template"},"custom_message":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Custom Message","description":"Optional plain-text message appended to the invitation email"}},"type":"object","required":["email","project_role_ids","url_template"],"title":"AdminInvitationRequest"},"AgentProposeRequest":{"properties":{"write_budget":{"type":"integer","maximum":500.0,"minimum":1.0,"title":"Write Budget","default":50},"proposed_by_run_id":{"type":"string","title":"Proposed By Run Id","default":"manual"}},"type":"object","title":"AgentProposeRequest"},"AgentQuotaResponse":{"properties":{"used":{"type":"integer","title":"Used"},"cap":{"type":"integer","title":"Cap"},"topup_balance":{"type":"integer","title":"Topup Balance"},"tier":{"type":"string","title":"Tier"},"allowed":{"type":"boolean","title":"Allowed"}},"type":"object","required":["used","cap","topup_balance","tier","allowed"],"title":"AgentQuotaResponse"},"AgentScopePolicy":{"properties":{"grantable_scopes":{"items":{"type":"string"},"type":"array","title":"Grantable Scopes"},"known_capability_scopes":{"items":{"type":"string"},"type":"array","title":"Known Capability Scopes"}},"type":"object","title":"AgentScopePolicy","description":"Org-level agent-scope policy view.\n\n``grantable_scopes`` is the set of agent *capability* scopes an org admin\nmay grant when minting a key. ``agent:safe`` is implicit and never listed.\n``known_capability_scopes`` lists the full set of supported scopes."},"AgentScopePolicyUpdate":{"properties":{"grantable_scopes":{"items":{"type":"string"},"type":"array","maxItems":8,"title":"Grantable Scopes","description":"Agent capability scopes the organisation enables for granting, e.g. ['agent:vuln-triage','agent:compliance']. Must be a subset of the supported capability scopes; 'agent:safe' is implicit and rejected here."}},"type":"object","required":["grantable_scopes"],"title":"AgentScopePolicyUpdate","description":"Request body for ``PUT /org/{org_id}/agent-policy``."},"AgentWorkflowRequest":{"properties":{"scope":{"additionalProperties":{"type":"string"},"type":"object","title":"Scope"},"token_budget":{"type":"integer","maximum":20000.0,"minimum":100.0,"title":"Token Budget","default":4000},"write_budget":{"type":"integer","maximum":500.0,"minimum":1.0,"title":"Write Budget","default":50}},"type":"object","title":"AgentWorkflowRequest"},"ApiContextResponse":{"properties":{"user_id":{"type":"string","title":"User Id"},"orgs":{"items":{"$ref":"#/components/schemas/ApiOrgRef"},"type":"array","title":"Orgs"}},"type":"object","required":["user_id","orgs"],"title":"ApiContextResponse","description":"Flat list of orgs + projects exposed by their record IDs.\n\nURL paths in this API expect record IDs (``organization:xyz``,\n``project:xyz``). ``/me/projects`` returns full ``OrgInfo``/``ProjectInfo``\npayloads where these IDs are buried; this endpoint exposes only the fields\na script / MCP / E2E client needs to construct\n``/org/{org_id}/project/{project_id}/...`` URLs."},"ApiKeyCreateRequest":{"properties":{"name":{"type":"string","maxLength":64,"minLength":1,"title":"Name","description":"User-friendly label."},"expires_in_days":{"type":"integer","maximum":365.0,"minimum":1.0,"title":"Expires In Days","description":"Lifetime in days. Default 90, max 365.","default":90},"key_type":{"type":"string","enum":["user","worker","agent"],"title":"Key Type","description":"Interaction class to mint: 'user', 'worker', or 'agent'.","default":"user"},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Id","description":"Bound project record id. REQUIRED when key_type='worker'."},"scopes":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":8},{"type":"null"}],"title":"Scopes","description":"Capability scopes for agent keys (GitHub/OAuth-style), e.g. ['agent:safe','agent:vuln-triage']. Defaults to ['agent:safe']. Only valid for key_type='agent'."}},"type":"object","required":["name"],"title":"ApiKeyCreateRequest"},"ApiKeyCreateResponse":{"properties":{"id":{"type":"string","title":"Id"},"user_id":{"type":"string","title":"User Id"},"org_id":{"type":"string","title":"Org Id"},"key_type":{"type":"string","enum":["user","worker","agent"],"title":"Key Type","default":"user"},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Id"},"name":{"type":"string","title":"Name"},"prefix":{"type":"string","title":"Prefix"},"scopes":{"items":{"type":"string"},"type":"array","title":"Scopes"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"last_used_ip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Used Ip"},"revoked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Revoked At"},"revoked_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Revoked By"},"status":{"type":"string","enum":["active","expired","revoked"],"title":"Status"},"plaintext":{"type":"string","title":"Plaintext","description":"The full secret token. Shown ONCE — copy it now; it cannot be retrieved later."}},"type":"object","required":["id","user_id","org_id","name","prefix","created_at","expires_at","status","plaintext"],"title":"ApiKeyCreateResponse","description":"Returned ONCE at creation. `plaintext` is never recoverable afterwards."},"ApiKeyListResponse":{"properties":{"keys":{"items":{"$ref":"#/components/schemas/ApiKeyPublic"},"type":"array","title":"Keys"}},"type":"object","required":["keys"],"title":"ApiKeyListResponse"},"ApiKeyPublic":{"properties":{"id":{"type":"string","title":"Id"},"user_id":{"type":"string","title":"User Id"},"org_id":{"type":"string","title":"Org Id"},"key_type":{"type":"string","enum":["user","worker","agent"],"title":"Key Type","default":"user"},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Id"},"name":{"type":"string","title":"Name"},"prefix":{"type":"string","title":"Prefix"},"scopes":{"items":{"type":"string"},"type":"array","title":"Scopes"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"last_used_ip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Used Ip"},"revoked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Revoked At"},"revoked_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Revoked By"},"status":{"type":"string","enum":["active","expired","revoked"],"title":"Status"}},"type":"object","required":["id","user_id","org_id","name","prefix","created_at","expires_at","status"],"title":"ApiKeyPublic","description":"Safe representation returned by list/get endpoints — never contains plaintext."},"ApiOrgRef":{"properties":{"id":{"type":"string","title":"Id","description":"Record ID, e.g. organization:xyz"},"name":{"type":"string","title":"Name"},"role_type":{"type":"string","title":"Role Type"},"projects":{"items":{"$ref":"#/components/schemas/ApiProjectRef"},"type":"array","title":"Projects"}},"type":"object","required":["id","name","role_type","projects"],"title":"ApiOrgRef","description":"Org ref for API consumers — only the IDs needed to build URLs."},"ApiProjectRef":{"properties":{"id":{"type":"string","title":"Id","description":"Record ID, e.g. project:xyz"},"name":{"type":"string","title":"Name"},"is_main":{"type":"boolean","title":"Is Main","default":false}},"type":"object","required":["id","name"],"title":"ApiProjectRef","description":"Project ref for API consumers — only the IDs needed to build URLs."},"AssembleResponse":{"properties":{"body":{"type":"string","title":"Body"},"missing":{"items":{"type":"string"},"type":"array","title":"Missing"},"at":{"type":"string","format":"date-time","title":"At"}},"type":"object","required":["body"],"title":"AssembleResponse","description":"A document's ordered sections resolved + rendered into one Markdown body."},"Assessment":{"properties":{"created_at":{"type":"string","format":"date-time","title":"Created At","description":"Creation timestamp"},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"Last update timestamp"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"org_id":{"type":"string","title":"Org Id"},"project_id":{"type":"string","title":"Project Id"},"framework_id":{"type":"string","title":"Framework Id"},"period":{"type":"string","title":"Period"},"status":{"type":"string","title":"Status"},"created_by":{"type":"string","title":"Created By"}},"type":"object","required":["org_id","project_id","framework_id","period","status","created_by"],"title":"Assessment"},"AssessmentCreate":{"properties":{"period":{"type":"string","maxLength":64,"minLength":1,"title":"Period"},"status":{"type":"string","maxLength":64,"title":"Status","default":"draft"}},"type":"object","required":["period"],"title":"AssessmentCreate"},"AssessmentDeriveRequest":{"properties":{"target_framework_id":{"type":"string","maxLength":128,"minLength":1,"title":"Target Framework Id"}},"type":"object","required":["target_framework_id"],"title":"AssessmentDeriveRequest"},"AssessmentDeriveResponse":{"properties":{"source_assessment_id":{"type":"string","title":"Source Assessment Id"},"source_framework_id":{"type":"string","title":"Source Framework Id"},"target_framework_id":{"type":"string","title":"Target Framework Id"},"derived_scores":{"items":{"$ref":"#/components/schemas/DerivedScoreResponse"},"type":"array","title":"Derived Scores"}},"type":"object","required":["source_assessment_id","source_framework_id","target_framework_id"],"title":"AssessmentDeriveResponse"},"AssessmentOverviewItem":{"properties":{"id":{"type":"string","title":"Id"},"framework_id":{"type":"string","title":"Framework Id"},"framework_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Framework Name"},"period":{"type":"string","title":"Period"},"status":{"type":"string","title":"Status"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"framework_enabled":{"type":"boolean","title":"Framework Enabled","default":true},"posture":{"anyOf":[{"$ref":"#/components/schemas/PostureKpisResponse"},{"type":"null"}]},"coverage":{"anyOf":[{"$ref":"#/components/schemas/CoverageResponse"},{"type":"null"}]},"maturity":{"anyOf":[{"$ref":"#/components/schemas/MaturityResponse"},{"type":"null"}]}},"type":"object","required":["id","framework_id","period","status"],"title":"AssessmentOverviewItem","description":"One entry in the project-wide Assessments list — an assessment plus the\nsame KPI tiles the wizard/dashboard show (posture, coverage, maturity), and\nwhether its framework is still enabled (``framework_enabled=False`` ⇒ locked /\nread-only). KPIs are framework-level (the current analytics granularity);\nwith the typical one-assessment-per-framework they are effectively\nper-assessment. Computed even for disabled frameworks so locked assessments\nstill render their stats."},"AssessmentScore":{"properties":{"created_at":{"type":"string","format":"date-time","title":"Created At","description":"Creation timestamp"},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"Last update timestamp"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"org_id":{"type":"string","title":"Org Id"},"project_id":{"type":"string","title":"Project Id"},"assessment_id":{"type":"string","title":"Assessment Id"},"requirement_id":{"type":"string","title":"Requirement Id"},"score":{"$ref":"#/components/schemas/ScoreValue"},"compliance":{"$ref":"#/components/schemas/ComplianceStatus"},"state":{"$ref":"#/components/schemas/ControlState","default":"unknown"},"state_transitions":{"items":{"$ref":"#/components/schemas/AssessmentScoreStateTransition"},"type":"array","title":"State Transitions"},"basis":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Basis"},"derived_from":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Derived From"},"evidence_refs":{"items":{"type":"string"},"type":"array","title":"Evidence Refs"},"assessed_at":{"type":"string","format":"date-time","title":"Assessed At"},"assessed_by":{"type":"string","title":"Assessed By"}},"type":"object","required":["org_id","project_id","assessment_id","requirement_id","score","compliance","assessed_by"],"title":"AssessmentScore","description":"Per-control assessment record.\n\nDesign doc §6 makes ``state`` the source of truth; ``score`` and\n``compliance`` are *derived projections* kept on the row only so the\nexisting cross-framework derivation engine\n(`_derive_cross_framework_scores`) and the\n`compute_coverage` / `compute_maturity` analytics keep working\nunchanged.\n\nBackwards-compat: rows that pre-date this field load via the\n`_backfill_state_from_score` validator (no historical row becomes\n`validated` — every tenant starts at 0 % Verified posture, per §6)."},"AssessmentScoreStateTransition":{"properties":{"at":{"type":"string","format":"date-time","title":"At"},"by":{"type":"string","title":"By"},"from_state":{"anyOf":[{"$ref":"#/components/schemas/ControlState"},{"type":"null"}]},"to_state":{"$ref":"#/components/schemas/ControlState"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"basis":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Basis"},"evidence_refs":{"items":{"type":"string"},"type":"array","title":"Evidence Refs"},"auto":{"type":"boolean","title":"Auto","default":false}},"type":"object","required":["by","to_state"],"title":"AssessmentScoreStateTransition","description":"Single entry in the AssessmentScore state-transition log.\n\nMirrors the lightweight finding-transition pattern referenced in\ndesign doc §6. Append-only; the latest entry's ``to_state`` always\nmatches the parent row's ``state``."},"AssessmentScoreStateUpsert":{"properties":{"state":{"$ref":"#/components/schemas/ControlState"},"reason":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Reason"},"basis":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Basis"},"derived_from":{"anyOf":[{"type":"string","maxLength":192},{"type":"null"}],"title":"Derived From"},"evidence_refs":{"items":{"type":"string"},"type":"array","title":"Evidence Refs"},"auto":{"type":"boolean","title":"Auto","default":false}},"type":"object","required":["state"],"title":"AssessmentScoreStateUpsert","description":"Set a requirement's compliance state. The numeric score and compliance\nfields are derived from the chosen state, and each change is recorded for\naudit.\n\n`reason` is mandatory when moving to `managed` or `not_applicable`."},"AssessmentScoreUpsert":{"properties":{"score":{"$ref":"#/components/schemas/ScoreValue"},"basis":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Basis"},"derived_from":{"anyOf":[{"type":"string","maxLength":192},{"type":"null"}],"title":"Derived From"},"evidence_refs":{"items":{"type":"string"},"type":"array","title":"Evidence Refs"}},"type":"object","required":["score"],"title":"AssessmentScoreUpsert","description":"Set a requirement's compliance score directly.\n\nUsed by the `POST .../assessments/{aid}/scores/{rid}` endpoint; the\ncompliance state is derived from the score by the server."},"AssetAdvancedSearchRequest":{"properties":{"limit":{"anyOf":[{"type":"integer","maximum":1000.0,"minimum":1.0},{"type":"null"}],"title":"Limit","description":"Maximum number of records to return (optional - if not provided, returns all records)"},"offset":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Offset","description":"Number of records to skip"},"keyword":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Keyword","description":"General keyword search across name and technical_details"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"Search by asset name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Search by asset description"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type","description":"Filter by asset type"},"category":{"anyOf":[{"$ref":"#/components/schemas/AssetCategory"},{"type":"null"}],"description":"Filter by asset category"},"criticality":{"anyOf":[{"$ref":"#/components/schemas/AssetCriticality"},{"type":"null"}],"description":"Filter by asset criticality"},"environment":{"anyOf":[{"$ref":"#/components/schemas/AssetEnvironment"},{"type":"null"}],"description":"Filter by asset environment"},"lifecycle_stage":{"anyOf":[{"$ref":"#/components/schemas/AssetLifecycleStage"},{"type":"null"}],"description":"Filter by lifecycle stage"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags","description":"Filter by tags"},"ids":{"anyOf":[{"items":{"type":"string","maxLength":160},"type":"array","maxItems":1000,"minItems":1},{"type":"null"}],"title":"Ids","description":"Restrict the results to these assets"},"technical_details_search":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Technical Details Search","description":"Search within technical_details - key-value pairs to match"},"technical_details_contains":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Technical Details Contains","description":"Keywords to search within all technical_details values"},"order_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Order By","description":"Field to order by (optional)"},"order_direction":{"anyOf":[{"type":"string","pattern":"^(asc|desc)$"},{"type":"null"}],"title":"Order Direction","description":"Order direction","default":"desc"}},"type":"object","title":"AssetAdvancedSearchRequest","description":"Advanced asset search request model with pagination support."},"AssetCategory":{"type":"string","enum":["DEVICES","NETWORKS","DATA","APPLICATIONS","IDENTITIES"],"title":"AssetCategory","description":"Asset category enumeration."},"AssetCoverageStats":{"properties":{"total_assets":{"type":"integer","title":"Total Assets","description":"Assets in the project"},"scanned_within_7d":{"type":"integer","title":"Scanned Within 7D","description":"Assets last seen within 7 days"},"scanned_within_30d":{"type":"integer","title":"Scanned Within 30D","description":"Assets last seen within 30 days"},"stale":{"type":"integer","title":"Stale","description":"Assets not seen for over 30 days"}},"type":"object","required":["total_assets","scanned_within_7d","scanned_within_30d","stale"],"title":"AssetCoverageStats","description":"Scan coverage by how recently each asset was last seen."},"AssetCreate":{"properties":{"created_at":{"type":"string","format":"date-time","title":"Created At","description":"Creation timestamp"},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"Last update timestamp"},"name":{"type":"string","title":"Name","description":"Name of the asset"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Description of the asset"},"category":{"$ref":"#/components/schemas/AssetCategory","description":"Asset category (DEVICES, NETWORKS, DATA, APPLICATIONS, IDENTITIES)"},"type":{"type":"string","title":"Type","description":"Specific subtype within category"},"criticality":{"$ref":"#/components/schemas/AssetCriticality","description":"Asset criticality level"},"environment":{"$ref":"#/components/schemas/AssetEnvironment","description":"Environment where asset is deployed"},"lifecycle_stage":{"$ref":"#/components/schemas/AssetLifecycleStage","description":"Current lifecycle stage","default":"active"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","description":"Tags associated with the asset"},"technical_details":{"additionalProperties":true,"type":"object","title":"Technical Details","description":"Flexible JSON for type-specific properties"},"discovered_at":{"type":"string","format":"date-time","title":"Discovered At","description":"When the asset was first discovered"},"last_seen":{"type":"string","format":"date-time","title":"Last Seen","description":"Last time asset was seen"}},"type":"object","required":["name","category","type","criticality","environment"],"title":"AssetCreate","description":"Model for creating a new asset."},"AssetCriticality":{"type":"string","enum":["critical","high","medium","low"],"title":"AssetCriticality","description":"Asset criticality enumeration."},"AssetDiscoveryPoint":{"properties":{"period":{"type":"string","title":"Period","description":"Day of discovery (YYYY-MM-DD)"},"by_category":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Category","description":"Assets discovered per category"}},"type":"object","required":["period"],"title":"AssetDiscoveryPoint","description":"Assets discovered on one day, split by category."},"AssetDiscoveryTimeline":{"properties":{"points":{"items":{"$ref":"#/components/schemas/AssetDiscoveryPoint"},"type":"array","title":"Points","description":"One entry per day with discoveries"},"total":{"type":"integer","title":"Total","description":"Assets counted across the window","default":0}},"type":"object","title":"AssetDiscoveryTimeline","description":"Assets discovered per day — feeds the Assets Discovered chart."},"AssetEnvironment":{"type":"string","enum":["production","staging","development","test","unknown"],"title":"AssetEnvironment","description":"Asset environment enumeration."},"AssetLifecycleStage":{"type":"string","enum":["planned","active","maintenance","decommissioned"],"title":"AssetLifecycleStage","description":"Asset lifecycle stage enumeration."},"AssetPaginationInfo":{"properties":{"currentPageNumber":{"type":"integer","title":"Currentpagenumber","description":"Current page number (0-based)"},"total":{"type":"integer","title":"Total","description":"Total number of asset records across all pages"}},"type":"object","required":["currentPageNumber","total"],"title":"AssetPaginationInfo","description":"Pagination metadata for asset API responses."},"AssetReportRequest":{"properties":{"format":{"type":"string","enum":["csv","pdf"],"title":"Format","description":"Report format: csv or pdf"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"Filter by asset name"},"asset_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asset Type","description":"Filter by asset type"},"category":{"anyOf":[{"$ref":"#/components/schemas/AssetCategory"},{"type":"null"}],"description":"Filter by asset category"},"criticality":{"anyOf":[{"$ref":"#/components/schemas/AssetCriticality"},{"type":"null"}],"description":"Filter by asset criticality"},"environment":{"anyOf":[{"$ref":"#/components/schemas/AssetEnvironment"},{"type":"null"}],"description":"Filter by asset environment"},"lifecycle_stage":{"anyOf":[{"$ref":"#/components/schemas/AssetLifecycleStage"},{"type":"null"}],"description":"Filter by lifecycle stage"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags","description":"Filter by tags"},"technical_details":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Technical Details","description":"Filter by technical details"},"asset_ids":{"anyOf":[{"items":{"type":"string","maxLength":160},"type":"array","maxItems":1000,"minItems":1},{"type":"null"}],"title":"Asset Ids","description":"Report only these assets (defaults to every asset matching the filters)"},"order_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Order By","description":"Order by field (optional)"},"order_direction":{"anyOf":[{"type":"string","enum":["asc","desc"]},{"type":"null"}],"title":"Order Direction","description":"Order direction","default":"desc"},"keyword":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Keyword","description":"General keyword search"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Filter by description"},"technical_details_search":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Technical Details Search","description":"Technical details key-value search"},"technical_details_contains":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Technical Details Contains","description":"Technical details contains keywords"}},"type":"object","required":["format"],"title":"AssetReportRequest","description":"Request model for asset report generation."},"AssetRiskStat":{"properties":{"asset_id":{"type":"string","title":"Asset Id","description":"Asset record identifier"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"Asset name"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category","description":"Asset category"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type","description":"Asset type"},"critical":{"type":"integer","title":"Critical","description":"Active critical findings","default":0},"high":{"type":"integer","title":"High","description":"Active high findings","default":0},"medium":{"type":"integer","title":"Medium","description":"Active medium findings","default":0},"low":{"type":"integer","title":"Low","description":"Active low findings","default":0},"info":{"type":"integer","title":"Info","description":"Active informational findings","default":0},"total":{"type":"integer","title":"Total","description":"Total active findings","default":0}},"type":"object","required":["asset_id"],"title":"AssetRiskStat","description":"One asset's active-finding counts, for the Top Riskiest Assets tile."},"AssetSummaryStats":{"properties":{"total":{"type":"integer","title":"Total","description":"Assets matching the filters","default":0},"by_category":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Category","description":"Assets per category"},"by_criticality":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Criticality","description":"Assets per criticality"},"with_findings":{"type":"integer","title":"With Findings","description":"Assets with at least one active finding","default":0}},"type":"object","title":"AssetSummaryStats","description":"Asset counts for the summary tiles, over the whole filtered set."},"AssetUpdate":{"properties":{"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"},"criticality":{"anyOf":[{"$ref":"#/components/schemas/AssetCriticality"},{"type":"null"}]},"environment":{"anyOf":[{"$ref":"#/components/schemas/AssetEnvironment"},{"type":"null"}]},"lifecycle_stage":{"anyOf":[{"$ref":"#/components/schemas/AssetLifecycleStage"},{"type":"null"}]},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"technical_details":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Technical Details"},"last_seen":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Seen"}},"type":"object","title":"AssetUpdate","description":"Model for updating an asset. Note: name and category are immutable after creation."},"AssetWithCategory":{"properties":{"created_at":{"type":"string","format":"date-time","title":"Created At","description":"Creation timestamp"},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"Last update timestamp"},"name":{"type":"string","title":"Name","description":"Name of the asset"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Description of the asset"},"category":{"$ref":"#/components/schemas/AssetCategory","description":"Asset category (DEVICES, NETWORKS, DATA, APPLICATIONS, IDENTITIES)"},"type":{"type":"string","title":"Type","description":"Specific subtype within category"},"criticality":{"$ref":"#/components/schemas/AssetCriticality","description":"Asset criticality level"},"environment":{"$ref":"#/components/schemas/AssetEnvironment","description":"Environment where asset is deployed"},"lifecycle_stage":{"$ref":"#/components/schemas/AssetLifecycleStage","description":"Current lifecycle stage","default":"active"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","description":"Tags associated with the asset"},"technical_details":{"additionalProperties":true,"type":"object","title":"Technical Details","description":"Flexible JSON for type-specific properties"},"discovered_at":{"type":"string","format":"date-time","title":"Discovered At","description":"When the asset was first discovered"},"last_seen":{"type":"string","format":"date-time","title":"Last Seen","description":"Last time asset was seen"},"id":{"type":"string","title":"Id"},"category_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category Name","description":"Name of the category"},"finding_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Finding Count","description":"Number of findings associated with this asset","default":0},"has_findings":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Findings","description":"Whether this asset has any findings","default":false},"parent_asset_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent Asset Id","description":"Canonical parent (seed domain) this asset groups under"},"parent_asset_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent Asset Name","description":"Name of the canonical parent (seed) — for the grouped-under label"},"is_canonical_root":{"type":"boolean","title":"Is Canonical Root","description":"True for the seed/root domain asset","default":false},"merged_ids":{"items":{"type":"string"},"type":"array","title":"Merged Ids","description":"Ids of same-name twin assets folded into this one"}},"type":"object","required":["name","category","type","criticality","environment","id"],"title":"AssetWithCategory","description":"Asset information with category details."},"AssistantProposal":{"properties":{"created_at":{"type":"string","format":"date-time","title":"Created At","description":"Creation timestamp"},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"Last update timestamp"},"id":{"type":"string","title":"Id"},"org_id":{"type":"string","title":"Org Id"},"project_id":{"type":"string","title":"Project Id"},"proposal_type":{"$ref":"#/components/schemas/ProposalType"},"target_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Id"},"payload":{"additionalProperties":true,"type":"object","title":"Payload"},"confidence":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Confidence"},"rationale":{"type":"string","title":"Rationale"},"evidence_refs":{"items":{"type":"string"},"type":"array","title":"Evidence Refs"},"proposed_by_run_id":{"type":"string","title":"Proposed By Run Id"},"status":{"$ref":"#/components/schemas/ProposalStatus","default":"pending"},"decided_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Decided By"},"decided_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Decided At"},"auto_applied":{"type":"boolean","title":"Auto Applied","default":false}},"type":"object","required":["id","org_id","project_id","proposal_type","confidence","rationale","proposed_by_run_id"],"title":"AssistantProposal"},"AuditAction":{"type":"string","enum":["CREATE","UPDATE","DELETE"],"title":"AuditAction","description":"Audit log action types."},"AuditEvent":{"type":"string","enum":["user_registration","user_creation","user_deletion","user_restore","user_invitation","project_creation","project_deletion","organization_creation","organization_deletion","finding_triage","finding_update","vulnerability_update","finding_suppression_expired","finding_reopened_by_rescan","framework_license_acknowledged","framework_deleted","assessment_deleted","onboarding_completed","baseline_controls_added","onboarding_modules_confirmed","modules_activated","scan_created","scan_updated","scan_deleted","risk_created","risk_updated","risk_status_changed","risk_deleted","action_created","action_updated","proposal_approved","proposal_rejected","api_key.created","api_key.revoked","api_key.expired","api_key.used","subscription_activated","subscription_renewed","subscription_cancelled","subscription_resumed","subscription_payment_failed","credit_topup_purchased","agent.connected","agent.operation","connector.created","connector.deleted","connector.consented","connector.credentials_updated"],"title":"AuditEvent","description":"Audit log event types."},"AuditLogEntry":{"properties":{"action":{"$ref":"#/components/schemas/AuditAction"},"actor_id":{"type":"string","title":"Actor Id"},"actor_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Actor Email"},"organization_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organization Id"},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Id"},"resource_id":{"type":"string","title":"Resource Id"},"resource_type":{"type":"string","title":"Resource Type"},"event":{"anyOf":[{"$ref":"#/components/schemas/AuditEvent"},{"type":"null"}]},"key_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Key Type"},"details":{"additionalProperties":true,"type":"object","title":"Details"},"ip_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ip Address"},"user_agent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Agent"},"timestamp":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Timestamp"}},"type":"object","required":["action","actor_id","resource_id","resource_type"],"title":"AuditLogEntry","description":"Audit log entry model."},"AuditLogListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/AuditLogEntry"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total","default":0},"limit":{"type":"integer","title":"Limit","default":100},"offset":{"type":"integer","title":"Offset","default":0}},"type":"object","title":"AuditLogListResponse","description":"Paginated response for the org-wide audit log endpoint.\n\nShape mirrors `NotificationLogListResponse` so the frontend can share\npagination handling between the audit-log and notification-history tables\non the Settings → Audit Log page."},"BillingPortalRequest":{"properties":{"return_url":{"type":"string","maxLength":2048,"minLength":1,"title":"Return Url"}},"additionalProperties":false,"type":"object","required":["return_url"],"title":"BillingPortalRequest","description":"Request to open the Stripe Billing Portal."},"BillingPortalResponse":{"properties":{"url":{"type":"string","title":"Url"}},"type":"object","required":["url"],"title":"BillingPortalResponse","description":"Billing portal session response."},"Body_import_vulnerabilities_org__org_id__project__project_id__vulnerabilities_import_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_import_vulnerabilities_org__org_id__project__project_id__vulnerabilities_import_post"},"BulkDeleteRequest":{"properties":{"vulnerability_ids":{"items":{"type":"string"},"type":"array","minItems":1,"title":"Vulnerability Ids","description":"List of vulnerability IDs to delete"}},"type":"object","required":["vulnerability_ids"],"title":"BulkDeleteRequest","description":"Request model for bulk delete operations."},"BulkEventCreateRequest":{"properties":{"events":{"items":{"$ref":"#/components/schemas/EventCreate"},"type":"array","maxItems":1000,"minItems":1,"title":"Events","description":"List of events to create"},"scan_instance_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scan Instance Id","description":"Optional scan instance ID to link all events to"}},"type":"object","required":["events"],"title":"BulkEventCreateRequest","description":"Request model for bulk event creation."},"BulkEventCreateResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"events_created":{"type":"integer","title":"Events Created"},"events_failed":{"type":"integer","title":"Events Failed"},"message":{"type":"string","title":"Message"},"created_event_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Created Event Ids","description":"List of created event IDs (deprecated, use created_event_mappings)"},"created_event_mappings":{"anyOf":[{"items":{"$ref":"#/components/schemas/CreatedEventMapping"},"type":"array"},{"type":"null"}],"title":"Created Event Mappings","description":"List of created event mappings with index and type"},"errors":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Errors","description":"List of error messages for failed events"},"edge_failures":{"type":"integer","title":"Edge Failures","description":"Number of events that could not be linked to their scan instance. Non-zero means those events are saved but won't appear on the scan-instance pages for this batch.","default":0}},"type":"object","required":["success","events_created","events_failed","message"],"title":"BulkEventCreateResponse","description":"Response model for bulk event creation."},"BulkFindingUpdateRequest":{"properties":{"finding_ids":{"items":{"type":"string"},"type":"array","maxItems":100,"minItems":1,"title":"Finding Ids","description":"Finding IDs to update (max 100)"},"update":{"$ref":"#/components/schemas/FindingUpdate","description":"Update payload applied to each finding"}},"type":"object","required":["finding_ids","update"],"title":"BulkFindingUpdateRequest","description":"Request model for bulk-updating findings.\n\nMirrors the per-ID success/failure contract used by\n`vulnerability_router.BulkDeleteRequest` so frontend callers can re-use\nthe same handling code."},"BulkFindingUpdateResponse":{"properties":{"successful":{"items":{"type":"string"},"type":"array","title":"Successful"},"failed":{"items":{"type":"string"},"type":"array","title":"Failed"},"total_processed":{"type":"integer","title":"Total Processed"},"errors":{"items":{"type":"string"},"type":"array","title":"Errors"}},"type":"object","required":["total_processed"],"title":"BulkFindingUpdateResponse"},"BulkMarkAsAssetRequest":{"properties":{"event_ids":{"items":{"type":"string"},"type":"array","maxItems":1000,"minItems":1,"title":"Event Ids","description":"List of event IDs to convert to assets"}},"type":"object","required":["event_ids"],"title":"BulkMarkAsAssetRequest","description":"Request model for bulk marking events as assets."},"BulkMarkAsVulnerabilityFindingRequest":{"properties":{"event_ids":{"items":{"type":"string"},"type":"array","maxItems":200,"minItems":1,"title":"Event Ids","description":"List of event IDs to convert"},"force_create_new":{"type":"boolean","title":"Force Create New","description":"If True, always create new findings/vulnerabilities.","default":false}},"type":"object","required":["event_ids"],"title":"BulkMarkAsVulnerabilityFindingRequest","description":"Request model for bulk marking events as vulnerabilities and findings."},"BulkMarkAsVulnerabilityFindingResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"total_vulnerabilities_created":{"type":"integer","title":"Total Vulnerabilities Created"},"total_findings_created":{"type":"integer","title":"Total Findings Created"},"total_failed":{"type":"integer","title":"Total Failed"},"events_processed":{"type":"integer","title":"Events Processed"},"results":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Results"},"errors":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Errors"}},"type":"object","required":["success","total_vulnerabilities_created","total_findings_created","total_failed","events_processed"],"title":"BulkMarkAsVulnerabilityFindingResponse","description":"Response model for bulk vulnerability/finding conversion."},"BulkOperationResponse":{"properties":{"successful":{"items":{"type":"string"},"type":"array","title":"Successful","description":"List of vulnerability IDs that were successfully processed"},"failed":{"items":{"type":"string"},"type":"array","title":"Failed","description":"List of vulnerability IDs that failed to process"},"total_processed":{"type":"integer","title":"Total Processed","description":"Total number of vulnerabilities processed"},"errors":{"items":{"type":"string"},"type":"array","title":"Errors","description":"List of error messages for failed operations"}},"type":"object","required":["total_processed"],"title":"BulkOperationResponse","description":"Response model for bulk operations."},"CategoryScore":{"properties":{"category":{"type":"string","title":"Category"},"achieved":{"type":"number","title":"Achieved"},"max":{"type":"number","title":"Max"},"percentage":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Percentage"},"unrated_controls":{"type":"integer","title":"Unrated Controls","default":0}},"type":"object","required":["category","achieved","max"],"title":"CategoryScore","description":"Points achieved vs available for one control category (Identity, Data, …)."},"ChangeNarrative":{"properties":{"period_days":{"type":"integer","title":"Period Days","default":0},"regressed":{"items":{"$ref":"#/components/schemas/NarrativeMovement"},"type":"array","title":"Regressed"},"gained":{"items":{"$ref":"#/components/schemas/NarrativeMovement"},"type":"array","title":"Gained"},"points_lost":{"type":"number","title":"Points Lost","default":0.0},"points_gained":{"type":"number","title":"Points Gained","default":0.0},"net_points":{"type":"number","title":"Net Points","default":0.0},"controls_regressed":{"type":"integer","title":"Controls Regressed","default":0},"controls_gained":{"type":"integer","title":"Controls Gained","default":0}},"type":"object","title":"ChangeNarrative","description":"What moved over the window, and what it cost or earned."},"ChatCreateConversationRequest":{"properties":{"title":{"type":"string","maxLength":120,"minLength":1,"title":"Title","default":"New Conversation"},"persona":{"type":"string","maxLength":80,"minLength":1,"title":"Persona","default":"ciso"}},"type":"object","title":"ChatCreateConversationRequest"},"ChatCreateConversationResponse":{"properties":{"id":{"type":"string","title":"Id"},"title":{"type":"string","title":"Title"},"persona":{"type":"string","title":"Persona"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","title","persona","created_at"],"title":"ChatCreateConversationResponse"},"ChatMessageRequest":{"properties":{"content":{"type":"string","maxLength":4000,"minLength":1,"title":"Content"},"mode":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}],"title":"Mode"}},"type":"object","required":["content"],"title":"ChatMessageRequest"},"ChatMessageResponse":{"properties":{"id":{"type":"string","title":"Id"},"role":{"type":"string","title":"Role"},"content":{"type":"string","title":"Content"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata"}},"type":"object","required":["id","role","content","created_at"],"title":"ChatMessageResponse"},"CheckCatalogueEntry":{"properties":{"check_id":{"type":"string","title":"Check Id"},"provider":{"type":"string","title":"Provider"},"title":{"type":"string","title":"Title"},"description":{"type":"string","title":"Description","default":""},"severity":{"type":"string","title":"Severity"},"risk":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Risk"},"remediation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Remediation"},"categories":{"items":{"type":"string"},"type":"array","title":"Categories"},"csf_ref":{"items":{"type":"string"},"type":"array","title":"Csf Ref"}},"type":"object","required":["check_id","provider","title","severity"],"title":"CheckCatalogueEntry","description":"A check's static, tenant-independent metadata (read model).\n\nDerived from the in-code check registry, not persisted per tenant. Deliberately omits\nthe check's backing ``resource_types`` (internal snapshot-kind names) from the public\nsurface — the UI needs the human-facing copy, not the collection wiring."},"CheckCatalogueResponse":{"properties":{"checks":{"items":{"$ref":"#/components/schemas/CheckCatalogueEntry"},"type":"array","title":"Checks"},"total":{"type":"integer","title":"Total","default":0}},"type":"object","required":["checks"],"title":"CheckCatalogueResponse"},"CheckGroupSummary":{"properties":{"check_id":{"type":"string","title":"Check Id"},"fail":{"type":"integer","title":"Fail","default":0},"pass":{"type":"integer","title":"Pass","default":0},"not_applicable":{"type":"integer","title":"Not Applicable","default":0},"total":{"type":"integer","title":"Total","default":0},"worst_severity_id":{"type":"integer","title":"Worst Severity Id","default":0}},"type":"object","required":["check_id"],"title":"CheckGroupSummary","description":"Per-check finding counts for one connector (the check-card aggregates)."},"CheckoutResponse":{"properties":{"checkout_url":{"type":"string","title":"Checkout Url"},"session_id":{"type":"string","title":"Session Id"}},"type":"object","required":["checkout_url","session_id"],"title":"CheckoutResponse","description":"Checkout session response."},"ComplianceReportRequest":{"properties":{"framework_ids":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":64},{"type":"null"}],"title":"Framework Ids"}},"type":"object","title":"ComplianceReportRequest"},"ComplianceReportResponse":{"properties":{"org_id":{"type":"string","title":"Org Id"},"project_id":{"type":"string","title":"Project Id"},"generated_at":{"type":"string","format":"date-time","title":"Generated At"},"frameworks":{"items":{"$ref":"#/components/schemas/ReportFrameworkSection"},"type":"array","title":"Frameworks"},"risk_register":{"anyOf":[{"$ref":"#/components/schemas/ReportRiskRegister"},{"type":"null"}]},"sla_stub":{"type":"boolean","title":"Sla Stub","default":true},"attribution":{"items":{"$ref":"#/components/schemas/ReportAttribution"},"type":"array","title":"Attribution"}},"type":"object","required":["org_id","project_id","generated_at"],"title":"ComplianceReportResponse"},"ComplianceStatus":{"type":"string","enum":["met","partial","not_met","n/a"],"title":"ComplianceStatus"},"Confidence":{"type":"string","enum":["measured","derived"],"title":"Confidence","description":"How far a derived figure can be trusted.\n\n``MEASURED`` is arithmetic over data the vendor gave us and is as reliable as the\nsnapshot. ``DERIVED`` depends on a mapping we maintain ourselves, so it can drift\nwhen the vendor revises its catalogue. Every consumer — dashboard, report and\nassistant — must surface this rather than presenting the two as equivalent."},"ConfigFinding":{"properties":{"id":{"type":"string","title":"Id"},"connector":{"type":"string","title":"Connector"},"provider":{"type":"string","title":"Provider"},"check_id":{"type":"string","title":"Check Id"},"resource_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resource Type"},"resource_key":{"type":"string","title":"Resource Key"},"resource_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resource Name"},"title":{"type":"string","title":"Title"},"status":{"$ref":"#/components/schemas/ConfigFindingStatus"},"severity":{"type":"string","title":"Severity"},"class_uid":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Class Uid"},"category_uid":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Category Uid"},"severity_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Severity Id"},"status_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Status Id"},"compliance":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Compliance"},"evidence":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Evidence"},"remediation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Remediation"},"org_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Org Id"},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Id"},"first_seen_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"First Seen At"},"last_seen_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Seen At"},"resolved_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Resolved At"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","connector","provider","check_id","resource_key","title","status","severity"],"title":"ConfigFinding","description":"One persisted ``config_finding`` row (read model)."},"ConfigFindingActionRequest":{"properties":{"check_id":{"type":"string","maxLength":120,"minLength":1,"title":"Check Id"}},"additionalProperties":false,"type":"object","required":["check_id"],"title":"ConfigFindingActionRequest","description":"Ask for a remediation action on one configuration check."},"ConfigFindingExceptionRequest":{"properties":{"check_id":{"type":"string","maxLength":120,"minLength":1,"title":"Check Id"},"reason":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Reason"}},"additionalProperties":false,"type":"object","required":["check_id"],"title":"ConfigFindingExceptionRequest","description":"Ask to accept one failing configuration check as a known exception."},"ConfigFindingListResponse":{"properties":{"findings":{"items":{"$ref":"#/components/schemas/ConfigFinding"},"type":"array","title":"Findings"},"total":{"type":"integer","title":"Total","default":0}},"type":"object","required":["findings"],"title":"ConfigFindingListResponse"},"ConfigFindingProposalResponse":{"properties":{"check_id":{"type":"string","maxLength":120,"title":"Check Id"},"proposals_created":{"type":"integer","maximum":1.0,"minimum":0.0,"title":"Proposals Created","default":0},"already_tracked":{"type":"boolean","title":"Already Tracked","default":false}},"additionalProperties":false,"type":"object","required":["check_id"],"title":"ConfigFindingProposalResponse","description":"Outcome of a per-check remediation or exception request."},"ConfigFindingStatus":{"type":"string","enum":["pass","fail","not_applicable","error"],"title":"ConfigFindingStatus"},"Connector":{"properties":{"created_at":{"type":"string","format":"date-time","title":"Created At","description":"Creation timestamp"},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"Last update timestamp"},"provider":{"$ref":"#/components/schemas/ConnectorProvider","description":"Cloud/SaaS provider this connector targets."},"display_name":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Display Name","description":"Human label shown in the UI."},"org_name":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Org Name","description":"Denormalised owning-organisation name (friendly label; the tenant id remains the key)."},"auth_method":{"$ref":"#/components/schemas/ConnectorAuthMethod","description":"Shared OAuth app + admin consent (default) or the customer's own app / API keys.","default":"oauth"},"external_tenant_id":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"External Tenant Id","description":"External tenant identifier (e.g. the Entra tenant id)."},"external_client_id":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"External Client Id","description":"Non-secret client/app id when the customer brings their own app."},"config":{"additionalProperties":true,"type":"object","title":"Config","description":"Provider-specific non-secret config."},"scopes":{"items":{"type":"string","maxLength":200},"type":"array","maxItems":100,"title":"Scopes","description":"Read-only API scopes granted at consent."},"sync_cadence":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Sync Cadence","description":"Cron/interval hint for scheduled sync."},"id":{"type":"string","title":"Id"},"org_id":{"type":"string","title":"Org Id","description":"Organization these settings belong to."},"status":{"$ref":"#/components/schemas/ConnectorStatus","default":"pending"},"consent_state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Consent State"},"last_sync_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Sync At"},"next_sync_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Next Sync At"},"sync_status":{"anyOf":[{"$ref":"#/components/schemas/SyncStatus"},{"type":"null"}]},"sync_error":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Sync Error"}},"type":"object","required":["provider","id","org_id"],"title":"Connector","description":"Complete persisted connector row (one per org+provider)."},"ConnectorAuthMethod":{"type":"string","enum":["oauth","manual"],"title":"ConnectorAuthMethod","description":"How a connector authenticates to its provider."},"ConnectorCreate":{"properties":{"provider":{"$ref":"#/components/schemas/ConnectorProvider","description":"Cloud/SaaS provider this connector targets."},"display_name":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Display Name","description":"Human label shown in the UI."},"org_name":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Org Name","description":"Denormalised owning-organisation name (friendly label; the tenant id remains the key)."},"auth_method":{"$ref":"#/components/schemas/ConnectorAuthMethod","description":"Shared OAuth app + admin consent (default) or the customer's own app / API keys.","default":"oauth"},"external_tenant_id":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"External Tenant Id","description":"External tenant identifier (e.g. the Entra tenant id)."},"external_client_id":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"External Client Id","description":"Non-secret client/app id when the customer brings their own app."},"config":{"additionalProperties":true,"type":"object","title":"Config","description":"Provider-specific non-secret config."},"scopes":{"items":{"type":"string","maxLength":200},"type":"array","maxItems":100,"title":"Scopes","description":"Read-only API scopes granted at consent."},"sync_cadence":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Sync Cadence","description":"Cron/interval hint for scheduled sync."}},"type":"object","required":["provider"],"title":"ConnectorCreate","description":"Payload to register a new connector (status starts at ``pending``)."},"ConnectorListResponse":{"properties":{"connectors":{"items":{"$ref":"#/components/schemas/Connector"},"type":"array","title":"Connectors"}},"type":"object","required":["connectors"],"title":"ConnectorListResponse"},"ConnectorPostureSummary":{"properties":{"connector":{"type":"string","title":"Connector"},"total":{"type":"integer","title":"Total","default":0},"fail":{"type":"integer","title":"Fail","default":0},"pass":{"type":"integer","title":"Pass","default":0},"not_applicable":{"type":"integer","title":"Not Applicable","default":0},"fail_by_severity":{"additionalProperties":{"type":"integer"},"type":"object","title":"Fail By Severity"},"checks":{"items":{"$ref":"#/components/schemas/CheckGroupSummary"},"type":"array","title":"Checks"},"secure_score":{"anyOf":[{"$ref":"#/components/schemas/SecureScore"},{"type":"null"}]}},"type":"object","required":["connector"],"title":"ConnectorPostureSummary","description":"A connector's posture rolled up server-side — everything the KPI cards + check-group\nheaders need, without shipping the individual findings."},"ConnectorProvider":{"type":"string","enum":["microsoft365","azure","aws","github"],"title":"ConnectorProvider","description":"Supported cloud/SaaS providers. MS365 is implemented; the rest are planned."},"ConnectorStatus":{"type":"string","enum":["pending","consented","connected","error","disabled"],"title":"ConnectorStatus","description":"Lifecycle of a connector instance."},"ConnectorUpdate":{"properties":{"display_name":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Display Name"},"org_name":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Org Name"},"status":{"anyOf":[{"$ref":"#/components/schemas/ConnectorStatus"},{"type":"null"}]},"auth_method":{"anyOf":[{"$ref":"#/components/schemas/ConnectorAuthMethod"},{"type":"null"}]},"external_tenant_id":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"External Tenant Id"},"external_client_id":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"External Client Id"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"},"consent_state":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Consent State"},"scopes":{"anyOf":[{"items":{"type":"string","maxLength":200},"type":"array","maxItems":100},{"type":"null"}],"title":"Scopes"},"sync_cadence":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Sync Cadence"},"last_sync_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Sync At"},"next_sync_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Next Sync At"},"sync_status":{"anyOf":[{"$ref":"#/components/schemas/SyncStatus"},{"type":"null"}]},"sync_error":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Sync Error"}},"type":"object","title":"ConnectorUpdate","description":"Partial update — all fields optional (only set keys are written)."},"ConsentRequest":{"properties":{"external_tenant_id":{"type":"string","maxLength":200,"title":"External Tenant Id","description":"The organisation's tenant identifier."}},"type":"object","required":["external_tenant_id"],"title":"ConsentRequest"},"ConsentUrlResponse":{"properties":{"admin_consent_url":{"type":"string","title":"Admin Consent Url"},"state":{"type":"string","title":"State"}},"type":"object","required":["admin_consent_url","state"],"title":"ConsentUrlResponse"},"ControlMappingCreate":{"properties":{"requirement_id":{"type":"string","maxLength":256,"minLength":1,"title":"Requirement Id"},"status":{"$ref":"#/components/schemas/ComplianceStatus"},"notes":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Notes"}},"type":"object","required":["requirement_id","status"],"title":"ControlMappingCreate"},"ControlMappingResponse":{"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"control_id":{"type":"string","title":"Control Id"},"requirement_id":{"type":"string","title":"Requirement Id"},"status":{"$ref":"#/components/schemas/ComplianceStatus"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"last_reviewed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Reviewed At"},"reviewed_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reviewed By"}},"type":"object","required":["control_id","requirement_id","status"],"title":"ControlMappingResponse"},"ControlState":{"type":"string","enum":["unknown","claimed","validated","gap","managed","not_applicable"],"title":"ControlState","description":"Lifecycle state of an assessed baseline control.\n\nOrder matches §6 of the design doc; do not reorder casually — the\ntransition matrix and posture KPI projections key off the value."},"ConversionRequest":{"properties":{"scan_id":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Scan Id","description":"Optional scan ID to filter events"},"event_types":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":20},{"type":"null"}],"title":"Event Types","description":"Optional event types to convert"},"limit":{"type":"integer","maximum":5000.0,"minimum":1.0,"title":"Limit","description":"Maximum number of events to process (1-5000)","default":1000},"batch_size":{"anyOf":[{"type":"integer","maximum":500.0,"minimum":50.0},{"type":"null"}],"title":"Batch Size","description":"Batch size for processing events (50-500)","default":200}},"type":"object","title":"ConversionRequest","description":"Request model for converting events to assets."},"ConversionResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"assets_created":{"type":"integer","title":"Assets Created"},"message":{"type":"string","title":"Message"},"assets":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Assets","description":"List of created/updated assets as dictionaries"},"statistics":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Statistics","description":"Conversion statistics including event counts"}},"type":"object","required":["success","assets_created","message"],"title":"ConversionResponse","description":"Response model for event to asset conversion."},"CoverageResponse":{"properties":{"framework_id":{"type":"string","title":"Framework Id"},"total_requirements":{"type":"integer","title":"Total Requirements"},"assessed_requirements":{"type":"integer","title":"Assessed Requirements"},"met":{"type":"integer","title":"Met"},"partial":{"type":"integer","title":"Partial"},"not_met":{"type":"integer","title":"Not Met"},"not_applicable":{"type":"integer","title":"Not Applicable"},"coverage_percent":{"type":"number","title":"Coverage Percent"},"inferred_assessed":{"type":"integer","title":"Inferred Assessed","default":0},"inferred_coverage_percent":{"type":"number","title":"Inferred Coverage Percent","default":0.0}},"type":"object","required":["framework_id","total_requirements","assessed_requirements","met","partial","not_met","not_applicable","coverage_percent"],"title":"CoverageResponse"},"CreateCheckoutRequest":{"properties":{"plan":{"type":"string","enum":["starter","essentials","complete","enterprise"],"title":"Plan","default":"complete"},"billing_interval":{"type":"string","enum":["monthly","yearly"],"title":"Billing Interval","default":"monthly"},"success_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Success Url"},"cancel_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Cancel Url"},"trial_period_days":{"anyOf":[{"type":"integer","maximum":90.0,"minimum":1.0},{"type":"null"}],"title":"Trial Period Days"}},"additionalProperties":false,"type":"object","title":"CreateCheckoutRequest","description":"Request to create subscription checkout.\n\nBilling endpoint — bounded payload per .claude/contexts/mcp-and-api-payloads.md."},"CreateProjectWithRolesRequest":{"properties":{"project_name":{"type":"string","title":"Project Name"}},"type":"object","required":["project_name"],"title":"CreateProjectWithRolesRequest"},"CreateRelationshipRequest":{"properties":{"edge_type":{"type":"string","title":"Edge Type","description":"Registry edge table name, e.g. 'mitigates'"},"in_id":{"type":"string","title":"In Id","description":"Record ID of the source entity, e.g. 'control:abc'"},"out_id":{"type":"string","title":"Out Id","description":"Record ID of the target entity, e.g. 'risk:xyz'"},"context":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Context","description":"Optional context fields for the edge (e.g. mitigation_strength)"}},"type":"object","required":["edge_type","in_id","out_id"],"title":"CreateRelationshipRequest"},"CreatedEventMapping":{"properties":{"index":{"type":"integer","title":"Index","description":"Original index in the request batch"},"event_id":{"type":"string","title":"Event Id","description":"Created event ID"},"type":{"type":"string","title":"Type","description":"Event type as stored in DB"}},"type":"object","required":["index","event_id","type"],"title":"CreatedEventMapping","description":"Mapping of a created event to its original batch index and type."},"CreditTopupCheckoutRequest":{"properties":{"success_url":{"type":"string","maxLength":2048,"minLength":1,"title":"Success Url"},"cancel_url":{"type":"string","maxLength":2048,"minLength":1,"title":"Cancel Url"}},"additionalProperties":false,"type":"object","required":["success_url","cancel_url"],"title":"CreditTopupCheckoutRequest","description":"Request to create a one-time AI Sidekick credit top-up checkout.\n\nBilling endpoint — extra fields are rejected per the bounded-payload\nrule in .claude/contexts/mcp-and-api-payloads.md."},"CreditTopupCheckoutResponse":{"properties":{"checkout_url":{"type":"string","title":"Checkout Url"},"session_id":{"type":"string","title":"Session Id"},"credits":{"type":"integer","title":"Credits"}},"type":"object","required":["checkout_url","session_id","credits"],"title":"CreditTopupCheckoutResponse","description":"One-time top-up checkout session response."},"CriticalVulnerabilityRequest":{"properties":{"scan_instance_id":{"type":"string","maxLength":200,"minLength":1,"title":"Scan Instance Id"}},"additionalProperties":false,"type":"object","required":["scan_instance_id"],"title":"CriticalVulnerabilityRequest","description":"Which completed scan to summarise critical/high findings for."},"CsfFunctionMovement":{"properties":{"code":{"type":"string","title":"Code"},"name":{"type":"string","title":"Name"},"achieved":{"type":"number","title":"Achieved","default":0.0},"max":{"type":"number","title":"Max","default":0.0},"percentage":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Percentage"},"delta":{"type":"number","title":"Delta","default":0.0},"controls":{"type":"integer","title":"Controls","default":0}},"type":"object","required":["code","name"],"title":"CsfFunctionMovement","description":"Score position and period movement for one NIST CSF function."},"CsfMovement":{"properties":{"functions":{"items":{"$ref":"#/components/schemas/CsfFunctionMovement"},"type":"array","title":"Functions"},"subcategories":{"items":{"$ref":"#/components/schemas/CsfSubcategoryMovement"},"type":"array","title":"Subcategories"},"unmapped_controls":{"type":"integer","title":"Unmapped Controls","default":0},"category_mapped_controls":{"type":"integer","title":"Category Mapped Controls","default":0},"confidence":{"$ref":"#/components/schemas/Confidence","default":"derived"}},"type":"object","title":"CsfMovement"},"CsfSubcategoryMovement":{"properties":{"code":{"type":"string","title":"Code"},"name":{"type":"string","title":"Name"},"achieved":{"type":"number","title":"Achieved","default":0.0},"max":{"type":"number","title":"Max","default":0.0},"percentage":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Percentage"},"delta":{"type":"number","title":"Delta","default":0.0},"controls":{"type":"integer","title":"Controls","default":0},"function":{"type":"string","title":"Function"}},"type":"object","required":["code","name","function"],"title":"CsfSubcategoryMovement","description":"The same figures at subcategory granularity, e.g. ``PR.AA-05``.\n\nThe function roll-up alone is close to useless for this vendor: nearly every Secure\nScore control is a protective configuration control, so a function chart renders as\none bar. The subcategory separates identity (``PR.AA``) from data (``PR.DS``) from\nplatform (``PR.PS``), which is the distinction a reader actually acts on."},"DerivedScoreResponse":{"properties":{"requirement_id":{"type":"string","title":"Requirement Id"},"score":{"$ref":"#/components/schemas/ScoreValue"},"compliance":{"$ref":"#/components/schemas/ComplianceStatus"},"confidence":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Confidence"},"basis":{"type":"string","title":"Basis"},"source_requirement_ids":{"items":{"type":"string"},"type":"array","title":"Source Requirement Ids"}},"type":"object","required":["requirement_id","score","compliance","confidence","basis"],"title":"DerivedScoreResponse"},"DetailedSubscriptionInfo":{"properties":{"subscription_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subscription Id"},"customer_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Customer Id"},"status":{"type":"string","title":"Status"},"is_active":{"type":"boolean","title":"Is Active"},"current_period_start":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Current Period Start"},"current_period_end":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Current Period End"},"next_invoice_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Next Invoice Date"},"plan_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan Name"},"plan_price":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Plan Price"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"},"billing_interval":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Interval"},"customer_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Customer Email"},"cancel_at_period_end":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Cancel At Period End"},"canceled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Canceled At"},"ended_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ended At"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"trial_start":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Trial Start"},"trial_end":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Trial End"}},"type":"object","required":["status","is_active"],"title":"DetailedSubscriptionInfo","description":"Comprehensive Stripe subscription information."},"DocumentSection":{"properties":{"title":{"type":"string","maxLength":300,"minLength":1,"title":"Title"},"body":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Body"},"shared":{"type":"boolean","title":"Shared","default":false},"category":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Category"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated By"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["title"],"title":"DocumentSection"},"DocumentSectionCreate":{"properties":{"title":{"type":"string","maxLength":300,"minLength":1,"title":"Title"},"body":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Body"},"shared":{"type":"boolean","title":"Shared","default":false},"category":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Category"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags"}},"type":"object","required":["title"],"title":"DocumentSectionCreate"},"DocumentSectionUpdate":{"properties":{"title":{"anyOf":[{"type":"string","maxLength":300,"minLength":1},{"type":"null"}],"title":"Title"},"body":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Body"},"shared":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Shared"},"category":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Category"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"}},"type":"object","title":"DocumentSectionUpdate"},"Effort":{"type":"string","enum":["low","medium","high","unknown"],"title":"Effort","description":"Normalised implementation cost / user impact.\n\n``UNKNOWN`` is a distinct value, not a synonym for \"cheap\": most of the catalogue\nreports ``Unknown``, and folding that into \"low\" would rank the unmeasured work\nabove genuinely easy wins."},"EffortRankedAction":{"properties":{"control_name":{"type":"string","title":"Control Name"},"title":{"type":"string","title":"Title"},"category":{"type":"string","title":"Category"},"score":{"type":"number","title":"Score"},"max":{"type":"number","title":"Max"},"score_impact":{"type":"number","title":"Score Impact"},"implementation_cost":{"$ref":"#/components/schemas/Effort","default":"unknown"},"user_impact":{"$ref":"#/components/schemas/Effort","default":"unknown"},"tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier"},"value":{"type":"number","title":"Value","default":0.0},"effort_unknown":{"type":"boolean","title":"Effort Unknown","default":true},"action_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Action Url"}},"type":"object","required":["control_name","title","category","score","max","score_impact"],"title":"EffortRankedAction","description":"An outstanding control ranked by value against the work it takes."},"EnableFrameworkRequest":{"properties":{"acknowledge_license":{"type":"boolean","title":"Acknowledge License","default":false},"scope":{"anyOf":[{"$ref":"#/components/schemas/FrameworkScopeConfig"},{"type":"null"}]}},"type":"object","title":"EnableFrameworkRequest","description":"Optional body for the enable endpoint. ``acknowledge_license`` must be\ntrue to enable a framework whose licence posture requires it. ``scope``\nnarrows a tiered framework to the relevant tier at enablement (P0-A)."},"EnabledFrameworkResponse":{"properties":{"created_at":{"type":"string","format":"date-time","title":"Created At","description":"Creation timestamp"},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"Last update timestamp"},"org_id":{"type":"string","title":"Org Id"},"project_id":{"type":"string","title":"Project Id"},"framework_id":{"type":"string","title":"Framework Id"},"enabled_at":{"type":"string","format":"date-time","title":"Enabled At"},"excluded_requirements":{"items":{"type":"string"},"type":"array","title":"Excluded Requirements"},"aggregation_strategy":{"type":"string","title":"Aggregation Strategy","default":"min"},"scope_config":{"anyOf":[{"$ref":"#/components/schemas/FrameworkScopeConfig"},{"type":"null"}]},"framework":{"anyOf":[{"$ref":"#/components/schemas/Framework"},{"type":"null"}]}},"type":"object","required":["org_id","project_id","framework_id"],"title":"EnabledFrameworkResponse"},"EntitlementGap":{"properties":{"entitlement":{"$ref":"#/components/schemas/PlanEntitlement"},"unconfigured_controls":{"items":{"type":"string"},"type":"array","title":"Unconfigured Controls"},"unconfigured_total":{"type":"integer","title":"Unconfigured Total","default":0},"configured_total":{"type":"integer","title":"Configured Total","default":0},"score_impact":{"type":"number","title":"Score Impact","default":0.0},"confidence":{"$ref":"#/components/schemas/Confidence","default":"derived"}},"type":"object","required":["entitlement"],"title":"EntitlementGap","description":"A capability the organisation pays for but has not finished configuring."},"EventCreate":{"properties":{"type":{"type":"string","minLength":1,"title":"Type","description":"Event type"},"data":{"type":"string","title":"Data","description":"Event data as string"},"scope_distance":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Scope Distance","description":"Scope distance for the event"},"parent_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent Id","description":"Parent event ID"},"scan_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scan Id","description":"Scan ID associated with this event"},"scan_instance_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scan Instance Id","description":"Scan instance ID associated with this event"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array","uniqueItems":true},{"type":"null"}],"title":"Tags","description":"Set of event tags"},"force_create_new":{"type":"boolean","title":"Force Create New","description":"If True, always create a new event. If False (default), reuse an existing matching event (by type and data) where one is found.","default":false},"discovery_context":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Discovery Context","description":"Discovery context information"},"discovery_path":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"string"},{"type":"null"}],"title":"Discovery Path","description":"Discovery path as list of strings"},"dns_children":{"anyOf":[{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object"},{"type":"string"},{"type":"null"}],"title":"Dns Children","description":"DNS children records"},"host":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Host","description":"Host information"},"module":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Module","description":"Module that generated the event"},"module_sequence":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Module Sequence","description":"Module sequence information"},"netloc":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Netloc","description":"Network location"},"organization_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organization Id","description":"Organization ID"},"original_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original Id","description":"Original event ID"},"parent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent","description":"Parent reference"},"parent_chain":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"string"},{"type":"null"}],"title":"Parent Chain","description":"Parent chain as list"},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Id","description":"Project ID"},"resolved_hosts":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"string"},{"type":"null"}],"title":"Resolved Hosts","description":"List of resolved hosts"},"scope_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scope Description","description":"Scope description"},"web_spider_distance":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Web Spider Distance","description":"Web spider distance"},"uuid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Uuid","description":"Universally unique identifier"},"event_uuid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event Uuid","description":"Event UUID from the scan engine"},"parent_uuid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent Uuid","description":"Parent event UUID"},"confidence":{"anyOf":[{"type":"integer","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Confidence","description":"Confidence level (1-100)"},"timestamp":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Timestamp","description":"Original scan event timestamp"},"port":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Port","description":"Port number if applicable"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source","description":"Event source/origin"},"severity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Severity","description":"Event severity level"},"original_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original Type","description":"Original event type before promotion (e.g. OPEN_TCP_PORT promoted to VULNERABILITY)"},"classification":{"anyOf":[{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"number"}]},"type":"object"},{"type":"null"}],"title":"Classification","description":"Event classification metadata"},"internal_tags":{"anyOf":[{"items":{"type":"string"},"type":"array","uniqueItems":true},{"type":"null"}],"title":"Internal Tags","description":"Internal processing tags"},"enrichment_data":{"anyOf":[{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"number"},{"items":{},"type":"array"}]},"type":"object"},{"type":"null"}],"title":"Enrichment Data","description":"Additional enrichment information"},"raw_data":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Raw Data","description":"Complete raw event JSON from scanning tool (OCSF raw_data)"},"severity_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Severity Id","description":"OCSF normalized severity (0-6, 99)"},"confidence_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Confidence Id","description":"OCSF normalized confidence (0-3, 99)"},"activity_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Activity Id","description":"OCSF activity identifier"},"class_uid":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Class Uid","description":"OCSF class UID (6007=scan_activity, 2004=detection_finding)"},"category_uid":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Category Uid","description":"OCSF category UID"},"type_uid":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Type Uid","description":"OCSF type UID (class_uid * 100 + activity_id)"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"Human-readable event description (OCSF message)"},"status_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Status Id","description":"OCSF status (1=Success, 2=Failure)"},"observables":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Observables","description":"OCSF observable entities"},"unmapped":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Unmapped","description":"OCSF unmapped attributes from source"},"evidence_s3_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Evidence S3 Key","description":"s3:// ref of the uploaded screenshot"},"evidence_filename":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Evidence Filename","description":"Original screenshot filename"},"evidence_blob_sha256":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Evidence Blob Sha256","description":"Screenshot SHA-256, if computed"},"evidence_blob_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Evidence Blob Size","description":"Screenshot size in bytes, if computed"}},"type":"object","required":["type","data"],"title":"EventCreate","description":"Model for creating a new event."},"EventInfo":{"properties":{"type":{"type":"string","minLength":1,"title":"Type","description":"Event type"},"data":{"type":"string","title":"Data","description":"Event data as string"},"scope_distance":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Scope Distance","description":"Scope distance for the event"},"parent_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent Id","description":"Parent event ID"},"scan_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scan Id","description":"Scan ID associated with this event"},"scan_instance_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scan Instance Id","description":"Scan instance ID associated with this event"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array","uniqueItems":true},{"type":"null"}],"title":"Tags","description":"Set of event tags"},"created":{"type":"string","format":"date-time","title":"Created","description":"Creation timestamp"},"updated":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated","description":"Last update timestamp"},"discovered_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Discovered At","description":"Last time this event was rediscovered/seen"},"discovery_context":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Discovery Context","description":"Discovery context information"},"discovery_path":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"string"},{"type":"null"}],"title":"Discovery Path","description":"Discovery path as list of strings"},"dns_children":{"anyOf":[{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object"},{"type":"string"},{"type":"null"}],"title":"Dns Children","description":"DNS children records"},"host":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Host","description":"Host information"},"module":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Module","description":"Module that generated the event"},"module_sequence":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Module Sequence","description":"Module sequence information"},"netloc":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Netloc","description":"Network location"},"organization_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organization Id","description":"Organization ID"},"original_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original Id","description":"Original event ID"},"parent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent","description":"Parent reference"},"parent_chain":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"string"},{"type":"null"}],"title":"Parent Chain","description":"Parent chain as list"},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Id","description":"Project ID"},"resolved_hosts":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"string"},{"type":"null"}],"title":"Resolved Hosts","description":"List of resolved hosts"},"scope_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scope Description","description":"Scope description"},"web_spider_distance":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Web Spider Distance","description":"Web spider distance"},"uuid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Uuid","description":"Universally unique identifier"},"event_uuid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event Uuid","description":"Event UUID from the scan engine"},"parent_uuid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent Uuid","description":"Parent event UUID"},"confidence":{"anyOf":[{"type":"integer","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Confidence","description":"Confidence level (1-100)"},"timestamp":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Timestamp","description":"Original scan event timestamp"},"port":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Port","description":"Port number if applicable"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source","description":"Event source/origin"},"severity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Severity","description":"Event severity level"},"original_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original Type","description":"Original event type before promotion (e.g. OPEN_TCP_PORT promoted to VULNERABILITY)"},"classification":{"anyOf":[{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"number"}]},"type":"object"},{"type":"null"}],"title":"Classification","description":"Event classification metadata"},"internal_tags":{"anyOf":[{"items":{"type":"string"},"type":"array","uniqueItems":true},{"type":"null"}],"title":"Internal Tags","description":"Internal processing tags"},"enrichment_data":{"anyOf":[{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"number"},{"items":{},"type":"array"}]},"type":"object"},{"type":"null"}],"title":"Enrichment Data","description":"Additional enrichment information"},"raw_data":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Raw Data","description":"Complete raw event JSON from scanning tool (OCSF raw_data)"},"severity_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Severity Id","description":"OCSF normalized severity: 0=Unknown,1=Info,2=Low,3=Medium,4=High,5=Critical,6=Fatal,99=Other"},"confidence_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Confidence Id","description":"OCSF normalized confidence: 0=Unknown,1=Low,2=Medium,3=High,99=Other"},"activity_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Activity Id","description":"OCSF activity: 1=Started,2=Completed,3=Cancelled,6=Error"},"class_uid":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Class Uid","description":"OCSF class UID: 6007=scan_activity, 2004=detection_finding"},"category_uid":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Category Uid","description":"OCSF category UID: 6=Application Activity, 2=Findings"},"type_uid":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Type Uid","description":"OCSF type UID (class_uid * 100 + activity_id)"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"Human-readable event description (OCSF message)"},"status_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Status Id","description":"OCSF status: 0=Unknown,1=Success,2=Failure,99=Other"},"observables":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Observables","description":"OCSF observable entities extracted from event"},"unmapped":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Unmapped","description":"OCSF unmapped attributes from source tool"},"id":{"type":"string","title":"Id"},"vulnerability_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vulnerability Id","description":"ID of the vulnerability this event is marked as, if any"},"finding_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Finding Id","description":"ID of the finding associated with this event, if any"},"is_new_in_run":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is New In Run","description":"Only populated when the response is scoped to a single scan_instance: True if this event was first discovered during that run, False if it was already known from an earlier run. Computed read-time from event.created >= scan_instance.started_at."}},"type":"object","required":["type","data","id"],"title":"EventInfo","description":"Complete event information model."},"EventUpdate":{"properties":{"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"},"data":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Data"},"scope_distance":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Scope Distance"},"parent_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent Id"},"scan_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scan Id"},"scan_instance_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scan Instance Id"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array","uniqueItems":true},{"type":"null"}],"title":"Tags"},"updated":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated","description":"Last update timestamp"},"discovery_context":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Discovery Context"},"discovery_path":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"string"},{"type":"null"}],"title":"Discovery Path"},"dns_children":{"anyOf":[{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object"},{"type":"string"},{"type":"null"}],"title":"Dns Children"},"host":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Host"},"module":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Module"},"module_sequence":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Module Sequence"},"netloc":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Netloc"},"organization_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organization Id"},"original_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original Id"},"parent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent"},"parent_chain":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"string"},{"type":"null"}],"title":"Parent Chain"},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Id"},"resolved_hosts":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"string"},{"type":"null"}],"title":"Resolved Hosts"},"scope_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scope Description"},"web_spider_distance":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Web Spider Distance"},"uuid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Uuid"},"event_uuid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event Uuid"},"parent_uuid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent Uuid"},"confidence":{"anyOf":[{"type":"integer","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Confidence"},"timestamp":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Timestamp"},"port":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Port"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"severity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Severity"},"classification":{"anyOf":[{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"number"}]},"type":"object"},{"type":"null"}],"title":"Classification"},"internal_tags":{"anyOf":[{"items":{"type":"string"},"type":"array","uniqueItems":true},{"type":"null"}],"title":"Internal Tags"},"enrichment_data":{"anyOf":[{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"number"},{"items":{},"type":"array"}]},"type":"object"},{"type":"null"}],"title":"Enrichment Data"},"raw_data":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Raw Data"},"severity_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Severity Id"},"confidence_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Confidence Id"},"activity_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Activity Id"},"class_uid":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Class Uid"},"category_uid":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Category Uid"},"type_uid":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Type Uid"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"status_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Status Id"},"observables":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Observables"},"unmapped":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Unmapped"}},"type":"object","title":"EventUpdate","description":"Model for updating an existing event."},"Evidence":{"properties":{"created_at":{"type":"string","format":"date-time","title":"Created At","description":"Creation timestamp"},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"Last update timestamp"},"id":{"type":"string","title":"Id"},"org_id":{"type":"string","title":"Org Id"},"project_id":{"type":"string","title":"Project Id"},"evidence_type":{"$ref":"#/components/schemas/EvidenceType"},"source":{"$ref":"#/components/schemas/EvidenceSource"},"label":{"type":"string","maxLength":256,"minLength":1,"title":"Label"},"description":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Description"},"blob_ref":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Blob Ref"},"blob_sha256":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Blob Sha256"},"blob_size_bytes":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Blob Size Bytes"},"original_filename":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Original Filename"},"captured_at":{"type":"string","format":"date-time","title":"Captured At"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"captured_by":{"type":"string","maxLength":128,"minLength":1,"title":"Captured By"},"connector_id":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Connector Id"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags"}},"type":"object","required":["id","org_id","project_id","evidence_type","source","label","captured_at","captured_by"],"title":"Evidence"},"EvidenceCreate":{"properties":{"evidence_type":{"$ref":"#/components/schemas/EvidenceType"},"source":{"$ref":"#/components/schemas/EvidenceSource"},"label":{"type":"string","maxLength":256,"minLength":1,"title":"Label"},"description":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Description"},"blob_ref":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Blob Ref"},"blob_sha256":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Blob Sha256"},"blob_size_bytes":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Blob Size Bytes"},"original_filename":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Original Filename"},"captured_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Captured At"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"connector_id":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Connector Id"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags"}},"type":"object","required":["evidence_type","source","label"],"title":"EvidenceCreate"},"EvidenceDownloadUrlResponse":{"properties":{"download_url":{"type":"string","title":"Download Url"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"}},"type":"object","required":["download_url","expires_at"],"title":"EvidenceDownloadUrlResponse"},"EvidenceLink":{"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"requirement_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Requirement Id"},"assessment_score_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assessment Score Id"},"target_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Id"},"link_kind":{"$ref":"#/components/schemas/EvidenceLinkKind"},"confidence":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Confidence","default":1.0},"linked_by":{"type":"string","maxLength":128,"minLength":1,"title":"Linked By"},"linked_at":{"type":"string","format":"date-time","title":"Linked At"},"notes":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Notes"}},"type":"object","required":["link_kind","linked_by","linked_at"],"title":"EvidenceLink","description":"A row in the `evidence_link` RELATION (IN evidence OUT\nrequirement_ref|assessment_score). The matching target id is stored on\nthe row for cheap index lookups and reverse traversal."},"EvidenceLinkCreate":{"properties":{"confidence":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Confidence","default":1.0},"notes":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Notes"}},"type":"object","title":"EvidenceLinkCreate","description":"Body for `POST .../evidence/{id}/links/...`. The link target is in\nthe URL; this body carries only confidence + notes."},"EvidenceLinkKind":{"type":"string","enum":["requirement","assessment_score","finding"],"title":"EvidenceLinkKind","description":"What a piece of evidence is linked to — a compliance requirement, an\nassessment score, or a finding (generic per-finding evidence)."},"EvidenceSource":{"type":"string","enum":["manual","scanner","cloud-connector"],"title":"EvidenceSource","description":"Where the evidence came from."},"EvidenceType":{"type":"string","enum":["screenshot","config-export","log-snippet","policy-doc","attestation","other"],"title":"EvidenceType"},"EvidenceUpdate":{"properties":{"label":{"anyOf":[{"type":"string","maxLength":256,"minLength":1},{"type":"null"}],"title":"Label"},"description":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Description"},"blob_ref":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Blob Ref"},"blob_sha256":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Blob Sha256"},"blob_size_bytes":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Blob Size Bytes"},"original_filename":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Original Filename"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"}},"type":"object","title":"EvidenceUpdate","description":"Partial update. Every field is optional; absent fields are preserved.\n`evidence_type` and `source` are intentionally not updatable — changing\nthem would obscure the audit trail; delete + re-create instead."},"EvidenceUploadUrlRequest":{"properties":{"content_type":{"type":"string","maxLength":128,"minLength":1,"title":"Content Type"},"size_bytes":{"type":"integer","maximum":26214400.0,"exclusiveMinimum":0.0,"title":"Size Bytes"}},"type":"object","required":["content_type","size_bytes"],"title":"EvidenceUploadUrlRequest"},"EvidenceUploadUrlResponse":{"properties":{"upload_url":{"type":"string","title":"Upload Url"},"fields":{"additionalProperties":{"type":"string"},"type":"object","title":"Fields"},"blob_ref":{"type":"string","title":"Blob Ref"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"}},"type":"object","required":["upload_url","blob_ref","expires_at"],"title":"EvidenceUploadUrlResponse"},"FindingCreate":{"properties":{"name":{"type":"string","title":"Name","description":"Finding name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Finding description"},"status":{"anyOf":[{"type":"string","enum":["open","in_progress","suppressed","resolved","accepted","false_positive","archived"]},{"type":"null"}],"title":"Status","description":"Finding status"},"severity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Severity","description":"Finding severity"},"priority":{"anyOf":[{"type":"string","enum":["p1","p2","p3","p4"]},{"type":"null"}],"title":"Priority","description":"Finding priority"},"source":{"anyOf":[{"type":"string","enum":["scanner","manual","threat_intel"]},{"type":"null"}],"title":"Source","description":"Finding source"},"evidence":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Evidence","description":"Flexible JSON for scan results"},"remediation":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Remediation","description":"Tracking remediation details"},"risk_score":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Risk Score","description":"Risk score (0-100)"},"confidence":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Confidence","description":"Confidence score (0-100)"},"discovered_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Discovered At","description":"Discovery timestamp"},"resolved_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Resolved At","description":"Resolution timestamp"},"event_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event Id","description":"Event ID from source system"},"event_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event Type","description":"Event type (VULNERABILITY, TECHNOLOGY, FINDING)"},"source_tool":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Tool","description":"Source scanning tool identifier"},"source_host":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Host","description":"Host where finding was discovered"},"scan_instance_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scan Instance Id","description":"Associated scan instance ID"},"asset_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asset Id","description":"ID of the asset this finding affects"},"vulnerability_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vulnerability Id","description":"ID of the associated vulnerability"},"vulnerability_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vulnerability Name","description":"Name of the associated vulnerability"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags","description":"Tags associated with the finding"},"assignee_email":{"anyOf":[{"type":"string","maxLength":256},{"type":"null"}],"title":"Assignee Email","description":"Email of the assignee (org member)."},"duplicate_of_finding_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Duplicate Of Finding Id","description":"ID of the canonical finding this one duplicates."},"triage_reason":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Triage Reason","description":"Justification recorded with the initial status (if it is a triage status)."},"suppress_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Suppress Until","description":"Optional expiry for a time-bound suppression (see FindingBase)."},"last_seen_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Seen At","description":"Most recent scanner re-confirmation timestamp (see FindingBase)."}},"type":"object","required":["name"],"title":"FindingCreate","description":"Model for creating a new finding that links an asset to a vulnerability.\n\nBoth `asset_id` and `vulnerability_id` are required."},"FindingReportRequest":{"properties":{"status":{"anyOf":[{"type":"string","enum":["new","open","in_progress","suppressed","resolved","accepted","false_positive","archived"]},{"type":"null"}],"title":"Status"},"statuses":{"anyOf":[{"items":{"type":"string","enum":["new","open","in_progress","suppressed","resolved","accepted","false_positive","archived"]},"type":"array"},{"type":"null"}],"title":"Statuses"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"severity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Severity"},"priority":{"anyOf":[{"type":"string","enum":["p1","p2","p3","p4"]},{"type":"null"}],"title":"Priority"},"source":{"anyOf":[{"type":"string","enum":["scanner","manual","threat_intel"]},{"type":"null"}],"title":"Source"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"asset_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asset Id"},"vulnerability_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vulnerability Id"},"scan_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scan Id"},"assignee_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assignee Email"},"risk_score_min":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Risk Score Min"},"risk_score_max":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Risk Score Max"},"exposure_min":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Exposure Min"},"discovered_after":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Discovered After"},"discovered_before":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Discovered Before"}},"type":"object","title":"FindingReportRequest","description":"CSV-only finding report. Filters mirror the list endpoint at\nGET /finding/?... — if a filter exists there, it should exist here too,\notherwise the export silently disagrees with the on-screen filtered list\n(notably `assignee_email` and `scan_id`)."},"FindingUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"Finding name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Finding description"},"status":{"anyOf":[{"type":"string","enum":["open","in_progress","suppressed","resolved","accepted","false_positive","archived"]},{"type":"null"}],"title":"Status","description":"Finding status"},"severity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Severity","description":"Finding severity"},"priority":{"anyOf":[{"type":"string","enum":["p1","p2","p3","p4"]},{"type":"null"}],"title":"Priority","description":"Finding priority"},"source":{"anyOf":[{"type":"string","enum":["scanner","manual","threat_intel"]},{"type":"null"}],"title":"Source","description":"Finding source"},"evidence":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Evidence","description":"Flexible JSON for scan results"},"remediation":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Remediation","description":"Tracking remediation details"},"reproduction_steps":{"anyOf":[{"type":"string","maxLength":20000},{"type":"null"}],"title":"Reproduction Steps","description":"How to reproduce the finding"},"impact":{"anyOf":[{"type":"string","maxLength":20000},{"type":"null"}],"title":"Impact","description":"Narrative business/security impact"},"risk_score":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Risk Score","description":"Risk score (0-100)"},"confidence":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Confidence","description":"Confidence score (0-100)"},"verdict":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Verdict","description":"Verdict: false_positive, true_positive, suspicious"},"risk_level":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Risk Level","description":"Risk level: info, low, medium, high, critical"},"impact_score":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Impact Score","description":"Impact score (0-100)"},"discovered_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Discovered At","description":"Discovery timestamp"},"resolved_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Resolved At","description":"Resolution timestamp"},"event_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event Id","description":"Event ID from source system"},"event_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event Type","description":"Event type (VULNERABILITY, TECHNOLOGY, FINDING)"},"source_tool":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Tool","description":"Source scanning tool identifier"},"source_host":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Host","description":"Host where finding was discovered"},"scan_instance_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scan Instance Id","description":"Associated scan instance ID"},"vulnerability_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vulnerability Name","description":"Name of the associated vulnerability"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags","description":"Tags associated with the finding"},"assignee_email":{"anyOf":[{"type":"string","maxLength":256},{"type":"null"}],"title":"Assignee Email","description":"Email of the assignee (org member)."},"duplicate_of_finding_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Duplicate Of Finding Id","description":"Set this together with status='suppressed' + triage_reason='duplicate of <id>' in one request to mark a finding as a duplicate; all three are required together."},"triage_reason":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Triage Reason","description":"Required when moving to accepted/false_positive/suppressed, or when re-opening a finding from a terminal status."},"suppress_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Suppress Until","description":"Optional expiry for a time-bound suppression. Send an explicit null to clear an existing expiry. It is also cleared automatically whenever the effective status is not suppressed or accepted, since only those resurface."},"last_seen_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Seen At","description":"Most recent scanner re-confirmation timestamp (see FindingBase)."}},"type":"object","title":"FindingUpdate","description":"Model for updating an existing finding.\n\nNote: the linked asset and vulnerability cannot be changed after creation."},"FindingsReportRequest":{"properties":{"severities":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":8},{"type":"null"}],"title":"Severities","description":"Severity filter — only applied when exactly one value is given (single-severity)."},"limit":{"anyOf":[{"type":"integer","maximum":100.0,"minimum":1.0},{"type":"null"}],"title":"Limit","description":"Max findings in the report (capped at 100)."}},"type":"object","title":"FindingsReportRequest"},"FindingsReportResponse":{"properties":{"org_id":{"type":"string","title":"Org Id"},"org_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Org Name"},"project_id":{"type":"string","title":"Project Id"},"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Name"},"generated_at":{"type":"string","format":"date-time","title":"Generated At"},"generated_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Generated By"},"summary":{"$ref":"#/components/schemas/FindingsReportSummary"},"findings":{"items":{"$ref":"#/components/schemas/ReportFindingDetail"},"type":"array","title":"Findings"},"findings_truncated":{"type":"boolean","title":"Findings Truncated","default":false},"identity_exposures":{"items":{"$ref":"#/components/schemas/ReportIdentityExposure"},"type":"array","title":"Identity Exposures"},"posture":{"items":{"$ref":"#/components/schemas/ReportPostureItem"},"type":"array","title":"Posture"}},"type":"object","required":["org_id","project_id","generated_at"],"title":"FindingsReportResponse"},"FindingsReportSummary":{"properties":{"total":{"type":"integer","title":"Total","default":0},"by_severity":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Severity"},"by_exposure_band":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Exposure Band"},"kev_count":{"type":"integer","title":"Kev Count","default":0},"kev_ransomware_count":{"type":"integer","title":"Kev Ransomware Count","default":0},"epss_distribution":{"additionalProperties":{"type":"integer"},"type":"object","title":"Epss Distribution"},"observation_count":{"type":"integer","title":"Observation Count","default":0}},"type":"object","title":"FindingsReportSummary"},"Framework":{"properties":{"id":{"type":"string","title":"Id"},"framework_id":{"type":"string","title":"Framework Id"},"version":{"type":"string","title":"Version"},"name":{"type":"string","title":"Name"},"category":{"type":"string","title":"Category"},"scoring":{"$ref":"#/components/schemas/FrameworkScoring"},"owner_org_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner Org Id"},"licensing":{"anyOf":[{"$ref":"#/components/schemas/FrameworkLicensing"},{"type":"null"}]}},"additionalProperties":true,"type":"object","required":["id","framework_id","version","name","category"],"title":"Framework"},"FrameworkLicensing":{"properties":{"posture":{"$ref":"#/components/schemas/LicensePosture"},"source_license":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source License"},"source_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Url"},"attribution":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Attribution"},"content_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content Mode"},"tenant_responsibility":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tenant Responsibility"},"redistributable":{"type":"boolean","title":"Redistributable","default":false}},"type":"object","required":["posture"],"title":"FrameworkLicensing","description":"Licence posture and attribution metadata for a framework seed."},"FrameworkScopeConfig":{"properties":{"hisf_org_type":{"anyOf":[{"type":"string","enum":["hospitals","microsmall","mlhsp","suppliers"]},{"type":"null"}],"title":"Hisf Org Type"},"target_cmm":{"anyOf":[{"type":"integer","maximum":4.0,"minimum":1.0},{"type":"null"}],"title":"Target Cmm"}},"type":"object","title":"FrameworkScopeConfig","description":"Quiz-derived scope selection for a tiered framework (P0-A).\n\nDrives `EnabledFramework.excluded_requirements` at enablement so a tenant\nonly assesses the relevant tier rather than every variant at once:\n- `hisf_org_type` — NZ HISF audience (Hospitals / Micro-Small / Medium-Large\n  / Suppliers); excludes controls whose `applies_to` is a different audience.\n- `target_cmm` — NCSC MCSS target maturity (1–4); excludes controls whose\n  `cmm_level` exceeds the target.\nBoth optional + bounded; round-trips on the `enabled_framework` row so the\nselection is editable later."},"FrameworkScoring":{"properties":{"scale":{"type":"string","title":"Scale","default":"score_0_2"},"values":{"items":{"type":"string"},"type":"array","title":"Values"},"tier_to_cmm":{"additionalProperties":{"type":"integer"},"type":"object","title":"Tier To Cmm"},"kind":{"type":"string","enum":["flat","maturity"],"title":"Kind","default":"flat"},"level_names":{"additionalProperties":{"type":"string"},"type":"object","title":"Level Names"},"value_names":{"additionalProperties":{"type":"string"},"type":"object","title":"Value Names"}},"type":"object","title":"FrameworkScoring"},"FrameworkSeedFile":{"properties":{"framework_id":{"type":"string","title":"Framework Id"},"version":{"type":"string","title":"Version"},"name":{"type":"string","title":"Name"},"category":{"type":"string","title":"Category","default":"framework"},"scoring":{"$ref":"#/components/schemas/FrameworkScoring"},"licensing":{"anyOf":[{"$ref":"#/components/schemas/FrameworkLicensing"},{"type":"null"}]},"requirements":{"items":{"$ref":"#/components/schemas/FrameworkSeedRequirement"},"type":"array","title":"Requirements"}},"additionalProperties":true,"type":"object","required":["framework_id","version","name"],"title":"FrameworkSeedFile"},"FrameworkSeedRequirement":{"properties":{"code":{"type":"string","title":"Code"},"kind":{"$ref":"#/components/schemas/RequirementKind"},"title":{"type":"string","title":"Title"},"parent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent"},"csf_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Csf Ref"}},"additionalProperties":true,"type":"object","required":["code","kind","title"],"title":"FrameworkSeedRequirement"},"GapResponse":{"properties":{"requirement_id":{"type":"string","title":"Requirement Id"},"code":{"type":"string","title":"Code"},"title":{"type":"string","title":"Title"},"compliance":{"$ref":"#/components/schemas/ComplianceStatus"},"score":{"$ref":"#/components/schemas/ScoreValue"}},"type":"object","required":["requirement_id","code","title","compliance","score"],"title":"GapResponse"},"GenericEntityCreate":{"properties":{"entity_type":{"type":"string","maxLength":50,"title":"Entity Type","description":"Type of entity (e.g., 'risk', 'control')"},"name":{"type":"string","maxLength":500,"title":"Name","description":"Entity name"},"description":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}],"title":"Description","description":"Entity description"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","description":"Tags for categorization"},"data":{"additionalProperties":true,"type":"object","title":"Data","description":"Entity-specific fields as flexible dictionary"}},"additionalProperties":true,"type":"object","required":["entity_type","name"],"title":"GenericEntityCreate","description":"Model for creating a new generic entity.\n\nThis model is used for POST requests to create entities. It includes\nall fields that can be specified during creation."},"GenericEntityInfo":{"properties":{"id":{"type":"string","title":"Id"},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"Creation timestamp"},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"Last update timestamp"},"name":{"type":"string","title":"Name","description":"Entity name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Entity description"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","description":"Tags for categorization"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata","description":"Flexible metadata for entity-specific fields"},"entity_type":{"type":"string","title":"Entity Type","description":"Type of entity"},"data":{"additionalProperties":true,"type":"object","title":"Data","description":"Entity-specific fields"}},"additionalProperties":true,"type":"object","required":["id","name","entity_type"],"title":"GenericEntityInfo","description":"Model for generic entity information with full metadata.\n\nThis includes all base fields plus entity-specific data."},"GenericEntityListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/GenericEntityInfo"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total","description":"Total number of entities","default":0},"page":{"type":"integer","title":"Page","description":"Current page number","default":1},"limit":{"type":"integer","title":"Limit","description":"Items per page","default":20},"has_next":{"type":"boolean","title":"Has Next","description":"Whether there are more pages","default":false},"has_prev":{"type":"boolean","title":"Has Prev","description":"Whether there are previous pages","default":false}},"type":"object","title":"GenericEntityListResponse","description":"Response model for listing generic entities."},"GenericEntityReportRequest":{"properties":{"format":{"type":"string","enum":["csv","pdf"],"title":"Format","description":"Report format: csv or pdf"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"Filter by entity name"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags","description":"Filter by tags"},"order_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Order By","description":"Order by field (optional)"},"order_direction":{"anyOf":[{"type":"string","enum":["asc","desc"]},{"type":"null"}],"title":"Order Direction","description":"Order direction","default":"desc"}},"type":"object","required":["format"],"title":"GenericEntityReportRequest","description":"Request model for generic entity report generation."},"GenericEntityUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Name","description":"Entity name"},"description":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}],"title":"Description","description":"Entity description"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags","description":"Tags for categorization"},"data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Data","description":"Entity-specific fields to update"}},"additionalProperties":true,"type":"object","title":"GenericEntityUpdate","description":"Model for updating an existing generic entity.\n\nAll fields are optional to support partial updates."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ImportFrameworkRequest":{"properties":{"seed":{"$ref":"#/components/schemas/FrameworkSeedFile"},"acknowledge_license":{"type":"boolean","title":"Acknowledge License","default":false}},"type":"object","required":["seed"],"title":"ImportFrameworkRequest","description":"Body for the custom-framework import endpoint. The licence\nacknowledgment travels in the body (not the query string) to match the\nenable endpoint and to keep it out of access logs."},"LicenceSku":{"properties":{"sku_id":{"type":"string","title":"Sku Id"},"part_number":{"type":"string","title":"Part Number"},"display_name":{"type":"string","title":"Display Name"},"applies_to":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Applies To"},"capability_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Capability Status"},"total":{"type":"integer","title":"Total","default":0},"assigned":{"type":"integer","title":"Assigned","default":0},"available":{"type":"integer","title":"Available","default":0},"suspended":{"type":"integer","title":"Suspended","default":0},"warning":{"type":"integer","title":"Warning","default":0},"locked_out":{"type":"integer","title":"Locked Out","default":0},"utilisation":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Utilisation"},"over_assigned":{"type":"integer","title":"Over Assigned","default":0},"at_capacity":{"type":"boolean","title":"At Capacity","default":false},"under_allocated":{"type":"boolean","title":"Under Allocated","default":false},"expiring":{"type":"boolean","title":"Expiring","default":false},"seat_managed":{"type":"boolean","title":"Seat Managed","default":true}},"type":"object","required":["sku_id","part_number","display_name"],"title":"LicenceSku","description":"One purchased subscription and how much of it is assigned."},"LicenceSummaryResponse":{"properties":{"skus":{"items":{"$ref":"#/components/schemas/LicenceSku"},"type":"array","title":"Skus"},"totals":{"$ref":"#/components/schemas/LicenceTotals"},"wasted":{"items":{"$ref":"#/components/schemas/WastedAllocation"},"type":"array","title":"Wasted"},"wasted_total":{"type":"integer","title":"Wasted Total","default":0},"wasted_by_reason":{"additionalProperties":{"type":"integer"},"type":"object","title":"Wasted By Reason"},"inactive_days":{"type":"integer","title":"Inactive Days","default":90},"sign_in_activity_available":{"type":"boolean","title":"Sign In Activity Available","default":true},"collected_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Collected At"}},"type":"object","title":"LicenceSummaryResponse","description":"Everything the Licences tab renders."},"LicenceTotals":{"properties":{"total":{"type":"integer","title":"Total","default":0},"assigned":{"type":"integer","title":"Assigned","default":0},"available":{"type":"integer","title":"Available","default":0},"sku_count":{"type":"integer","title":"Sku Count","default":0},"over_allocated_count":{"type":"integer","title":"Over Allocated Count","default":0},"under_allocated_count":{"type":"integer","title":"Under Allocated Count","default":0},"at_capacity_count":{"type":"integer","title":"At Capacity Count","default":0},"expiring_count":{"type":"integer","title":"Expiring Count","default":0}},"type":"object","title":"LicenceTotals","description":"Seat totals across the per-seat SKUs only."},"LicensePosture":{"type":"string","enum":["public-domain","government-open","open-redistributable","open-no-derivatives","proprietary-third-party"],"title":"LicensePosture","description":"Licence posture of the standard a framework seed is derived from.\n\nDrives the catalog badge and whether enabling/importing the framework\nrequires an explicit tenant licence acknowledgment."},"MCPInitializeRequest":{"properties":{"client_name":{"type":"string","minLength":1,"title":"Client Name"},"client_version":{"type":"string","minLength":1,"title":"Client Version"}},"type":"object","required":["client_name","client_version"],"title":"MCPInitializeRequest"},"MCPInitializeResponse":{"properties":{"session_id":{"type":"string","title":"Session Id"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"context":{"additionalProperties":{"type":"string"},"type":"object","title":"Context"},"server":{"additionalProperties":{"type":"string"},"type":"object","title":"Server"}},"type":"object","required":["session_id","expires_at","context","server"],"title":"MCPInitializeResponse"},"MCPRiskLevel":{"type":"string","enum":["safe","destructive"],"title":"MCPRiskLevel"},"MCPToolCallRequest":{"properties":{"name":{"type":"string","minLength":1,"title":"Name"},"arguments":{"additionalProperties":true,"type":"object","title":"Arguments"},"destructive_authorized":{"type":"boolean","title":"Destructive Authorized","default":false},"approval_request_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Approval Request Id"},"approval_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Approval Token"}},"type":"object","required":["name"],"title":"MCPToolCallRequest"},"MCPToolCallResponse":{"properties":{"status":{"type":"string","title":"Status"},"tool":{"type":"string","title":"Tool"},"result":{"additionalProperties":true,"type":"object","title":"Result"}},"type":"object","required":["status","tool","result"],"title":"MCPToolCallResponse"},"MCPToolSpec":{"properties":{"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"risk_level":{"$ref":"#/components/schemas/MCPRiskLevel"},"destructive":{"type":"boolean","title":"Destructive"},"input_schema":{"additionalProperties":true,"type":"object","title":"Input Schema"},"annotations":{"additionalProperties":{"type":"boolean"},"type":"object","title":"Annotations","description":"MCP tool annotations. ``readOnlyHint`` marks a pure read (no state\nchange) — required by the Microsoft 365 Copilot federated-connector\nprogramme and a general MCP safety signal. Derived from the canonical\nwrite set (``_WRITE_TOOLS``) so it can never drift from the role gate.","readOnly":true}},"type":"object","required":["name","description","risk_level","destructive","input_schema","annotations"],"title":"MCPToolSpec"},"MCPToolsResponse":{"properties":{"tools":{"items":{"$ref":"#/components/schemas/MCPToolSpec"},"type":"array","title":"Tools"}},"type":"object","required":["tools"],"title":"MCPToolsResponse"},"ManualConfigRequest":{"properties":{"auth_method":{"type":"string","maxLength":20,"title":"Auth Method","default":"manual"},"config":{"additionalProperties":{"type":"string","maxLength":8000},"type":"object","maxProperties":40,"title":"Config"}},"type":"object","title":"ManualConfigRequest","description":"Manual credentials for a connector (BYO app / API keys)."},"MarkAsVulnerabilityFindingRequest":{"properties":{"event_id":{"type":"string","title":"Event Id","description":"Event ID to convert"},"asset_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asset Id","description":"Optional asset ID to link. If not provided, will try to create or find existing asset from event"},"force_create_new":{"type":"boolean","title":"Force Create New","description":"If True, always create new findings/vulnerabilities. If False (default), reuse an existing match where one is found.","default":false}},"type":"object","required":["event_id"],"title":"MarkAsVulnerabilityFindingRequest","description":"Request model for marking event as vulnerability and finding."},"MarkEventsByTypeRequest":{"properties":{"event_types":{"items":{"type":"string"},"type":"array","title":"Event Types","description":"List of event types to mark as vulnerabilities","examples":["FINDING","TECHNOLOGY","VULNERABILITY"]}},"type":"object","required":["event_types"],"title":"MarkEventsByTypeRequest","description":"Request model for marking events as vulnerabilities by type."},"MaturityLevelUpsert":{"properties":{"level":{"type":"integer","maximum":10.0,"minimum":1.0,"title":"Level"},"reason":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Reason"},"evidence_refs":{"items":{"type":"string"},"type":"array","title":"Evidence Refs"}},"type":"object","required":["level"],"title":"MaturityLevelUpsert","description":"Set a CS-CMM maturity scale to a single achieved level.\n\nThe server cascades the choice across the maturity scale's tiers (at/below the level\nbecome `validated`; above become `gap`) and derives each tier's score /\ncompliance. `evidence_refs` and `reason` attach to the selected tier."},"MaturityResponse":{"properties":{"framework_id":{"type":"string","title":"Framework Id"},"overall_cmm":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Overall Cmm"},"by_category":{"additionalProperties":{"type":"number"},"type":"object","title":"By Category"},"by_category_claimed":{"additionalProperties":{"type":"number"},"type":"object","title":"By Category Claimed"},"by_category_target":{"additionalProperties":{"type":"number"},"type":"object","title":"By Category Target"}},"type":"object","required":["framework_id"],"title":"MaturityResponse"},"MemoryEntry":{"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"persona":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Persona"},"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id"},"key":{"type":"string","title":"Key"},"value":{"type":"string","title":"Value"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"updated_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated By"},"updated_at":{"anyOf":[{},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["key","value"],"title":"MemoryEntry"},"MemoryUpsert":{"properties":{"key":{"type":"string","maxLength":120,"minLength":1,"title":"Key"},"value":{"type":"string","maxLength":500,"minLength":1,"title":"Value"},"persona":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}],"title":"Persona"},"user_id":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"User Id"}},"type":"object","required":["key","value"],"title":"MemoryUpsert"},"ModuleActivationRequest":{"properties":{"modules":{"items":{"type":"string"},"type":"array","maxItems":8,"title":"Modules"},"acknowledged":{"type":"boolean","title":"Acknowledged","default":false},"acknowledged_terms_version":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Acknowledged Terms Version"}},"type":"object","title":"ModuleActivationRequest","description":"Enable a previously-declined **scan** module post-onboarding.\n\nEnable-only + scan-only: non-scan slugs are ignored, and the requested modules are\nunioned into the existing set (never removed). When a scan module is newly enabled\nthe scan-target authorisation (`acknowledged` + current terms version) is required —\nthe same consent the onboarding module-confirm gate captures."},"ModuleActivationResponse":{"properties":{"enabled_modules":{"items":{"type":"string"},"type":"array","title":"Enabled Modules"},"released_scans":{"items":{"type":"string"},"type":"array","title":"Released Scans"}},"type":"object","title":"ModuleActivationResponse"},"MyProjectsEntry":{"properties":{"org":{"$ref":"#/components/schemas/OrgInfo"},"role_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role Type"},"projects":{"items":{"$ref":"#/components/schemas/ProjectInfo"},"type":"array","title":"Projects"}},"type":"object","required":["org"],"title":"MyProjectsEntry","description":"One organisation plus the caller's accessible projects.\n\nDeclared so the endpoint carries a ``response_model`` — this documents it in the\npublic schema and gives FastAPI a Pydantic guardrail so a future refactor can't\nreturn raw dicts that bypass the ``OrgInfo``/``ProjectInfo`` response serializers\n(which apply the neutral wire aliases and suppress the server-only routing fields)."},"NarrativeMovement":{"properties":{"control_name":{"type":"string","title":"Control Name"},"title":{"type":"string","title":"Title"},"category":{"type":"string","title":"Category"},"delta":{"type":"number","title":"Delta"},"date":{"type":"string","title":"Date"}},"type":"object","required":["control_name","title","category","delta","date"],"title":"NarrativeMovement","description":"One control's contribution to the period's score movement."},"NotificationLogInfo":{"properties":{"created_at":{"type":"string","format":"date-time","title":"Created At","description":"Creation timestamp"},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"Last update timestamp"},"id":{"type":"string","title":"Id"},"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id"},"org_id":{"type":"string","title":"Org Id"},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Id"},"category":{"type":"string","title":"Category"},"channel":{"type":"string","title":"Channel"},"subject":{"type":"string","title":"Subject"},"rcpt_to":{"items":{"type":"string"},"type":"array","title":"Rcpt To"},"rcpt_cc":{"items":{"type":"string"},"type":"array","title":"Rcpt Cc"},"status":{"type":"string","title":"Status"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata"}},"type":"object","required":["id","org_id","category","channel","subject","status"],"title":"NotificationLogInfo"},"NotificationLogListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/NotificationLogInfo"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total","default":0},"limit":{"type":"integer","title":"Limit","default":20},"offset":{"type":"integer","title":"Offset","default":0}},"type":"object","title":"NotificationLogListResponse","description":"Response model for paginated notification log listing."},"OnboardingApplyRequest":{"properties":{"quiz_answers":{"$ref":"#/components/schemas/OnboardingQuizAnswers"},"selected_framework_ids":{"items":{"type":"string"},"type":"array","maxItems":32,"title":"Selected Framework Ids"},"acknowledge_license":{"type":"boolean","title":"Acknowledge License","default":false},"ai_summary":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Ai Summary"},"primary_framework_id":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Primary Framework Id"},"force":{"type":"boolean","title":"Force","default":false},"enabled_modules":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":8},{"type":"null"}],"title":"Enabled Modules"}},"type":"object","required":["quiz_answers"],"title":"OnboardingApplyRequest"},"OnboardingApplyResponse":{"properties":{"preferences":{"$ref":"#/components/schemas/ProjectPreferences"},"enabled_framework_ids":{"items":{"type":"string"},"type":"array","title":"Enabled Framework Ids"},"assessment_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assessment Id"},"assessment_framework_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assessment Framework Id"}},"type":"object","required":["preferences"],"title":"OnboardingApplyResponse"},"OnboardingModulesRequest":{"properties":{"enabled_modules":{"items":{"type":"string"},"type":"array","maxItems":8,"title":"Enabled Modules"},"acknowledged":{"type":"boolean","title":"Acknowledged","default":false},"acknowledged_terms_version":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Acknowledged Terms Version"}},"type":"object","title":"OnboardingModulesRequest","description":"Confirm the wizard's first-step module selection — persisted immediately and\nused to release the enabled main-domain scans (the user has already verified\ntheir email by signing in). Separate from the full apply so scanning starts on\nconsent, before the profiling quiz + GRC setup.\n\nWhen a scan module is enabled, ``acknowledged`` + ``acknowledged_terms_version``\ncapture the scan-target authorisation (same acknowledgement the scan-create form\nrequires) — recorded in the audit log."},"OnboardingModulesResponse":{"properties":{"enabled_modules":{"items":{"type":"string"},"type":"array","title":"Enabled Modules"},"released_scans":{"items":{"type":"string"},"type":"array","title":"Released Scans"}},"type":"object","title":"OnboardingModulesResponse"},"OnboardingOrgProfileRequest":{"properties":{"country":{"anyOf":[{"type":"string","pattern":"^[A-Za-z]{2,8}$"},{"type":"null"}],"title":"Country"},"sector":{"anyOf":[{"type":"string","enum":["healthcare","fintech","government","saas","retail","other"]},{"type":"null"}],"title":"Sector"},"org_size":{"anyOf":[{"type":"string","enum":["<25","25-250","250-1000","1000+"]},{"type":"null"}],"title":"Org Size"},"data_sensitivity":{"anyOf":[{"type":"string","enum":["public","internal","confidential","highly-sensitive"]},{"type":"null"}],"title":"Data Sensitivity"},"org_type":{"anyOf":[{"type":"string","enum":["health","education","nfp","startup","commercial"]},{"type":"null"}],"title":"Org Type"}},"type":"object","title":"OnboardingOrgProfileRequest","description":"The org-wide onboarding answers (captured once per org), persisted when the\nwizard reaches the modules step so they survive a later skip."},"OnboardingOrgProfileResponse":{"properties":{"org_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Org Type"},"discount_class":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Discount Class"},"settings":{"additionalProperties":true,"type":"object","title":"Settings"}},"type":"object","title":"OnboardingOrgProfileResponse","description":"The org's profile after the set-once seed (first-write-wins values)."},"OnboardingQuizAnswers":{"properties":{"country":{"anyOf":[{"type":"string","maxLength":8},{"type":"null"}],"title":"Country"},"sector":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Sector"},"regulator_overlays":{"items":{"type":"string"},"type":"array","maxItems":32,"title":"Regulator Overlays"},"risk_appetite":{"anyOf":[{"$ref":"#/components/schemas/RiskAppetite"},{"type":"null"}]},"org_size":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Org Size"},"data_sensitivity":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Data Sensitivity"},"primary_goal":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Primary Goal"},"org_type":{"anyOf":[{"type":"string","enum":["health","education","nfp","startup","commercial"]},{"type":"null"}],"title":"Org Type"},"hisf_org_type":{"anyOf":[{"type":"string","enum":["hospitals","microsmall","mlhsp","suppliers"]},{"type":"null"}],"title":"Hisf Org Type"}},"type":"object","title":"OnboardingQuizAnswers"},"OnboardingRecommendResponse":{"properties":{"recommended":{"items":{"$ref":"#/components/schemas/RecommendedFramework"},"type":"array","title":"Recommended"},"ai_summary":{"type":"string","title":"Ai Summary","default":""}},"type":"object","title":"OnboardingRecommendResponse"},"OrgBase":{"properties":{"created_at":{"type":"string","format":"date-time","title":"Created At","description":"Creation timestamp"},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"Last update timestamp"},"main_domain":{"type":"string","maxLength":255,"minLength":1,"title":"Main Domain","description":"The organisation's founding/registration domain — the immutable tenant identifier and initial scan target."},"display_name":{"anyOf":[{"type":"string","maxLength":64,"minLength":2},{"type":"null"}],"title":"Display Name","description":"User-facing organization name (editable)"},"auth_domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Auth Domain","description":"Identity-provider login subdomain for the organisation (auto-derived at creation). Must not be empty."},"auth_org_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Auth Org Id","description":"Auth provider organisation ID"},"subscription_level":{"$ref":"#/components/schemas/SubscriptionLevel","default":"free"},"status":{"type":"string","enum":["active","suspended","cancelled","trial"],"title":"Status","default":"active"},"settings":{"additionalProperties":true,"type":"object","title":"Settings"},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata"},"agent_scope_policy":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Agent Scope Policy","description":"Grantable agent capability scopes. None/empty = only agent:safe keys mintable."},"stripe_customer_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Customer Id","description":"Stripe customer ID"},"stripe_subscription_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Subscription Id","description":"Stripe subscription ID"},"subscription_status":{"type":"string","enum":["active","past_due","canceled","incomplete","trialing","unpaid"],"title":"Subscription Status","description":"Detailed Stripe subscription status","default":"canceled"},"enabled_modules":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Enabled Modules","description":"Org's enabled capability modules (entitlement set). None = legacy/unrestricted."},"discount_class":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Discount Class","description":"Ops-recorded pricing segment (health/education/nfp/startup/…). Informational."},"org_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Org Type","description":"Organisation category (health/education/nfp/startup/commercial). Set once at onboarding."},"domain_ownership_verification":{"type":"boolean","title":"Domain Ownership Verification","description":"Require verified domain ownership for the identity scan","default":true},"is_deleted":{"type":"boolean","title":"Is Deleted","description":"Soft delete flag","default":false},"deleted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Deleted At","description":"Deletion timestamp"},"deleted_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Deleted By","description":"User who deleted the organization"},"deleted_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Deleted Reason","description":"Reason for deletion"}},"type":"object","required":["main_domain"],"title":"OrgBase"},"OrgDeleteRequest":{"properties":{"hard_delete":{"type":"boolean","title":"Hard Delete","description":"If true, perform hard delete; if false, perform soft delete","default":false},"deleted_reason":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"title":"Deleted Reason","description":"Reason for deleting the organization (required for soft delete)"}},"type":"object","title":"OrgDeleteRequest","description":"Request model for deleting an organization."},"OrgInfo":{"properties":{"created_at":{"type":"string","format":"date-time","title":"Created At","description":"Creation timestamp"},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"Last update timestamp"},"main_domain":{"type":"string","maxLength":255,"minLength":1,"title":"Main Domain","description":"The organisation's founding/registration domain — the immutable tenant identifier and initial scan target."},"display_name":{"anyOf":[{"type":"string","maxLength":64,"minLength":2},{"type":"null"}],"title":"Display Name","description":"User-facing organization name (editable)"},"auth_domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Auth Domain","description":"Identity-provider login subdomain for the organisation (auto-derived at creation). Must not be empty."},"auth_org_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Auth Org Id","description":"Auth provider organisation ID"},"subscription_level":{"$ref":"#/components/schemas/SubscriptionLevel","default":"free"},"status":{"type":"string","enum":["active","suspended","cancelled","trial"],"title":"Status","default":"active"},"settings":{"additionalProperties":true,"type":"object","title":"Settings"},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata"},"agent_scope_policy":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Agent Scope Policy","description":"Grantable agent capability scopes. None/empty = only agent:safe keys mintable."},"stripe_customer_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Customer Id","description":"Stripe customer ID"},"stripe_subscription_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Subscription Id","description":"Stripe subscription ID"},"subscription_status":{"type":"string","enum":["active","past_due","canceled","incomplete","trialing","unpaid"],"title":"Subscription Status","description":"Detailed Stripe subscription status","default":"canceled"},"enabled_modules":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Enabled Modules","description":"Org's enabled capability modules (entitlement set). None = legacy/unrestricted."},"discount_class":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Discount Class","description":"Ops-recorded pricing segment (health/education/nfp/startup/…). Informational."},"org_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Org Type","description":"Organisation category (health/education/nfp/startup/commercial). Set once at onboarding."},"domain_ownership_verification":{"type":"boolean","title":"Domain Ownership Verification","description":"Require verified domain ownership for the identity scan","default":true},"is_deleted":{"type":"boolean","title":"Is Deleted","description":"Soft delete flag","default":false},"deleted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Deleted At","description":"Deletion timestamp"},"deleted_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Deleted By","description":"User who deleted the organization"},"deleted_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Deleted Reason","description":"Reason for deletion"},"id":{"type":"string","title":"Id"}},"type":"object","required":["main_domain","id"],"title":"OrgInfo"},"OrgNotificationSettings":{"properties":{"created_at":{"type":"string","format":"date-time","title":"Created At","description":"Creation timestamp"},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"Last update timestamp"},"categories":{"additionalProperties":{"type":"boolean"},"type":"object","title":"Categories","description":"Per-category enabled flag; categories not present fall back to their platform default (DEFAULT_CATEGORIES)."},"notify_org_admins":{"type":"boolean","title":"Notify Org Admins","description":"If True, dispatch to all org admins in addition to recipient_emails.","default":true},"recipient_emails":{"items":{"type":"string"},"type":"array","title":"Recipient Emails","description":"Additional recipient email addresses (not required to be CISO360AI users)."},"timezone":{"type":"string","title":"Timezone","description":"Org timezone for scheduled notifications.","default":"UTC"},"id":{"type":"string","title":"Id"},"org_id":{"type":"string","title":"Org Id","description":"Organization ID these settings apply to."}},"type":"object","required":["id","org_id"],"title":"OrgNotificationSettings","description":"Complete persisted settings row (one per org)."},"OrgNotificationSettingsUpdate":{"properties":{"categories":{"additionalProperties":{"type":"boolean"},"type":"object","title":"Categories","description":"Per-category enabled flag; categories not present fall back to their platform default (DEFAULT_CATEGORIES)."},"notify_org_admins":{"type":"boolean","title":"Notify Org Admins","description":"If True, dispatch to all org admins in addition to recipient_emails.","default":true},"recipient_emails":{"items":{"type":"string"},"type":"array","title":"Recipient Emails","description":"Additional recipient email addresses (not required to be CISO360AI users)."},"timezone":{"type":"string","title":"Timezone","description":"Org timezone for scheduled notifications.","default":"UTC"}},"type":"object","title":"OrgNotificationSettingsUpdate","description":"Payload for PUT /settings — full replace."},"OrgSubscriptionLevelResponse":{"properties":{"subscription_level":{"type":"string","title":"Subscription Level"}},"type":"object","required":["subscription_level"],"title":"OrgSubscriptionLevelResponse","description":"Organization subscription level response model."},"OrgUpdate":{"properties":{"display_name":{"anyOf":[{"type":"string","maxLength":64,"minLength":2},{"type":"null"}],"title":"Display Name"},"auth_domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Auth Domain"},"subscription_level":{"anyOf":[{"$ref":"#/components/schemas/SubscriptionLevel"},{"type":"null"}]},"status":{"anyOf":[{"type":"string","enum":["active","suspended","cancelled","trial"]},{"type":"null"}],"title":"Status"},"settings":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Settings"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata"},"agent_scope_policy":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Agent Scope Policy"},"stripe_customer_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Customer Id"},"stripe_subscription_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Subscription Id"},"subscription_status":{"anyOf":[{"type":"string","enum":["active","past_due","canceled","incomplete","trialing","unpaid"]},{"type":"null"}],"title":"Subscription Status"},"is_deleted":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Deleted"},"deleted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Deleted At"},"deleted_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Deleted By"},"deleted_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Deleted Reason"}},"type":"object","title":"OrgUpdate"},"PaginatedAssetResponse":{"properties":{"assets":{"items":{"$ref":"#/components/schemas/AssetWithCategory"},"type":"array","title":"Assets","description":"List of assets with category and finding information"},"pagination":{"$ref":"#/components/schemas/AssetPaginationInfo","description":"Pagination information"}},"type":"object","required":["assets","pagination"],"title":"PaginatedAssetResponse","description":"Paginated response for asset list."},"PaginatedUserResponse":{"properties":{"users":{"items":{"$ref":"#/components/schemas/UserInfo"},"type":"array","title":"Users","description":"List of users"},"pagination":{"$ref":"#/components/schemas/PaginationInfo","description":"Pagination information"}},"type":"object","required":["users","pagination"],"title":"PaginatedUserResponse","description":"Paginated response for user list."},"PaginationInfo":{"properties":{"currentPageNumber":{"type":"integer","title":"Currentpagenumber","description":"Current page number (0-based)"},"total":{"type":"integer","title":"Total","description":"Total number of records across all pages"}},"type":"object","required":["currentPageNumber","total"],"title":"PaginationInfo","description":"Pagination metadata for API responses."},"PersonaPolicy":{"properties":{"persona":{"type":"string","title":"Persona"},"policy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Policy"},"updated_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated By"},"updated_at":{"anyOf":[{},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["persona"],"title":"PersonaPolicy"},"PersonaPolicyUpdate":{"properties":{"policy":{"type":"string","maxLength":2000,"title":"Policy"}},"type":"object","required":["policy"],"title":"PersonaPolicyUpdate"},"PlanEntitlement":{"properties":{"plan":{"type":"string","title":"Plan"},"display_name":{"type":"string","title":"Display Name"},"seats_purchased":{"type":"integer","title":"Seats Purchased","default":0},"seats_assigned":{"type":"integer","title":"Seats Assigned","default":0},"subscriptions":{"items":{"type":"string"},"type":"array","title":"Subscriptions"}},"type":"object","required":["plan","display_name"],"title":"PlanEntitlement","description":"Seats the organisation holds for one service plan.\n\nPure arithmetic over ``/subscribedSkus`` and the directory — no mapping involved,\nso this side is always :attr:`Confidence.MEASURED`."},"Policy":{"properties":{"title":{"type":"string","maxLength":300,"minLength":1,"title":"Title"},"category":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Category"},"order":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Order"},"owner_email":{"anyOf":[{"type":"string","maxLength":254},{"type":"null"}],"title":"Owner Email"},"review_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Review Date"},"framework_ref":{"items":{"type":"string"},"type":"array","title":"Framework Ref"},"standard_tags":{"items":{"$ref":"#/components/schemas/StandardTag"},"type":"array","maxItems":64,"title":"Standard Tags"},"level":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Level"},"source_mode":{"$ref":"#/components/schemas/SourceMode","default":"authored"},"external_url":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"External Url"},"attachment_ref":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Attachment Ref"},"sections":{"items":{"$ref":"#/components/schemas/SectionRef"},"type":"array","title":"Sections"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"org_id":{"type":"string","title":"Org Id"},"project_id":{"type":"string","title":"Project Id"},"seeded_from":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Seeded From"},"status":{"$ref":"#/components/schemas/PolicyStatus","default":"draft"},"body_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Body Text"},"version":{"type":"integer","title":"Version","default":1},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated By"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"versions":{"items":{"$ref":"#/components/schemas/PolicySnapshot"},"type":"array","title":"Versions"},"history":{"items":{"$ref":"#/components/schemas/PolicyStatusTransition"},"type":"array","title":"History"}},"type":"object","required":["title","org_id","project_id"],"title":"Policy"},"PolicyCheckpointRequest":{"properties":{"note":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Note"},"expected_version":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Expected Version"}},"type":"object","title":"PolicyCheckpointRequest","description":"Author-driven version bookmark (does not change status)."},"PolicyCreate":{"properties":{"title":{"type":"string","maxLength":300,"minLength":1,"title":"Title"},"category":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Category"},"order":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Order"},"owner_email":{"anyOf":[{"type":"string","maxLength":254},{"type":"null"}],"title":"Owner Email"},"review_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Review Date"},"framework_ref":{"items":{"type":"string"},"type":"array","title":"Framework Ref"},"standard_tags":{"items":{"$ref":"#/components/schemas/StandardTag"},"type":"array","maxItems":64,"title":"Standard Tags"},"level":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Level"},"source_mode":{"$ref":"#/components/schemas/SourceMode","default":"authored"},"external_url":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"External Url"},"attachment_ref":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Attachment Ref"},"sections":{"items":{"$ref":"#/components/schemas/SectionRef"},"type":"array","title":"Sections"}},"type":"object","required":["title"],"title":"PolicyCreate"},"PolicySnapshot":{"properties":{"version":{"type":"integer","minimum":1.0,"title":"Version"},"at":{"type":"string","format":"date-time","title":"At"},"by":{"type":"string","maxLength":128,"title":"By"},"title":{"type":"string","maxLength":300,"title":"Title"},"sections":{"items":{"$ref":"#/components/schemas/SectionRef"},"type":"array","title":"Sections"},"body_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Body Text"},"note":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Note"}},"type":"object","required":["version","by","title"],"title":"PolicySnapshot","description":"One append-only content snapshot in `versions`.\n\nFreezes the composed content at a point in time so `restore(version)` and diff\nwork without depending on mutable `document_section` state."},"PolicyStatus":{"type":"string","enum":["draft","review","approved","archived"],"title":"PolicyStatus"},"PolicyStatusTransition":{"properties":{"at":{"type":"string","format":"date-time","title":"At"},"by":{"type":"string","maxLength":128,"title":"By"},"from_status":{"type":"string","title":"From Status"},"to_status":{"type":"string","title":"To Status"},"reason":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Reason"}},"type":"object","required":["by","from_status","to_status"],"title":"PolicyStatusTransition","description":"One row in the append-only status `history` trail (mirrors report)."},"PolicySummary":{"properties":{"title":{"type":"string","maxLength":300,"minLength":1,"title":"Title"},"category":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Category"},"order":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Order"},"owner_email":{"anyOf":[{"type":"string","maxLength":254},{"type":"null"}],"title":"Owner Email"},"review_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Review Date"},"framework_ref":{"items":{"type":"string"},"type":"array","title":"Framework Ref"},"standard_tags":{"items":{"$ref":"#/components/schemas/StandardTag"},"type":"array","maxItems":64,"title":"Standard Tags"},"level":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Level"},"source_mode":{"$ref":"#/components/schemas/SourceMode","default":"authored"},"external_url":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"External Url"},"attachment_ref":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Attachment Ref"},"sections":{"items":{"$ref":"#/components/schemas/SectionRef"},"type":"array","title":"Sections"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"org_id":{"type":"string","title":"Org Id"},"project_id":{"type":"string","title":"Project Id"},"seeded_from":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Seeded From"},"status":{"$ref":"#/components/schemas/PolicyStatus","default":"draft"},"body_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Body Text"},"version":{"type":"integer","title":"Version","default":1},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated By"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["title","org_id","project_id"],"title":"PolicySummary","description":"A policy without its (potentially large) `versions`/`history` arrays — the\nlist/reorder/sync response shape, so list-page payloads stay small. The\nfull `Policy` (with versions + history) is returned only by the single-GET\nand mutating endpoints."},"PolicyTransitionRequest":{"properties":{"to_status":{"$ref":"#/components/schemas/PolicyStatus"},"reason":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Reason"},"expected_version":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Expected Version"}},"type":"object","required":["to_status"],"title":"PolicyTransitionRequest"},"PolicyUpdate":{"properties":{"title":{"anyOf":[{"type":"string","maxLength":300,"minLength":1},{"type":"null"}],"title":"Title"},"category":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Category"},"order":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Order"},"owner_email":{"anyOf":[{"type":"string","maxLength":254},{"type":"null"}],"title":"Owner Email"},"review_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Review Date"},"framework_ref":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Framework Ref"},"standard_tags":{"anyOf":[{"items":{"$ref":"#/components/schemas/StandardTag"},"type":"array","maxItems":64},{"type":"null"}],"title":"Standard Tags"},"level":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Level"},"source_mode":{"anyOf":[{"$ref":"#/components/schemas/SourceMode"},{"type":"null"}]},"external_url":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"External Url"},"attachment_ref":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Attachment Ref"},"sections":{"anyOf":[{"items":{"$ref":"#/components/schemas/SectionRef"},"type":"array"},{"type":"null"}],"title":"Sections"},"expected_version":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Expected Version"}},"type":"object","title":"PolicyUpdate","description":"Partial edit. `expected_version` drives optimistic-concurrency (CAS)."},"PostureInsightsResponse":{"properties":{"days":{"type":"integer","title":"Days","default":0},"collected_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Collected At"},"available":{"type":"boolean","title":"Available","default":false},"entitlement_gaps":{"items":{"$ref":"#/components/schemas/EntitlementGap"},"type":"array","title":"Entitlement Gaps"},"entitlements_unassessed":{"items":{"$ref":"#/components/schemas/PlanEntitlement"},"type":"array","title":"Entitlements Unassessed"},"next_actions":{"items":{"$ref":"#/components/schemas/EffortRankedAction"},"type":"array","title":"Next Actions"},"change_narrative":{"$ref":"#/components/schemas/ChangeNarrative"},"csf_movement":{"$ref":"#/components/schemas/CsfMovement"}},"type":"object","title":"PostureInsightsResponse","description":"Everything the insight block renders — and the same payload the assistant reads."},"PostureItem":{"properties":{"id":{"type":"string","title":"Id"},"source":{"$ref":"#/components/schemas/PostureSource"},"priority":{"$ref":"#/components/schemas/PosturePriority"},"framework_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Framework Id"},"requirement_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Requirement Id"},"control_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Control Ref"},"description":{"type":"string","title":"Description"},"owner":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner"},"due":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Due"},"status":{"type":"string","title":"Status"},"deep_link":{"type":"string","title":"Deep Link"}},"type":"object","required":["id","source","priority","description","status","deep_link"],"title":"PostureItem","description":"A single actionable item on the Posture dashboard.\n\nAggregates the user's \"what to do today\" view across three signal\nsources (gap scores, pending proposals, compliance-linked actions),\neach with a `deep_link` to the relevant page."},"PostureKpisResponse":{"properties":{"framework_id":{"type":"string","title":"Framework Id"},"in_scope":{"type":"integer","title":"In Scope"},"validated":{"type":"integer","title":"Validated"},"claimed":{"type":"integer","title":"Claimed"},"managed":{"type":"integer","title":"Managed"},"gap":{"type":"integer","title":"Gap"},"unknown":{"type":"integer","title":"Unknown"},"not_applicable":{"type":"integer","title":"Not Applicable"},"verified_posture_percent":{"type":"number","title":"Verified Posture Percent"},"claimed_posture_percent":{"type":"number","title":"Claimed Posture Percent"},"assurance_gap_percent":{"type":"number","title":"Assurance Gap Percent"},"managed_risk_percent":{"type":"number","title":"Managed Risk Percent"},"inferred":{"type":"integer","title":"Inferred","default":0},"inferred_posture_percent":{"type":"number","title":"Inferred Posture Percent","default":0.0}},"type":"object","required":["framework_id","in_scope","validated","claimed","managed","gap","unknown","not_applicable","verified_posture_percent","claimed_posture_percent","assurance_gap_percent","managed_risk_percent"],"title":"PostureKpisResponse","description":"Verified-vs-Claimed posture KPIs for a tenant's baseline.\n\nThe §6 design intent: every posture number derives from the state\npopulation of in-scope controls — no floating numbers. ``in_scope``\nexcludes ``not_applicable``; ``unknown`` remains in the denominator\n(an un-assessed control counts against posture, never for it)."},"PosturePriority":{"type":"string","enum":["minimum","high","med","low"],"title":"PosturePriority","description":"Posture-item priority. `minimum` always wins (any item touching a\n`Requirement.minimum=True` control — a minimum-baseline control — bubbles to\nthe top). Otherwise we map from the source's native severity / state."},"PostureSource":{"type":"string","enum":["score","proposal","action"],"title":"PostureSource","description":"Where a posture item came from. Drives the Source column + icon\nin the Posture table, and disambiguates the `id` field's meaning."},"PostureSummaryResponse":{"properties":{"connectors":{"items":{"$ref":"#/components/schemas/ConnectorPostureSummary"},"type":"array","title":"Connectors"}},"type":"object","required":["connectors"],"title":"PostureSummaryResponse"},"PresetType":{"type":"string","enum":["passive","active","deep","customized"],"title":"PresetType","description":"Preset type enumeration."},"ProjectDeleteRequest":{"properties":{"hard_delete":{"type":"boolean","title":"Hard Delete","description":"If true, perform hard delete; if false, perform soft delete","default":false},"deleted_reason":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"title":"Deleted Reason","description":"Reason for deleting the project (required for soft delete)"}},"type":"object","title":"ProjectDeleteRequest","description":"Request model for deleting a project."},"ProjectInfo":{"properties":{"created_at":{"type":"string","format":"date-time","title":"Created At","description":"Creation timestamp"},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"Last update timestamp"},"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name","description":"Project name (immutable DB identifier)"},"display_name":{"anyOf":[{"type":"string","maxLength":64,"minLength":2},{"type":"null"}],"title":"Display Name","description":"User-facing project name (editable)"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"clientId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Clientid"},"clientSecret":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Clientsecret"},"hasProjectCheck":{"type":"boolean","title":"Hasprojectcheck","description":"Has project check enabled","default":false},"is_main":{"type":"boolean","title":"Is Main","description":"Is main project","default":false},"is_locked":{"type":"boolean","title":"Is Locked","description":"Whether the project is protected with soft-delete","default":false},"subscription_level":{"anyOf":[{"$ref":"#/components/schemas/SubscriptionLevel"},{"type":"null"}],"description":"Optional per-project plan; unset inherits the organisation's plan"},"settings":{"additionalProperties":true,"type":"object","title":"Settings","description":"Project settings"},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata","description":"Project metadata"},"org_id":{"type":"string","title":"Org Id","description":"Organization ID"},"projectRoleAssertion":{"type":"boolean","title":"Projectroleassertion","description":"Project role assertion enabled","default":false},"state":{"type":"string","title":"State","description":"Project state"},"auth_org_id":{"type":"string","title":"Auth Org Id","description":"Auth provider organisation ID"},"auth_project_id":{"type":"string","title":"Auth Project Id","description":"Auth provider project ID"},"is_deleted":{"type":"boolean","title":"Is Deleted","description":"Soft delete flag","default":false},"deleted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Deleted At","description":"Deletion timestamp"},"deleted_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Deleted By","description":"User who deleted the project"},"deleted_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Deleted Reason","description":"Reason for deletion"},"id":{"type":"string","title":"Id"},"current_user_role_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current User Role Key"}},"type":"object","required":["name","org_id","state","auth_org_id","auth_project_id","id"],"title":"ProjectInfo"},"ProjectLockRequest":{"properties":{"is_locked":{"type":"boolean","title":"Is Locked","description":"Whether to lock the project"}},"type":"object","required":["is_locked"],"title":"ProjectLockRequest","description":"Request model for toggling project lock status."},"ProjectPreferences":{"properties":{"created_at":{"type":"string","format":"date-time","title":"Created At","description":"Creation timestamp"},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"Last update timestamp"},"org_id":{"type":"string","title":"Org Id"},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Id"},"sector":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sector"},"regulator_overlays":{"items":{"type":"string"},"type":"array","title":"Regulator Overlays"},"review_cadence":{"$ref":"#/components/schemas/ReviewCadence","default":"quarterly"},"default_approver_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Approver Id"},"auto_apply_threshold":{"type":"number","title":"Auto Apply Threshold","default":1.01},"risk_appetite":{"anyOf":[{"$ref":"#/components/schemas/RiskAppetite"},{"type":"null"}]},"onboarding_completed":{"type":"boolean","title":"Onboarding Completed","default":false},"onboarding_dismissed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Onboarding Dismissed At"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"},"org_size":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Org Size"},"data_sensitivity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Data Sensitivity"},"primary_goal":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Goal"},"onboarding_summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Onboarding Summary"},"target_maturity":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Target Maturity"},"primary_framework_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Framework Id"},"document_variables":{"additionalProperties":true,"type":"object","title":"Document Variables"},"starter_policies_synced":{"type":"boolean","title":"Starter Policies Synced","default":false},"enabled_modules":{"items":{"type":"string"},"type":"array","maxItems":8,"title":"Enabled Modules"}},"type":"object","required":["org_id"],"title":"ProjectPreferences"},"ProjectPreferencesUpdate":{"properties":{"sector":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sector"},"regulator_overlays":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Regulator Overlays"},"review_cadence":{"anyOf":[{"$ref":"#/components/schemas/ReviewCadence"},{"type":"null"}]},"default_approver_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Approver Id"},"auto_apply_threshold":{"anyOf":[{"type":"number","maximum":1.01,"minimum":0.0},{"type":"null"}],"title":"Auto Apply Threshold"},"risk_appetite":{"anyOf":[{"$ref":"#/components/schemas/RiskAppetite"},{"type":"null"}]},"onboarding_completed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Onboarding Completed"},"onboarding_dismissed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Onboarding Dismissed At"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"},"org_size":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Org Size"},"data_sensitivity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Data Sensitivity"},"primary_goal":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Goal"},"onboarding_summary":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Onboarding Summary"},"target_maturity":{"anyOf":[{"type":"integer","maximum":4.0,"minimum":1.0},{"type":"null"}],"title":"Target Maturity"},"primary_framework_id":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Primary Framework Id"},"document_variables":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Document Variables"},"starter_policies_synced":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Starter Policies Synced"},"enabled_modules":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":8},{"type":"null"}],"title":"Enabled Modules"}},"type":"object","title":"ProjectPreferencesUpdate"},"ProjectRoleInfo":{"properties":{"created_at":{"type":"string","format":"date-time","title":"Created At","description":"Creation timestamp"},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"Last update timestamp"},"role_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role Key"},"role_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"permissions":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Permissions"},"is_system":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is System","default":false},"scope":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scope","default":"project"},"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Id"},"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Name"},"project_role_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Role Id"}},"type":"object","title":"ProjectRoleInfo","description":"Model for project role information including role and project details."},"ProjectUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"display_name":{"anyOf":[{"type":"string","maxLength":64,"minLength":2},{"type":"null"}],"title":"Display Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"clientId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Clientid"},"clientSecret":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Clientsecret"},"hasProjectCheck":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Hasprojectcheck"},"is_main":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Main"},"is_locked":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Locked"},"settings":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Settings"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata"},"projectRoleAssertion":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Projectroleassertion"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"},"is_deleted":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Deleted"},"deleted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Deleted At"},"deleted_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Deleted By"},"deleted_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Deleted Reason"}},"type":"object","title":"ProjectUpdate"},"ProjectedCoverageEntry":{"properties":{"framework_id":{"type":"string","title":"Framework Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"derived_requirements":{"type":"integer","title":"Derived Requirements"},"met":{"type":"integer","title":"Met"},"partial":{"type":"integer","title":"Partial"},"not_met":{"type":"integer","title":"Not Met"},"not_applicable":{"type":"integer","title":"Not Applicable"},"coverage_percent":{"type":"number","title":"Coverage Percent"},"verified_coverage_percent":{"type":"number","title":"Verified Coverage Percent"}},"type":"object","required":["framework_id","derived_requirements","met","partial","not_met","not_applicable","coverage_percent","verified_coverage_percent"],"title":"ProjectedCoverageEntry","description":"Per-framework projected coverage from a source baseline assessment."},"ProjectedCoverageResponse":{"properties":{"source_framework_id":{"type":"string","title":"Source Framework Id"},"source_assessment_id":{"type":"string","title":"Source Assessment Id"},"frameworks":{"items":{"$ref":"#/components/schemas/ProjectedCoverageEntry"},"type":"array","title":"Frameworks"}},"type":"object","required":["source_framework_id","source_assessment_id"],"title":"ProjectedCoverageResponse"},"ProposalStatus":{"type":"string","enum":["pending","approved","rejected","superseded"],"title":"ProposalStatus"},"ProposalType":{"type":"string","enum":["score","mapping","remediation","risk","evidence_link","preferences","exception"],"title":"ProposalType"},"RecommendedAction":{"properties":{"control_name":{"type":"string","title":"Control Name"},"title":{"type":"string","title":"Title"},"category":{"type":"string","title":"Category"},"score":{"type":"number","title":"Score"},"max":{"type":"number","title":"Max"},"score_impact":{"type":"number","title":"Score Impact"},"action_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Action Url"},"tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier"}},"type":"object","required":["control_name","title","category","score","max","score_impact"],"title":"RecommendedAction","description":"An incomplete control, ranked by the points it would add."},"RecommendedFramework":{"properties":{"framework_id":{"type":"string","title":"Framework Id"},"reason":{"type":"string","title":"Reason"},"weight":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Weight"},"requires_acknowledgement":{"type":"boolean","title":"Requires Acknowledgement","default":false}},"type":"object","required":["framework_id","reason","weight"],"title":"RecommendedFramework"},"RecommendedFrameworksResponse":{"properties":{"sector":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sector"},"regulator_overlays":{"items":{"type":"string"},"type":"array","title":"Regulator Overlays"},"recommended":{"items":{"$ref":"#/components/schemas/RecommendedFramework"},"type":"array","title":"Recommended"}},"type":"object","title":"RecommendedFrameworksResponse"},"RelationshipCountsResponse":{"properties":{"entity_id":{"type":"string","title":"Entity Id"},"counts":{"additionalProperties":{"type":"integer"},"type":"object","title":"Counts"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["entity_id","counts","total"],"title":"RelationshipCountsResponse"},"RenderRequest":{"properties":{"body":{"type":"string","maxLength":100000,"title":"Body"}},"type":"object","required":["body"],"title":"RenderRequest","description":"Render an ad-hoc body against the tenant variable map (preview).\n\n`body` runs through the same `_bound_body` check as a section (size + no\npartials) so a forbidden body is rejected at validation (422) rather than\nerroring inside the renderer."},"RenderResponse":{"properties":{"rendered":{"type":"string","title":"Rendered"},"missing":{"items":{"type":"string"},"type":"array","title":"Missing"}},"type":"object","required":["rendered"],"title":"RenderResponse"},"Report":{"properties":{"title":{"type":"string","maxLength":300,"minLength":1,"title":"Title"},"kind":{"type":"string","maxLength":64,"title":"Kind","default":"findings"},"sections":{"items":{"$ref":"#/components/schemas/SectionRef"},"type":"array","title":"Sections"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"org_id":{"type":"string","title":"Org Id"},"project_id":{"type":"string","title":"Project Id"},"parent_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent Id"},"status":{"$ref":"#/components/schemas/ReportStatus","default":"draft"},"body_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Body Text"},"version":{"type":"integer","title":"Version","default":1},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated By"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"snapshot":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Snapshot"},"versions":{"items":{"$ref":"#/components/schemas/ReportSnapshot"},"type":"array","title":"Versions"},"history":{"items":{"$ref":"#/components/schemas/ReportStatusTransition"},"type":"array","title":"History"}},"type":"object","required":["title","org_id","project_id"],"title":"Report"},"ReportAttribution":{"properties":{"framework_id":{"type":"string","title":"Framework Id"},"framework_name":{"type":"string","title":"Framework Name"},"attribution":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Attribution"},"source_license":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source License"},"source_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Url"}},"type":"object","required":["framework_id","framework_name"],"title":"ReportAttribution"},"ReportCheckpointRequest":{"properties":{"note":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Note"},"expected_version":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Expected Version"}},"type":"object","title":"ReportCheckpointRequest"},"ReportCreate":{"properties":{"title":{"type":"string","maxLength":300,"minLength":1,"title":"Title"},"kind":{"type":"string","maxLength":64,"title":"Kind","default":"findings"},"sections":{"items":{"$ref":"#/components/schemas/SectionRef"},"type":"array","title":"Sections"},"snapshot":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Snapshot"},"parent_id":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Parent Id"}},"type":"object","required":["title"],"title":"ReportCreate"},"ReportEvidenceItem":{"properties":{"id":{"type":"string","title":"Id"},"label":{"type":"string","title":"Label"},"evidence_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Evidence Type"},"is_image":{"type":"boolean","title":"Is Image","default":false},"inline_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Inline Url"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"}},"type":"object","required":["id","label"],"title":"ReportEvidenceItem","description":"One piece of evidence attached to a finding, ready for report render.\n\nImage evidence carries an `inline_url` (presigned, inline disposition) so it\nembeds in the report; everything else carries a download `url`."},"ReportFindingDetail":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"severity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Severity"},"exposure_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Exposure Score"},"exposure_band":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Exposure Band"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"impact":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Impact"},"reproduction_steps":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reproduction Steps"},"remediation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Remediation"},"asset_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asset Name"},"vulnerability_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vulnerability Name"},"cve_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cve Id"},"evidence":{"items":{"$ref":"#/components/schemas/ReportEvidenceItem"},"type":"array","title":"Evidence"}},"type":"object","required":["id","name"],"title":"ReportFindingDetail"},"ReportFrameworkSection":{"properties":{"framework_id":{"type":"string","title":"Framework Id"},"framework_name":{"type":"string","title":"Framework Name"},"coverage":{"$ref":"#/components/schemas/CoverageResponse"},"maturity":{"anyOf":[{"$ref":"#/components/schemas/MaturityResponse"},{"type":"null"}]},"gaps":{"items":{"$ref":"#/components/schemas/GapResponse"},"type":"array","title":"Gaps"},"requirements":{"items":{"$ref":"#/components/schemas/ReportRequirementDetail"},"type":"array","title":"Requirements"}},"type":"object","required":["framework_id","framework_name","coverage"],"title":"ReportFrameworkSection"},"ReportIdentityExposure":{"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"severity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Severity"},"breach_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Breach Type"},"username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Username"},"domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain"},"monitored_domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Monitored Domain"},"match":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Match"},"exposure_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Exposure Score"},"exposure_band":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Exposure Band"}},"type":"object","title":"ReportIdentityExposure"},"ReportPostureItem":{"properties":{"framework_id":{"type":"string","title":"Framework Id"},"framework_name":{"type":"string","title":"Framework Name"},"in_scope":{"type":"integer","title":"In Scope","default":0},"gap":{"type":"integer","title":"Gap","default":0},"verified_posture_percent":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Verified Posture Percent"},"claimed_posture_percent":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Claimed Posture Percent"}},"type":"object","required":["framework_id","framework_name"],"title":"ReportPostureItem"},"ReportRequirementDetail":{"properties":{"requirement_id":{"type":"string","title":"Requirement Id"},"code":{"type":"string","title":"Code"},"title":{"type":"string","title":"Title"},"compliance":{"$ref":"#/components/schemas/ComplianceStatus"},"score":{"$ref":"#/components/schemas/ScoreValue"},"evidence_count":{"type":"integer","title":"Evidence Count","default":0},"evidence_ids":{"items":{"type":"string"},"type":"array","title":"Evidence Ids"}},"type":"object","required":["requirement_id","code","title","compliance","score"],"title":"ReportRequirementDetail"},"ReportRiskItem":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"severity":{"type":"string","title":"Severity","default":"unknown"},"inherent_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Inherent Score"},"residual_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Residual Score"}},"type":"object","required":["id","name"],"title":"ReportRiskItem"},"ReportRiskRegister":{"properties":{"total":{"type":"integer","title":"Total","default":0},"open_count":{"type":"integer","title":"Open Count","default":0},"by_severity":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Severity"},"by_status":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Status"},"inherent_open_score":{"type":"number","title":"Inherent Open Score","default":0.0},"residual_open_score":{"type":"number","title":"Residual Open Score","default":0.0},"residual_reduction_pct":{"type":"integer","title":"Residual Reduction Pct","default":0},"top_risks":{"items":{"$ref":"#/components/schemas/ReportRiskItem"},"type":"array","title":"Top Risks"}},"type":"object","title":"ReportRiskRegister"},"ReportSnapshot":{"properties":{"version":{"type":"integer","minimum":1.0,"title":"Version"},"at":{"type":"string","format":"date-time","title":"At"},"by":{"type":"string","maxLength":128,"title":"By"},"title":{"type":"string","maxLength":300,"title":"Title"},"sections":{"items":{"$ref":"#/components/schemas/SectionRef"},"type":"array","title":"Sections"},"body_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Body Text"},"note":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Note"}},"type":"object","required":["version","by","title"],"title":"ReportSnapshot","description":"One append-only content snapshot in `versions` (mirrors PolicySnapshot).\n\nFreezes the composed narrative at a point in time so `restore(version)` and\ndiff work without depending on mutable `document_section` state."},"ReportStatus":{"type":"string","enum":["draft","review","approved"],"title":"ReportStatus"},"ReportStatusTransition":{"properties":{"at":{"type":"string","format":"date-time","title":"At"},"by":{"type":"string","maxLength":128,"title":"By"},"from_status":{"type":"string","title":"From Status"},"to_status":{"type":"string","title":"To Status"},"reason":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Reason"}},"type":"object","required":["by","from_status","to_status"],"title":"ReportStatusTransition","description":"One row in the append-only `history` trail (mirrors RiskHistoryEntry)."},"ReportSummary":{"properties":{"title":{"type":"string","maxLength":300,"minLength":1,"title":"Title"},"kind":{"type":"string","maxLength":64,"title":"Kind","default":"findings"},"sections":{"items":{"$ref":"#/components/schemas/SectionRef"},"type":"array","title":"Sections"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"org_id":{"type":"string","title":"Org Id"},"project_id":{"type":"string","title":"Project Id"},"parent_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent Id"},"status":{"$ref":"#/components/schemas/ReportStatus","default":"draft"},"body_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Body Text"},"version":{"type":"integer","title":"Version","default":1},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated By"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["title","org_id","project_id"],"title":"ReportSummary","description":"A report without its (potentially large) `snapshot` / `versions` / `history`\n— the list-response shape, so list-page payloads stay small (an Overview\n`snapshot` nests both the findings and compliance payloads). The full `Report`\nis returned by the single-GET + mutating endpoints."},"ReportTransitionRequest":{"properties":{"to_status":{"$ref":"#/components/schemas/ReportStatus"},"reason":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Reason"},"expected_version":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Expected Version"}},"type":"object","required":["to_status"],"title":"ReportTransitionRequest"},"ReportUpdate":{"properties":{"title":{"anyOf":[{"type":"string","maxLength":300,"minLength":1},{"type":"null"}],"title":"Title"},"sections":{"anyOf":[{"items":{"$ref":"#/components/schemas/SectionRef"},"type":"array"},{"type":"null"}],"title":"Sections"},"expected_version":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Expected Version"}},"type":"object","title":"ReportUpdate"},"ReprojectResponse":{"properties":{"reprojected":{"type":"integer","title":"Reprojected"}},"type":"object","required":["reprojected"],"title":"ReprojectResponse","description":"Result of a 'recompute inferred coverage' sweep — the number of direct\nsource controls re-projected across every enabled framework."},"Requirement":{"properties":{"id":{"type":"string","title":"Id"},"framework_id":{"type":"string","title":"Framework Id"},"parent_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent Id"},"kind":{"$ref":"#/components/schemas/RequirementKind"},"code":{"type":"string","title":"Code"},"title":{"type":"string","title":"Title"},"csf_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Csf Ref"},"minimum":{"type":"boolean","title":"Minimum","default":false}},"additionalProperties":true,"type":"object","required":["id","framework_id","kind","code","title"],"title":"Requirement"},"RequirementFindingResponse":{"properties":{"finding_id":{"type":"string","title":"Finding Id"},"action_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Action Id"},"requirement_id":{"type":"string","title":"Requirement Id"},"finding":{"additionalProperties":true,"type":"object","title":"Finding"}},"type":"object","required":["finding_id","requirement_id"],"title":"RequirementFindingResponse"},"RequirementKind":{"type":"string","enum":["function","category","control"],"title":"RequirementKind"},"ReviewCadence":{"type":"string","enum":["off","monthly","quarterly"],"title":"ReviewCadence"},"RiskAppetite":{"type":"string","enum":["low","medium","high"],"title":"RiskAppetite"},"RiskDeriveResponse":{"properties":{"created":{"items":{"type":"string"},"type":"array","title":"Created"},"count":{"type":"integer","title":"Count","default":0},"rescored":{"type":"integer","title":"Rescored","description":"Existing risks whose exploitability threat_signal was refreshed","default":0}},"type":"object","title":"RiskDeriveResponse"},"RiskStatsResponse":{"properties":{"total":{"type":"integer","title":"Total","default":0},"by_status":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Status"},"by_severity":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Severity"},"open_count":{"type":"integer","title":"Open Count","default":0},"overdue_count":{"type":"integer","title":"Overdue Count","default":0},"heatmap":{"additionalProperties":{"type":"integer"},"type":"object","title":"Heatmap"},"inherent_open_score":{"type":"number","title":"Inherent Open Score","default":0.0},"residual_open_score":{"type":"number","title":"Residual Open Score","default":0.0},"residual_reduction_pct":{"type":"integer","title":"Residual Reduction Pct","default":0},"linked_control_count":{"type":"integer","title":"Linked Control Count","default":0}},"type":"object","title":"RiskStatsResponse"},"RiskStatusTransition":{"properties":{"to_status":{"type":"string","maxLength":32,"minLength":1,"title":"To Status"},"reason":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Reason"}},"type":"object","required":["to_status"],"title":"RiskStatusTransition"},"RiskTreatedPoint":{"properties":{"period":{"type":"string","title":"Period"},"count":{"type":"integer","title":"Count","default":0}},"type":"object","required":["period"],"title":"RiskTreatedPoint"},"RiskTreatedSeriesResponse":{"properties":{"points":{"items":{"$ref":"#/components/schemas/RiskTreatedPoint"},"type":"array","title":"Points"},"current_streak_weeks":{"type":"integer","title":"Current Streak Weeks","default":0},"total_treated":{"type":"integer","title":"Total Treated","default":0}},"type":"object","title":"RiskTreatedSeriesResponse","description":"Risks treated (mitigated/accepted/closed) per week — drives the streak\ngamification. Derived from the embedded status-transition history."},"RoleType":{"type":"string","enum":["owned","granted"],"title":"RoleType"},"RunMode":{"type":"string","enum":["ondemand","scheduled"],"title":"RunMode","description":"Scan run mode enumeration."},"ScanCreate":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name","description":"Scan name"},"timestamp":{"type":"string","format":"date-time","title":"Timestamp","description":"Scan timestamp"},"targets":{"anyOf":[{"items":{"type":"string","maxLength":253},"type":"array","maxItems":1000,"uniqueItems":true},{"type":"null"}],"title":"Targets","description":"Set of scan targets"},"preset":{"anyOf":[{"additionalProperties":true,"type":"object"},{"$ref":"#/components/schemas/ScanPreset"},{"type":"null"}],"title":"Preset","description":"Scan preset configuration"},"workflow_name":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Workflow Name","description":"Name of the workflow that triggered this scan"},"run_mode":{"anyOf":[{"$ref":"#/components/schemas/RunMode"},{"type":"null"}],"description":"Run mode: ondemand or scheduled","default":"ondemand"},"schedule":{"anyOf":[{"$ref":"#/components/schemas/ScanSchedule"},{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Schedule","description":"Schedule (period + resolved cron) for scheduled scans"},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Run At","description":"Last run timestamp for scheduled scans"},"status":{"anyOf":[{"$ref":"#/components/schemas/ScanScheduleStatus"},{"type":"null"}],"description":"Scan status: pending, running, or paused, successful, failed","default":"pending"},"monitored_emails":{"anyOf":[{"items":{"type":"string","maxLength":254},"type":"array","maxItems":1000},{"type":"null"}],"title":"Monitored Emails","description":"Email addresses to check for breach exposure (identity scan only)"},"acknowledged":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Acknowledged","description":"Client confirms authorisation/responsibility for the targets"},"acknowledged_terms_version":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Acknowledged Terms Version","description":"Terms of Service version the client acknowledged"}},"type":"object","required":["name"],"title":"ScanCreate","description":"Model for creating a new scan."},"ScanInfo":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name","description":"Scan name"},"timestamp":{"type":"string","format":"date-time","title":"Timestamp","description":"Scan timestamp"},"targets":{"anyOf":[{"items":{"type":"string","maxLength":253},"type":"array","maxItems":1000,"uniqueItems":true},{"type":"null"}],"title":"Targets","description":"Set of scan targets"},"preset":{"anyOf":[{"additionalProperties":true,"type":"object"},{"$ref":"#/components/schemas/ScanPreset"},{"type":"null"}],"title":"Preset","description":"Scan preset configuration"},"workflow_name":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Workflow Name","description":"Name of the workflow that triggered this scan"},"run_mode":{"anyOf":[{"$ref":"#/components/schemas/RunMode"},{"type":"null"}],"description":"Run mode: ondemand or scheduled","default":"ondemand"},"schedule":{"anyOf":[{"$ref":"#/components/schemas/ScanSchedule"},{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Schedule","description":"Schedule (period + resolved cron) for scheduled scans"},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Run At","description":"Last run timestamp for scheduled scans"},"status":{"anyOf":[{"$ref":"#/components/schemas/ScanScheduleStatus"},{"type":"null"}],"description":"Scan status: pending, running, or paused, successful, failed","default":"pending"},"id":{"type":"string","title":"Id"},"is_pending_activation":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Pending Activation","description":"Held scan awaiting the org's first email verification before it runs","default":false},"monitored_emails":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Monitored Emails","description":"Emails checked via breach monitoring on an identity scan"}},"type":"object","required":["name","id"],"title":"ScanInfo","description":"Complete scan information model."},"ScanInfoExtended":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"timestamp":{"type":"string","title":"Timestamp"},"targets":{"anyOf":[{"items":{},"type":"array","uniqueItems":true},{"type":"null"}],"title":"Targets"},"preset":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Preset"},"workflow_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow Name"},"run_mode":{"anyOf":[{"$ref":"#/components/schemas/RunMode"},{"type":"null"}]},"cron":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cron"},"schedule":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Schedule"},"last_run_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Run At"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"recent_runs":{"items":{"$ref":"#/components/schemas/ScheduleRunInfo"},"type":"array","title":"Recent Runs","default":[]},"upcoming_runs":{"items":{"$ref":"#/components/schemas/ScheduleRunInfo"},"type":"array","title":"Upcoming Runs","default":[]}},"type":"object","required":["id","name","timestamp"],"title":"ScanInfoExtended","description":"Extended scan information model with schedule details."},"ScanInstanceCreate":{"properties":{"run_type":{"$ref":"#/components/schemas/RunMode","description":"How the scan was triggered","default":"ondemand"},"result_summary":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Result Summary","description":"Scan result summary"},"logs":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Logs","description":"Scan execution logs"},"schedule_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schedule Id","description":"Schedule ID for scheduled scans (stores scan_id)"}},"type":"object","title":"ScanInstanceCreate","description":"Model for creating a new scan instance."},"ScanInstanceGetOrCreate":{"properties":{"run_type":{"$ref":"#/components/schemas/RunMode","description":"How the scan was triggered","default":"ondemand"},"result_summary":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Result Summary","description":"Scan result summary"},"logs":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Logs","description":"Scan execution logs"},"schedule_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schedule Id","description":"Schedule ID for scheduled scans (stores scan_id)"},"isForceCreateNewInstance":{"type":"boolean","title":"Isforcecreatenewinstance","description":"If True, always create new instance. If False, reuse existing instance if available, or create new if none exists.","default":false}},"type":"object","title":"ScanInstanceGetOrCreate","description":"Model for getting or creating a scan instance with reuse logic."},"ScanInstanceInfo":{"properties":{"status":{"$ref":"#/components/schemas/ScanStatus","description":"Scan instance status","default":"pending"},"run_type":{"$ref":"#/components/schemas/RunMode","description":"How the scan was triggered","default":"ondemand"},"started_at":{"type":"string","format":"date-time","title":"Started At","description":"When the scan started"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At","description":"When the scan completed"},"result_summary":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Result Summary","description":"Scan result summary"},"logs":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Logs","description":"Scan execution logs"},"schedule_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schedule Id","description":"Schedule ID for scheduled scans (stores scan_id)"},"id":{"type":"string","title":"Id"}},"type":"object","required":["id"],"title":"ScanInstanceInfo","description":"Complete scan instance information model."},"ScanInstanceSummary":{"properties":{"events_count":{"type":"integer","title":"Events Count","description":"Number of events from this scan instance."},"assets_count":{"type":"integer","title":"Assets Count","description":"Number of assets created from this scan instance's events."},"vulnerabilities_count":{"type":"integer","title":"Vulnerabilities Count","description":"Number of vulnerabilities from this scan instance's events (vulnerabilities only — not findings; excludes observations)."},"findings_count":{"type":"integer","title":"Findings Count","description":"Number of findings from this scan instance's events (excludes observations)."},"observations_count":{"type":"integer","title":"Observations Count","description":"Scanner-noise observations (open ports / detected tech / discovered URLs) from this scan instance.","default":0}},"type":"object","required":["events_count","assets_count","vulnerabilities_count","findings_count"],"title":"ScanInstanceSummary","description":"Authoritative counts for a single scan instance, used once the scan has finished."},"ScanInstanceUpdate":{"properties":{"status":{"anyOf":[{"$ref":"#/components/schemas/ScanStatus"},{"type":"null"}]},"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"},"result_summary":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Result Summary"},"logs":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Logs"},"schedule_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schedule Id"}},"type":"object","title":"ScanInstanceUpdate","description":"Model for updating an existing scan instance."},"ScanInstanceWithScan":{"properties":{"id":{"type":"string","title":"Id"},"status":{"$ref":"#/components/schemas/ScanStatus"},"run_type":{"$ref":"#/components/schemas/RunMode"},"started_at":{"type":"string","format":"date-time","title":"Started At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"result_summary":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Result Summary"},"logs":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Logs"},"scan_id":{"type":"string","title":"Scan Id"},"scan_name":{"type":"string","title":"Scan Name"},"scan_targets":{"anyOf":[{"items":{},"type":"array","uniqueItems":true},{"type":"null"}],"title":"Scan Targets"},"triggered_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Triggered By"}},"type":"object","required":["id","status","run_type","started_at","scan_id","scan_name"],"title":"ScanInstanceWithScan","description":"Scan instance with its associated scan."},"ScanNotificationRequest":{"properties":{"scan_name":{"type":"string","maxLength":200,"title":"Scan Name","default":"N/A"},"target":{"type":"string","maxLength":2000,"title":"Target","default":"N/A"},"status":{"type":"string","pattern":"^(started|successful|failed)$","title":"Status"},"scan_instance_id":{"type":"string","maxLength":200,"title":"Scan Instance Id","default":""},"duration":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Duration"},"error_message":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Error Message"},"scan_kind":{"type":"string","maxLength":100,"title":"Scan Kind","default":"attack surface"},"result_summary":{"anyOf":[{"$ref":"#/components/schemas/ScanResultSummary"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["status"],"title":"ScanNotificationRequest","description":"Details of the scan whose lifecycle event to notify about."},"ScanPeriod":{"type":"string","enum":["daily","weekly","monthly","custom"],"title":"ScanPeriod","description":"How often a scheduled scan runs."},"ScanPostureDelta":{"properties":{"last_scan_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Scan At"},"new_assets":{"type":"integer","title":"New Assets","default":0},"new_vulnerabilities":{"type":"integer","title":"New Vulnerabilities","default":0},"new_findings":{"type":"integer","title":"New Findings","default":0}},"type":"object","title":"ScanPostureDelta","description":"New assets/vulnerabilities/findings discovered since the last scan."},"ScanPreset":{"properties":{"type":{"$ref":"#/components/schemas/PresetType","description":"Preset type"},"customized":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Customized","description":"Custom configuration when type is customized"},"strict_scope":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Strict Scope","description":"Scan only the exact target host(s) — no subdomain discovery"},"exclude_modules":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Exclude Modules","description":"Scan modules to skip, added to the preset's built-in exclusions"},"denylist":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Denylist","description":"Hosts/domains/regex (RE:…) to exclude from the scan, added to the preset's denylist"}},"type":"object","required":["type"],"title":"ScanPreset","description":"Structured scan preset configuration."},"ScanRequest":{"properties":{"domain":{"type":"string","maxLength":253,"title":"Domain","description":"Domain to search for exposed credentials"}},"type":"object","required":["domain"],"title":"ScanRequest"},"ScanResultSummary":{"properties":{"total_assets":{"type":"integer","minimum":0.0,"title":"Total Assets","default":0},"total_vulnerabilities":{"type":"integer","minimum":0.0,"title":"Total Vulnerabilities","default":0},"total_findings":{"type":"integer","minimum":0.0,"title":"Total Findings","default":0},"new_assets":{"type":"integer","minimum":0.0,"title":"New Assets","default":0},"new_vulnerabilities":{"type":"integer","minimum":0.0,"title":"New Vulnerabilities","default":0},"new_findings":{"type":"integer","minimum":0.0,"title":"New Findings","default":0}},"additionalProperties":false,"type":"object","title":"ScanResultSummary","description":"Per-scan totals shown in the completion email."},"ScanSchedule":{"properties":{"type":{"$ref":"#/components/schemas/ScanPeriod","description":"Schedule period"},"cron":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Cron","description":"Resolved cron expression"}},"type":"object","required":["type"],"title":"ScanSchedule","description":"Structured scan schedule — the chosen period plus its resolved cron.\n\nThe friendly ``type`` (daily/weekly/monthly/custom) is what the UI/API works\nin, while ``cron`` carries the concrete schedule expression. For period\nkeywords the server resolves ``cron`` (spread across the day per organisation\nto avoid load spikes); for ``custom`` the caller supplies it verbatim."},"ScanScheduleStatus":{"type":"string","enum":["pending","running","paused","successful","failed"],"title":"ScanScheduleStatus","description":"Scan schedule status enumeration."},"ScanStatus":{"type":"string","enum":["pending","running","successful","failed"],"title":"ScanStatus","description":"Scan instance status values."},"ScanUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Name"},"timestamp":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Timestamp"},"targets":{"anyOf":[{"items":{"type":"string","maxLength":253},"type":"array","maxItems":1000,"uniqueItems":true},{"type":"null"}],"title":"Targets"},"preset":{"anyOf":[{"additionalProperties":true,"type":"object"},{"$ref":"#/components/schemas/ScanPreset"},{"type":"null"}],"title":"Preset"},"workflow_name":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Workflow Name"},"run_mode":{"anyOf":[{"$ref":"#/components/schemas/RunMode"},{"type":"null"}]},"schedule":{"anyOf":[{"$ref":"#/components/schemas/ScanSchedule"},{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Schedule"},"last_run_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Run At"},"status":{"anyOf":[{"$ref":"#/components/schemas/ScanScheduleStatus"},{"type":"null"}]},"monitored_emails":{"anyOf":[{"items":{"type":"string","maxLength":254},"type":"array","maxItems":1000},{"type":"null"}],"title":"Monitored Emails","description":"Email addresses to check for breach exposure (identity scan only)"},"acknowledged":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Acknowledged"},"acknowledged_terms_version":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Acknowledged Terms Version"}},"type":"object","title":"ScanUpdate","description":"Model for updating an existing scan."},"ScanWithInstances":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"timestamp":{"type":"string","format":"date-time","title":"Timestamp"},"targets":{"anyOf":[{"items":{},"type":"array","uniqueItems":true},{"type":"null"}],"title":"Targets"},"preset":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Preset"},"instances":{"items":{"$ref":"#/components/schemas/ScanInstanceInfo"},"type":"array","title":"Instances","description":"Associated scan instances","default":[]}},"type":"object","required":["id","name","timestamp"],"title":"ScanWithInstances","description":"Scan with its associated instances."},"ScheduleRunInfo":{"properties":{"timestamp":{"type":"string","title":"Timestamp"},"workflow_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow Id"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},"type":"object","required":["timestamp"],"title":"ScheduleRunInfo","description":"Information about a schedule run."},"ScheduleScanStatusResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"schedule_id":{"type":"string","title":"Schedule Id"},"is_active":{"type":"boolean","title":"Is Active"},"recent_runs":{"items":{"$ref":"#/components/schemas/ScheduleRunInfo"},"type":"array","title":"Recent Runs"},"upcoming_runs":{"items":{"$ref":"#/components/schemas/ScheduleRunInfo"},"type":"array","title":"Upcoming Runs"},"next_run":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Run"},"cron_expression":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cron Expression"},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","required":["success","schedule_id","is_active","recent_runs","upcoming_runs"],"title":"ScheduleScanStatusResponse","description":"Response model for scheduled scan status operations."},"ScoreBatchApproveRequest":{"properties":{"framework_id":{"type":"string","maxLength":128,"minLength":1,"title":"Framework Id"},"assessment_id":{"type":"string","maxLength":24,"minLength":1,"title":"Assessment Id"},"proposal_ids":{"items":{"type":"string"},"type":"array","maxItems":25,"minItems":1,"title":"Proposal Ids"}},"type":"object","required":["framework_id","assessment_id","proposal_ids"],"title":"ScoreBatchApproveRequest"},"ScoreBatchProposeRequest":{"properties":{"framework_id":{"type":"string","maxLength":128,"minLength":1,"title":"Framework Id"},"assessment_id":{"type":"string","maxLength":24,"minLength":1,"title":"Assessment Id"},"ratings":{"items":{"$ref":"#/components/schemas/ScoreBatchRating"},"type":"array","maxItems":25,"minItems":1,"title":"Ratings"}},"type":"object","required":["framework_id","assessment_id","ratings"],"title":"ScoreBatchProposeRequest"},"ScoreBatchRating":{"properties":{"requirement_id":{"anyOf":[{"type":"string","maxLength":256},{"type":"null"}],"title":"Requirement Id"},"score":{"anyOf":[{"type":"string","maxLength":8},{"type":"null"}],"title":"Score"},"maturity_key":{"anyOf":[{"type":"string","maxLength":256},{"type":"null"}],"title":"Maturity Key"},"level":{"anyOf":[{"type":"integer","maximum":10.0,"minimum":1.0},{"type":"null"}],"title":"Level"}},"type":"object","title":"ScoreBatchRating","description":"One grid submission — a flat control (``requirement_id`` + ``score``) or a\nmaturity scale (``maturity_key`` + picked ``level``). Exactly one shape is set."},"ScoreChange":{"properties":{"date":{"type":"string","title":"Date"},"control_name":{"type":"string","title":"Control Name"},"title":{"type":"string","title":"Title"},"category":{"type":"string","title":"Category"},"previous":{"type":"number","title":"Previous"},"current":{"type":"number","title":"Current"},"delta":{"type":"number","title":"Delta"},"max":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max"},"direction":{"type":"string","title":"Direction"}},"type":"object","required":["date","control_name","title","category","previous","current","delta","direction"],"title":"ScoreChange","description":"A control's score moving between two consecutive days."},"ScoreValue":{"type":"string","enum":["0","1","2","n/a"],"title":"ScoreValue"},"SectionRef":{"properties":{"section_id":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Section Id"},"override":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Override"},"inline_title":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}],"title":"Inline Title"},"inline_body":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Inline Body"}},"type":"object","title":"SectionRef","description":"One entry in a document's ordered section list.\n\nEither a reference to a (shared or local) `document_section` — with an\noptional per-document `override` body that diverges without unsharing — or a\nfully inline section owned by the document."},"SecurePaginatedResponse_EventInfo_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/EventInfo"},"type":"array","title":"Items","description":"List of items for current page"},"total":{"type":"integer","minimum":0.0,"title":"Total","description":"Total number of items"},"page":{"type":"integer","minimum":1.0,"title":"Page","description":"Current page number"},"limit":{"type":"integer","minimum":1.0,"title":"Limit","description":"Items per page"},"has_next":{"type":"boolean","title":"Has Next","description":"Whether there are more pages"},"has_prev":{"type":"boolean","title":"Has Prev","description":"Whether there are previous pages"},"total_pages":{"type":"integer","title":"Total Pages","description":"Calculate total pages based on total and limit.","readOnly":true}},"type":"object","required":["items","total","page","limit","has_next","has_prev","total_pages"],"title":"SecurePaginatedResponse[EventInfo]"},"SecurePaginatedResponse_ScanInfoExtended_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ScanInfoExtended"},"type":"array","title":"Items","description":"List of items for current page"},"total":{"type":"integer","minimum":0.0,"title":"Total","description":"Total number of items"},"page":{"type":"integer","minimum":1.0,"title":"Page","description":"Current page number"},"limit":{"type":"integer","minimum":1.0,"title":"Limit","description":"Items per page"},"has_next":{"type":"boolean","title":"Has Next","description":"Whether there are more pages"},"has_prev":{"type":"boolean","title":"Has Prev","description":"Whether there are previous pages"},"total_pages":{"type":"integer","title":"Total Pages","description":"Calculate total pages based on total and limit.","readOnly":true}},"type":"object","required":["items","total","page","limit","has_next","has_prev","total_pages"],"title":"SecurePaginatedResponse[ScanInfoExtended]"},"SecurePaginatedResponse_ScanInstanceInfo_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ScanInstanceInfo"},"type":"array","title":"Items","description":"List of items for current page"},"total":{"type":"integer","minimum":0.0,"title":"Total","description":"Total number of items"},"page":{"type":"integer","minimum":1.0,"title":"Page","description":"Current page number"},"limit":{"type":"integer","minimum":1.0,"title":"Limit","description":"Items per page"},"has_next":{"type":"boolean","title":"Has Next","description":"Whether there are more pages"},"has_prev":{"type":"boolean","title":"Has Prev","description":"Whether there are previous pages"},"total_pages":{"type":"integer","title":"Total Pages","description":"Calculate total pages based on total and limit.","readOnly":true}},"type":"object","required":["items","total","page","limit","has_next","has_prev","total_pages"],"title":"SecurePaginatedResponse[ScanInstanceInfo]"},"SecurePaginatedResponse_ScanInstanceWithScan_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ScanInstanceWithScan"},"type":"array","title":"Items","description":"List of items for current page"},"total":{"type":"integer","minimum":0.0,"title":"Total","description":"Total number of items"},"page":{"type":"integer","minimum":1.0,"title":"Page","description":"Current page number"},"limit":{"type":"integer","minimum":1.0,"title":"Limit","description":"Items per page"},"has_next":{"type":"boolean","title":"Has Next","description":"Whether there are more pages"},"has_prev":{"type":"boolean","title":"Has Prev","description":"Whether there are previous pages"},"total_pages":{"type":"integer","title":"Total Pages","description":"Calculate total pages based on total and limit.","readOnly":true}},"type":"object","required":["items","total","page","limit","has_next","has_prev","total_pages"],"title":"SecurePaginatedResponse[ScanInstanceWithScan]"},"SecurePaginatedResponse_VulnerabilityInfo_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/VulnerabilityInfo"},"type":"array","title":"Items","description":"List of items for current page"},"total":{"type":"integer","minimum":0.0,"title":"Total","description":"Total number of items"},"page":{"type":"integer","minimum":1.0,"title":"Page","description":"Current page number"},"limit":{"type":"integer","minimum":1.0,"title":"Limit","description":"Items per page"},"has_next":{"type":"boolean","title":"Has Next","description":"Whether there are more pages"},"has_prev":{"type":"boolean","title":"Has Prev","description":"Whether there are previous pages"},"total_pages":{"type":"integer","title":"Total Pages","description":"Calculate total pages based on total and limit.","readOnly":true}},"type":"object","required":["items","total","page","limit","has_next","has_prev","total_pages"],"title":"SecurePaginatedResponse[VulnerabilityInfo]"},"SecureScore":{"properties":{"current":{"type":"number","title":"Current"},"max":{"type":"number","title":"Max"},"percentage":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Percentage"}},"type":"object","required":["current","max"],"title":"SecureScore"},"SecureScoreResponse":{"properties":{"current":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Current"},"max":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max"},"percentage":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Percentage"},"delta_percentage":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Delta Percentage"},"collected_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Collected At"},"days":{"type":"integer","title":"Days","default":30},"trend":{"items":{"$ref":"#/components/schemas/TrendPoint"},"type":"array","title":"Trend"},"categories":{"items":{"$ref":"#/components/schemas/CategoryScore"},"type":"array","title":"Categories"},"changes":{"items":{"$ref":"#/components/schemas/ScoreChange"},"type":"array","title":"Changes"},"changes_total":{"type":"integer","title":"Changes Total","default":0},"actions":{"$ref":"#/components/schemas/ActionCounts"},"top_recommended":{"items":{"$ref":"#/components/schemas/RecommendedAction"},"type":"array","title":"Top Recommended"},"comparative_percentage":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Comparative Percentage"}},"type":"object","title":"SecureScoreResponse","description":"Everything the Secure Score tab renders."},"SourceMode":{"type":"string","enum":["authored","external_link","attachment"],"title":"SourceMode","description":"Where a policy's content lives.\n\n`authored` — composed from sections in-app (the default). `external_link` —\nthe canonical copy lives elsewhere (e.g. an intranet), we track metadata + a\nURL. `attachment` — an uploaded file, referenced via the evidence pipeline."},"StandardTag":{"properties":{"flag":{"type":"string","maxLength":128,"title":"Flag"},"label":{"type":"string","maxLength":128,"title":"Label"}},"type":"object","required":["flag","label"],"title":"StandardTag","description":"An applicable-standard tag: `label` shows when its `flag` variable is on.\n\nCarried from the migrated templates' front-matter (e.g. `needStandardHIPAA` →\n`HIPAA`); the org's enabled-standard variables decide which apply."},"SubscriptionLevel":{"type":"string","enum":["free","starter","essentials","complete","enterprise"],"title":"SubscriptionLevel","description":"Enumeration of available subscription levels."},"SubscriptionStatus":{"properties":{"is_subscribed":{"type":"boolean","title":"Is Subscribed"},"plan":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan"},"status":{"type":"string","title":"Status"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"features":{"additionalProperties":true,"type":"object","title":"Features"}},"type":"object","required":["is_subscribed","status","features"],"title":"SubscriptionStatus","description":"Simple subscription status response."},"SyncResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"scan_id":{"type":"string","title":"Scan Id"},"assets_created":{"type":"integer","title":"Assets Created"},"event_types_processed":{"type":"integer","title":"Event Types Processed"},"message":{"type":"string","title":"Message"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["success","scan_id","assets_created","event_types_processed","message"],"title":"SyncResponse","description":"Response model for scan synchronization."},"SyncStartedResponse":{"properties":{"workflow_id":{"type":"string","title":"Workflow Id"}},"type":"object","required":["workflow_id"],"title":"SyncStartedResponse"},"SyncStatus":{"type":"string","enum":["idle","running","ok","error"],"title":"SyncStatus","description":"Outcome of the most recent sync run."},"TagsResponse":{"properties":{"tags":{"items":{"type":"string"},"type":"array","title":"Tags","description":"Current tags for the vulnerability"}},"type":"object","required":["tags"],"title":"TagsResponse","description":"Response model for tag operations."},"TrendPoint":{"properties":{"date":{"type":"string","title":"Date"},"current":{"type":"number","title":"Current"},"max":{"type":"number","title":"Max"},"percentage":{"type":"number","title":"Percentage"}},"type":"object","required":["date","current","max","percentage"],"title":"TrendPoint","description":"One day of the score series."},"TriageRequest":{"properties":{"resolved":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Resolved","description":"Mark the exposure resolved"},"resolution_notes":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Resolution Notes","description":"Triage notes"}},"type":"object","title":"TriageRequest"},"TriggerScanRequest":{"properties":{"isSavedToAsset":{"type":"boolean","title":"Issavedtoasset","description":"Whether to convert events to assets after scan completion","default":false},"isForceCreateNewInstance":{"type":"boolean","title":"Isforcecreatenewinstance","description":"If True (default), each trigger creates a new scan_instance so the instances page reflects a full execution history. Pass False to reuse the most recent instance (refresh timestamps only) — useful for callers that intentionally want to coalesce runs.","default":true}},"type":"object","title":"TriggerScanRequest","description":"Request model for trigger scan operations."},"TriggerScanResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"scan_instance_id":{"type":"string","title":"Scan Instance Id"},"workflow_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workflow Id"},"message":{"type":"string","title":"Message"},"details":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Details"}},"type":"object","required":["success","scan_instance_id","message"],"title":"TriggerScanResponse","description":"Response model for trigger scan operations."},"UpdateSubscriptionRequest":{"properties":{"stripe_subscription_id":{"type":"string","title":"Stripe Subscription Id"},"stripe_customer_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Customer Id"}},"type":"object","required":["stripe_subscription_id"],"title":"UpdateSubscriptionRequest","description":"Request to manually update subscription IDs."},"UsageEntry":{"properties":{"resource":{"type":"string","title":"Resource"},"used":{"type":"integer","title":"Used"},"cap":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cap"},"unit":{"type":"string","enum":["count","bytes"],"title":"Unit","default":"count"}},"type":"object","required":["resource","used"],"title":"UsageEntry","description":"One tier resource's live usage vs its cap (``cap = null`` → unlimited)."},"UsageSummary":{"properties":{"tier":{"type":"string","title":"Tier"},"resources":{"items":{"$ref":"#/components/schemas/UsageEntry"},"type":"array","title":"Resources"}},"type":"object","required":["tier","resources"],"title":"UsageSummary"},"UserBase":{"properties":{"created_at":{"type":"string","format":"date-time","title":"Created At","description":"Creation timestamp"},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"Last update timestamp"},"auth_user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Auth User Id"},"email":{"type":"string","format":"email","title":"Email"},"sendCode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sendcode"},"username":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Username"},"family_name":{"type":"string","maxLength":255,"title":"Family Name"},"given_name":{"type":"string","maxLength":255,"title":"Given Name"},"preferredLanguage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preferredlanguage","default":"en"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Password"},"passwordChangeRequired":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Passwordchangerequired","default":false},"auth_org_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Auth Org Id"},"roles":{"anyOf":[{"items":{"$ref":"#/components/schemas/ProjectRoleInfo"},"type":"array"},{"type":"null"}],"title":"Roles"},"role_type":{"anyOf":[{"$ref":"#/components/schemas/RoleType"},{"type":"null"}]},"url_template":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url Template"},"is_main":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Main"},"status":{"type":"string","enum":["active","inactive","suspended","pending"],"title":"Status","description":"User account status","default":"inactive"},"is_deleted":{"type":"boolean","title":"Is Deleted","description":"Soft delete flag","default":false},"deleted_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Deleted By","description":"User who deleted this user (record id; authoritative for audit)"},"deleted_by_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Deleted By Email","description":"Resolved email of the actor in `deleted_by`; populated at list-time only"},"deleted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Deleted At","description":"Deletion timestamp"},"deleted_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Deleted Reason","description":"Reason for deletion"},"terms_accepted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Terms Accepted At","description":"Timestamp when the user accepted the Terms of Service / Privacy Policy"},"terms_version":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Terms Version","description":"Version identifier of the Terms accepted"},"privacy_version":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Privacy Version","description":"Version identifier of the Privacy Policy accepted"},"project_role_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Project Role Ids"}},"type":"object","required":["email","family_name","given_name"],"title":"UserBase"},"UserDeleteRequest":{"properties":{"reason":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Reason","description":"Free-form reason recorded in `deleted_reason` and the audit log"}},"type":"object","title":"UserDeleteRequest","description":"Optional request body for deleting a user, carrying the soft-delete reason."},"UserEmailInvitationRequest":{"properties":{"url_template":{"type":"string","title":"Url Template"}},"type":"object","required":["url_template"],"title":"UserEmailInvitationRequest"},"UserGrantRequest":{"properties":{"project_role_ids":{"items":{"type":"string"},"type":"array","title":"Project Role Ids"},"grant_user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Grant User Id"}},"type":"object","required":["project_role_ids"],"title":"UserGrantRequest"},"UserInfo":{"properties":{"created_at":{"type":"string","format":"date-time","title":"Created At","description":"Creation timestamp"},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"Last update timestamp"},"auth_user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Auth User Id"},"email":{"type":"string","format":"email","title":"Email"},"sendCode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sendcode"},"username":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Username"},"family_name":{"type":"string","maxLength":255,"title":"Family Name"},"given_name":{"type":"string","maxLength":255,"title":"Given Name"},"preferredLanguage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preferredlanguage","default":"en"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Password"},"passwordChangeRequired":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Passwordchangerequired","default":false},"auth_org_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Auth Org Id"},"roles":{"anyOf":[{"items":{"$ref":"#/components/schemas/ProjectRoleInfo"},"type":"array"},{"type":"null"}],"title":"Roles"},"role_type":{"anyOf":[{"$ref":"#/components/schemas/RoleType"},{"type":"null"}]},"url_template":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url Template"},"is_main":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Main"},"status":{"type":"string","enum":["active","inactive","suspended","pending"],"title":"Status","description":"User account status","default":"inactive"},"is_deleted":{"type":"boolean","title":"Is Deleted","description":"Soft delete flag","default":false},"deleted_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Deleted By","description":"User who deleted this user (record id; authoritative for audit)"},"deleted_by_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Deleted By Email","description":"Resolved email of the actor in `deleted_by`; populated at list-time only"},"deleted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Deleted At","description":"Deletion timestamp"},"deleted_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Deleted Reason","description":"Reason for deletion"},"terms_accepted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Terms Accepted At","description":"Timestamp when the user accepted the Terms of Service / Privacy Policy"},"terms_version":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Terms Version","description":"Version identifier of the Terms accepted"},"privacy_version":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Privacy Version","description":"Version identifier of the Privacy Policy accepted"},"id":{"type":"string","title":"Id"}},"type":"object","required":["email","family_name","given_name","id"],"title":"UserInfo"},"UserRoleResponse":{"properties":{"user_id":{"type":"string","title":"User Id"},"org_id":{"type":"string","title":"Org Id"},"project_id":{"type":"string","title":"Project Id"},"roles":{"items":{"type":"string"},"type":"array","title":"Roles"}},"type":"object","required":["user_id","org_id","project_id","roles"],"title":"UserRoleResponse"},"UserUpdateWithRoles":{"properties":{"email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Email"},"sendCode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sendcode"},"username":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Username"},"family_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Family Name"},"given_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Given Name"},"preferredLanguage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preferredlanguage"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"passwordChangeRequired":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Passwordchangerequired"},"status":{"anyOf":[{"type":"string","enum":["active","inactive","suspended","pending"]},{"type":"null"}],"title":"Status"},"roles":{"anyOf":[{"items":{"$ref":"#/components/schemas/ProjectRoleInfo"},"type":"array"},{"type":"null"}],"title":"Roles"}},"type":"object","title":"UserUpdateWithRoles","description":"User update model that includes roles for API endpoints."},"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"},"VulnerabilityCreate":{"properties":{"cve_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cve Id","description":"CVE identifier (auto-generated if not provided)"},"cvss_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cvss Score","description":"CVSS score"},"cvss_vector":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cvss Vector","description":"CVSS vector string"},"cwe_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cwe Id","description":"CWE identifier"},"description":{"type":"string","title":"Description","description":"Vulnerability description"},"event_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event Id","description":"Associated event ID"},"exploit_available":{"type":"boolean","title":"Exploit Available","description":"Whether exploit is available","default":false},"exploit_in_wild":{"type":"boolean","title":"Exploit In Wild","description":"Whether exploit is in the wild","default":false},"name":{"type":"string","title":"Name","description":"Vulnerability name"},"patch_available":{"type":"boolean","title":"Patch Available","description":"Whether patch is available","default":false},"published_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Published Date","description":"Publication date"},"severity":{"type":"string","title":"Severity","description":"Vulnerability severity"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","description":"Tags associated with the vulnerability"},"references":{"items":{"type":"string"},"type":"array","title":"References","description":"Reference URLs (OCSF aligned)"},"recommendation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Recommendation","description":"Generic remediation guidance (can be copied to findings)"},"asset_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asset Id","description":"Optional asset ID to link to this vulnerability"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source","description":"Ingest origin (e.g. scan, defender, tenable)"}},"type":"object","required":["description","name","severity"],"title":"VulnerabilityCreate","description":"Model for creating a new vulnerability."},"VulnerabilityImportResponse":{"properties":{"created":{"type":"integer","title":"Created","description":"New vulnerabilities created","default":0},"updated":{"type":"integer","title":"Updated","description":"Existing vulnerabilities updated","default":0},"skipped":{"type":"integer","title":"Skipped","description":"Duplicates skipped","default":0},"failed":{"type":"integer","title":"Failed","description":"Entries that failed validation","default":0},"errors":{"items":{"type":"string"},"type":"array","title":"Errors","description":"Error messages"},"total_processed":{"type":"integer","title":"Total Processed","description":"Total entries processed","default":0}},"type":"object","title":"VulnerabilityImportResponse","description":"Response model for vulnerability import."},"VulnerabilityInfo":{"properties":{"id":{"type":"string","title":"Id"},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"Creation timestamp"},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"Last update timestamp"},"cve_id":{"type":"string","title":"Cve Id","description":"CVE identifier"},"cvss_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cvss Score","description":"CVSS score"},"cvss_vector":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cvss Vector","description":"CVSS vector string"},"cwe_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cwe Id","description":"CWE identifier"},"description":{"type":"string","title":"Description","description":"Vulnerability description"},"event_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event Id","description":"Associated event ID"},"exploit_available":{"type":"boolean","title":"Exploit Available","description":"Whether exploit is available","default":false},"exploit_in_wild":{"type":"boolean","title":"Exploit In Wild","description":"Whether exploit is in the wild","default":false},"name":{"type":"string","title":"Name","description":"Vulnerability name"},"patch_available":{"type":"boolean","title":"Patch Available","description":"Whether patch is available","default":false},"published_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Published Date","description":"Publication date"},"severity":{"type":"string","title":"Severity","description":"Vulnerability severity"},"severity_overridden":{"type":"boolean","title":"Severity Overridden","description":"True when severity was set manually; the scanner preserves it across re-scans","default":false},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","description":"Tags associated with the vulnerability"},"references":{"items":{"type":"string"},"type":"array","title":"References","description":"Reference URLs (OCSF aligned)"},"recommendation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Recommendation","description":"Generic remediation guidance (can be copied to findings)"},"epss_score":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Epss Score","description":"EPSS exploit probability (0–1)"},"epss_percentile":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Epss Percentile","description":"EPSS percentile (0–1)"},"kev":{"type":"boolean","title":"Kev","description":"Listed in the CISA Known Exploited Vulnerabilities catalog","default":false},"kev_date_added":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kev Date Added","description":"Date the CVE was added to KEV"},"kev_due_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kev Due Date","description":"KEV remediation due date"},"kev_ransomware":{"type":"boolean","title":"Kev Ransomware","description":"Known use in ransomware campaigns","default":false},"exposed_count":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Exposed Count","description":"Number of exposed assets affected by this vulnerability"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source","description":"Ingest origin (e.g. scan, defender, tenable)"}},"type":"object","required":["id","cve_id","description","name","severity"],"title":"VulnerabilityInfo","description":"Model for vulnerability information with ID and timestamps."},"VulnerabilityReportRequest":{"properties":{"format":{"type":"string","enum":["csv","pdf","json"],"title":"Format","description":"Report format: csv, pdf, or json"},"severity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Severity","description":"Filter by severity level"},"cve_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cve Id","description":"Filter by CVE ID"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"Filter by vulnerability name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Search in description"},"exploit_available":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Exploit Available","description":"Filter by exploit availability"},"patch_available":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Patch Available","description":"Filter by patch availability"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags","description":"Filter by tags"}},"type":"object","required":["format"],"title":"VulnerabilityReportRequest","description":"Request model for vulnerability report generation."},"VulnerabilityTriageRequest":{"properties":{"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status","description":"Finding status to apply. One of: open, in_progress, suppressed, resolved, accepted, false_positive, archived"},"severity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Severity","description":"Severity to apply to every related finding (info/low/medium/high/critical)"},"triage_reason":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Triage Reason","description":"Required when moving findings into accepted/false_positive/suppressed"},"suppress_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Suppress Until","description":"Time-bound suppression expiry (only honoured for suppressed/accepted)"}},"type":"object","title":"VulnerabilityTriageRequest","description":"Verdict and/or severity to apply to a vulnerability's findings.\n\nAt least one of `status` or `severity` must be supplied."},"VulnerabilityTriageResponse":{"properties":{"vulnerability_id":{"type":"string","title":"Vulnerability Id"},"successful":{"items":{"type":"string"},"type":"array","title":"Successful"},"failed":{"items":{"type":"string"},"type":"array","title":"Failed"},"total_processed":{"type":"integer","title":"Total Processed"},"errors":{"items":{"type":"string"},"type":"array","title":"Errors"}},"type":"object","required":["vulnerability_id","total_processed"],"title":"VulnerabilityTriageResponse","description":"Outcome of a vulnerability triage — which findings were updated and which failed."},"VulnerabilityUpdate":{"properties":{"cve_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cve Id","description":"CVE identifier"},"cvss_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cvss Score","description":"CVSS score"},"cvss_vector":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cvss Vector","description":"CVSS vector string"},"cwe_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cwe Id","description":"CWE identifier"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Vulnerability description"},"event_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event Id","description":"Associated event ID"},"exploit_available":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Exploit Available","description":"Whether exploit is available"},"exploit_in_wild":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Exploit In Wild","description":"Whether exploit is in the wild"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"Vulnerability name"},"patch_available":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Patch Available","description":"Whether patch is available"},"published_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Published Date","description":"Publication date"},"severity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Severity","description":"Vulnerability severity"},"severity_overridden":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Severity Overridden","description":"Mark severity as manually overridden (sticky across re-scans)"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags","description":"Tags associated with the vulnerability"},"references":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"References","description":"Reference URLs (OCSF aligned)"},"recommendation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Recommendation","description":"Generic remediation guidance"}},"type":"object","title":"VulnerabilityUpdate","description":"Model for updating an existing vulnerability."},"WastedAllocation":{"properties":{"user_id":{"type":"string","title":"User Id"},"user_principal_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Principal Name"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"licence_count":{"type":"integer","title":"Licence Count","default":0},"reason":{"type":"string","title":"Reason"},"last_sign_in":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Sign In"}},"type":"object","required":["user_id","reason"],"title":"WastedAllocation","description":"A licensed account that probably should not be consuming a seat."},"app__routers__asset_router__TagAddRequest":{"properties":{"tag":{"type":"string","title":"Tag","description":"Tag to add to the asset"}},"type":"object","required":["tag"],"title":"TagAddRequest"},"app__routers__asset_router__TagsReplaceRequest":{"properties":{"tags":{"items":{"type":"string"},"type":"array","title":"Tags","description":"New list of tags for the asset"}},"type":"object","required":["tags"],"title":"TagsReplaceRequest"},"app__routers__finding_router__TagsReplaceRequest":{"properties":{"tags":{"items":{"type":"string"},"type":"array","title":"Tags","description":"New list of tags for the finding"}},"type":"object","required":["tags"],"title":"TagsReplaceRequest","description":"Request model for replacing all tags on a finding."},"app__routers__generic_entity_router__TagAddRequest":{"properties":{"tag":{"type":"string","title":"Tag","description":"Tag to add to the entity"}},"type":"object","required":["tag"],"title":"TagAddRequest"},"app__routers__generic_entity_router__TagsReplaceRequest":{"properties":{"tags":{"items":{"type":"string"},"type":"array","title":"Tags","description":"New list of tags for the entity"}},"type":"object","required":["tags"],"title":"TagsReplaceRequest"},"app__routers__vulnerability_router__TagAddRequest":{"properties":{"tag":{"type":"string","title":"Tag","description":"Tag to add to the vulnerability"}},"type":"object","required":["tag"],"title":"TagAddRequest","description":"Request model for adding a single tag."},"app__routers__vulnerability_router__TagsReplaceRequest":{"properties":{"tags":{"items":{"type":"string"},"type":"array","title":"Tags","description":"New list of tags for the vulnerability"}},"type":"object","required":["tags"],"title":"TagsReplaceRequest","description":"Request model for replacing all tags."}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}}}