{"openapi":"3.0.3","info":{"title":"DefectDojo API v2","version":"3.1.100","description":"DefectDojo - Open Source vulnerability Management made easy. Prefetch related parameters/responses not yet in the schema."},"paths":{"/api/v2/announcements/":{"get":{"operationId":"announcements_list","parameters":[{"in":"query","name":"dismissable","schema":{"type":"boolean"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"message","schema":{"type":"string"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"style","schema":{"type":"string","x-spec-enum-id":"6f65abe0aab2c78c","enum":["danger","info","success","warning"]},"description":"The style of banner to display. (info, success, warning, danger)\n\n* `info` - Info\n* `success` - Success\n* `warning` - Warning\n* `danger` - Danger"}],"tags":["announcements"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedAnnouncementList"}}},"description":""}}},"post":{"operationId":"announcements_create","tags":["announcements"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnnouncementRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/AnnouncementRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/AnnouncementRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Announcement"}}},"description":""}}}},"/api/v2/announcements/{id}/":{"get":{"operationId":"announcements_retrieve","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this announcement.","required":true}],"tags":["announcements"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Announcement"}}},"description":""}}},"put":{"operationId":"announcements_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this announcement.","required":true}],"tags":["announcements"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnnouncementRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/AnnouncementRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/AnnouncementRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Announcement"}}},"description":""}}},"patch":{"operationId":"announcements_partial_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this announcement.","required":true}],"tags":["announcements"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedAnnouncementRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedAnnouncementRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedAnnouncementRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Announcement"}}},"description":""}}},"delete":{"operationId":"announcements_destroy","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this announcement.","required":true}],"tags":["announcements"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/announcements/{id}/delete_preview/":{"get":{"operationId":"announcements_delete_preview_list","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this announcement.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["announcements"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/answered_surveys/":{"get":{"operationId":"answered_surveys_list","parameters":[{"in":"query","name":"answered_on_after","schema":{"type":"string","format":"date"}},{"in":"query","name":"answered_on_before","schema":{"type":"string","format":"date"}},{"in":"query","name":"answered_on_during","schema":{"type":"string"}},{"in":"query","name":"answered_on_on","schema":{"type":"string"}},{"in":"query","name":"answered_on_past_days","schema":{"type":"number"}},{"in":"query","name":"exclude_id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"id_equals","schema":{"type":"integer"}},{"in":"query","name":"id_greater_than","schema":{"type":"integer"}},{"in":"query","name":"id_greater_than_equal_to","schema":{"type":"integer"}},{"in":"query","name":"id_in","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"id_less_than","schema":{"type":"integer"}},{"in":"query","name":"id_less_than_equal_to","schema":{"type":"integer"}},{"in":"query","name":"id_not_equals","schema":{"type":"integer"}},{"in":"query","name":"id_not_in","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-answered_on","-id","-responder","-survey","answered_on","id","responder","survey"]}},"description":"Ordering\n\n* `id` - Id\n* `-id` - Id (descending)\n* `survey` - Survey\n* `-survey` - Survey (descending)\n* `responder` - Responder\n* `-responder` - Responder (descending)\n* `answered_on` - Answered on\n* `-answered_on` - Answered on (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["assignee","engagement","responder"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"responder","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"search","schema":{"type":"string"},"description":"Search Across: responder__username, responder__first_name, responder__last_name, answered_on"},{"in":"query","name":"survey","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"}],"tags":["answered_surveys"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedProAnsweredSurveyList"}}},"description":""}}}},"/api/v2/answered_surveys/{id}/":{"get":{"operationId":"answered_surveys_retrieve","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Answered Engagement Survey.","required":true},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["assignee","engagement","responder"]}},"description":"List of fields for which to prefetch model instances and add those to the response"}],"tags":["answered_surveys"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProAnsweredSurvey"}}},"description":""}}}},"/api/v2/answered_surveys/{id}/history/":{"get":{"operationId":"answered_surveys_history_list","description":"Get audit log entries for an object with pagination.\n\nUses DojoEvents.objects.tracks(obj) to get events for the object itself,\nand DojoEvents.objects.references(obj) to get events for related objects\n(objects with foreign keys pointing to this object). Supports pagination, filtering, and sorting.\nAvailable at both /api/v2/ and /api/vue/ endpoints.\n\nArgs:\n    field_filter: Optional field name to filter by (e.g., \"finding_enrichment_settings\").\n                Only entries with changes to this field will be returned.","parameters":[{"in":"query","name":"answered_on_after","schema":{"type":"string","format":"date"}},{"in":"query","name":"answered_on_before","schema":{"type":"string","format":"date"}},{"in":"query","name":"answered_on_during","schema":{"type":"string"}},{"in":"query","name":"answered_on_on","schema":{"type":"string"}},{"in":"query","name":"answered_on_past_days","schema":{"type":"number"}},{"in":"query","name":"exclude_id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Answered Engagement Survey.","required":true},{"in":"query","name":"id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"id_equals","schema":{"type":"integer"}},{"in":"query","name":"id_greater_than","schema":{"type":"integer"}},{"in":"query","name":"id_greater_than_equal_to","schema":{"type":"integer"}},{"in":"query","name":"id_in","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"id_less_than","schema":{"type":"integer"}},{"in":"query","name":"id_less_than_equal_to","schema":{"type":"integer"}},{"in":"query","name":"id_not_equals","schema":{"type":"integer"}},{"in":"query","name":"id_not_in","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-answered_on","-id","-responder","-survey","answered_on","id","responder","survey"]}},"description":"Ordering\n\n* `id` - Id\n* `-id` - Id (descending)\n* `survey` - Survey\n* `-survey` - Survey (descending)\n* `responder` - Responder\n* `-responder` - Responder (descending)\n* `answered_on` - Answered on\n* `-answered_on` - Answered on (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"responder","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"search","schema":{"type":"string"},"description":"Search Across: responder__username, responder__first_name, responder__last_name, answered_on"},{"in":"query","name":"survey","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"}],"tags":["answered_surveys"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedAuditLogList"}}},"description":""}}}},"/api/v2/answered_surveys/{id}/history/legacy/":{"get":{"operationId":"answered_surveys_history_legacy_list","description":"Get legacy audit log for an object (django-auditlog entries) with pagination.\n\nSupports pagination, filtering, and sorting.\nAvailable at both /api/v2/ and /api/vue/ endpoints.","parameters":[{"in":"query","name":"answered_on_after","schema":{"type":"string","format":"date"}},{"in":"query","name":"answered_on_before","schema":{"type":"string","format":"date"}},{"in":"query","name":"answered_on_during","schema":{"type":"string"}},{"in":"query","name":"answered_on_on","schema":{"type":"string"}},{"in":"query","name":"answered_on_past_days","schema":{"type":"number"}},{"in":"query","name":"exclude_id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Answered Engagement Survey.","required":true},{"in":"query","name":"id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"id_equals","schema":{"type":"integer"}},{"in":"query","name":"id_greater_than","schema":{"type":"integer"}},{"in":"query","name":"id_greater_than_equal_to","schema":{"type":"integer"}},{"in":"query","name":"id_in","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"id_less_than","schema":{"type":"integer"}},{"in":"query","name":"id_less_than_equal_to","schema":{"type":"integer"}},{"in":"query","name":"id_not_equals","schema":{"type":"integer"}},{"in":"query","name":"id_not_in","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-answered_on","-id","-responder","-survey","answered_on","id","responder","survey"]}},"description":"Ordering\n\n* `id` - Id\n* `-id` - Id (descending)\n* `survey` - Survey\n* `-survey` - Survey (descending)\n* `responder` - Responder\n* `-responder` - Responder (descending)\n* `answered_on` - Answered on\n* `-answered_on` - Answered on (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"responder","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"search","schema":{"type":"string"},"description":"Search Across: responder__username, responder__first_name, responder__last_name, answered_on"},{"in":"query","name":"survey","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"}],"tags":["answered_surveys"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedLegacyAuditLogList"}}},"description":""}}}},"/api/v2/answered_surveys/{id}/history/legacy/count/":{"get":{"operationId":"answered_surveys_history_legacy_count_retrieve","description":"Get the total count of legacy audit log entries for an object.\n\nApplies the same filters as history_legacy (date filter, LegacyAuditLogFilter)\nto ensure the count matches what users will see when viewing the legacy history page.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Answered Engagement Survey.","required":true}],"tags":["answered_surveys"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"integer"}}}}},"description":""}}}},"/api/v2/api-token-auth/":{"post":{"operationId":"api_token_auth_create","tags":["api-token-auth"],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/MFAAuthTokenRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/MFAAuthTokenRequest"}},"application/json":{"schema":{"$ref":"#/components/schemas/MFAAuthTokenRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MFAAuthToken"}}},"description":""}}}},"/api/v2/asset_api_scan_configurations/":{"get":{"operationId":"asset_api_scan_configurations_list","parameters":[{"in":"query","name":"asset","schema":{"type":"integer"}},{"in":"query","name":"id","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["product","tool_configuration"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"service_key_1","schema":{"type":"string"}},{"in":"query","name":"service_key_2","schema":{"type":"string"}},{"in":"query","name":"service_key_3","schema":{"type":"string"}},{"in":"query","name":"tool_configuration","schema":{"type":"integer"}}],"tags":["asset_api_scan_configurations"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedAssetAPIScanConfigurationList"}}},"description":""}}},"post":{"operationId":"asset_api_scan_configurations_create","tags":["asset_api_scan_configurations"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetAPIScanConfigurationRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/AssetAPIScanConfigurationRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/AssetAPIScanConfigurationRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetAPIScanConfiguration"}}},"description":""}}}},"/api/v2/asset_api_scan_configurations/{id}/":{"get":{"operationId":"asset_api_scan_configurations_retrieve","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ap i_ scan_ configuration.","required":true},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["product","tool_configuration"]}},"description":"List of fields for which to prefetch model instances and add those to the response"}],"tags":["asset_api_scan_configurations"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetAPIScanConfiguration"}}},"description":""}}},"put":{"operationId":"asset_api_scan_configurations_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ap i_ scan_ configuration.","required":true}],"tags":["asset_api_scan_configurations"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetAPIScanConfigurationRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/AssetAPIScanConfigurationRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/AssetAPIScanConfigurationRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetAPIScanConfiguration"}}},"description":""}}},"patch":{"operationId":"asset_api_scan_configurations_partial_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ap i_ scan_ configuration.","required":true}],"tags":["asset_api_scan_configurations"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedAssetAPIScanConfigurationRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedAssetAPIScanConfigurationRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedAssetAPIScanConfigurationRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetAPIScanConfiguration"}}},"description":""}}},"delete":{"operationId":"asset_api_scan_configurations_destroy","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ap i_ scan_ configuration.","required":true}],"tags":["asset_api_scan_configurations"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/asset_api_scan_configurations/{id}/delete_preview/":{"get":{"operationId":"asset_api_scan_configurations_delete_preview_list","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ap i_ scan_ configuration.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["asset_api_scan_configurations"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/asset_groups/":{"get":{"operationId":"asset_groups_list","description":"``list()``/``retrieve()`` mirroring the OS prefetch mixins but using\n:class:`~pro.api_helpers.prefetcher.ProPrefetcher`, so prefetch can resolve\nserializers for Pro-owned FK targets (``Role``, ``Dojo_Group``).\n\nThe OS mixins hardcode ``_Prefetcher()`` with no override seam, and\n``open_source/`` is gitignored (rebuilt by ``build.sh``) so we can't add one\nthere. The two method bodies below are copied verbatim from\n``dojo/api_v2/prefetch/mixins.py`` — the only change is the prefetcher class —\nand must be kept in sync with it.\n\nThis is a plain mixin (it does not re-inherit ``PrefetchListMixin`` /\n``PrefetchRetrieveMixin`` — that would clash with the same bases reached via\n``PrefetchDojoModelViewSet`` and break C3 MRO). Place it *before*\n``PrefetchDojoModelViewSet`` in a viewset's bases so these methods win.","parameters":[{"in":"query","name":"asset_id","schema":{"type":"integer"}},{"in":"query","name":"group","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"group_id","schema":{"type":"integer"}},{"in":"query","name":"id","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["product"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"product_id","schema":{"type":"integer"}},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"},{"in":"query","name":"role","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"search","schema":{"type":"string"}}],"tags":["asset_groups"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedEnhancedProductGroupList"}}},"description":""}}},"post":{"operationId":"asset_groups_create","description":"``list()``/``retrieve()`` mirroring the OS prefetch mixins but using\n:class:`~pro.api_helpers.prefetcher.ProPrefetcher`, so prefetch can resolve\nserializers for Pro-owned FK targets (``Role``, ``Dojo_Group``).\n\nThe OS mixins hardcode ``_Prefetcher()`` with no override seam, and\n``open_source/`` is gitignored (rebuilt by ``build.sh``) so we can't add one\nthere. The two method bodies below are copied verbatim from\n``dojo/api_v2/prefetch/mixins.py`` — the only change is the prefetcher class —\nand must be kept in sync with it.\n\nThis is a plain mixin (it does not re-inherit ``PrefetchListMixin`` /\n``PrefetchRetrieveMixin`` — that would clash with the same bases reached via\n``PrefetchDojoModelViewSet`` and break C3 MRO). Place it *before*\n``PrefetchDojoModelViewSet`` in a viewset's bases so these methods win.","tags":["asset_groups"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedProductGroupRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/EnhancedProductGroupRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/EnhancedProductGroupRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedProductGroup"}}},"description":""}}}},"/api/v2/asset_groups/{id}/":{"get":{"operationId":"asset_groups_retrieve","description":"``list()``/``retrieve()`` mirroring the OS prefetch mixins but using\n:class:`~pro.api_helpers.prefetcher.ProPrefetcher`, so prefetch can resolve\nserializers for Pro-owned FK targets (``Role``, ``Dojo_Group``).\n\nThe OS mixins hardcode ``_Prefetcher()`` with no override seam, and\n``open_source/`` is gitignored (rebuilt by ``build.sh``) so we can't add one\nthere. The two method bodies below are copied verbatim from\n``dojo/api_v2/prefetch/mixins.py`` — the only change is the prefetcher class —\nand must be kept in sync with it.\n\nThis is a plain mixin (it does not re-inherit ``PrefetchListMixin`` /\n``PrefetchRetrieveMixin`` — that would clash with the same bases reached via\n``PrefetchDojoModelViewSet`` and break C3 MRO). Place it *before*\n``PrefetchDojoModelViewSet`` in a viewset's bases so these methods win.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ group.","required":true},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["product"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"}],"tags":["asset_groups"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedProductGroup"}}},"description":""}}},"put":{"operationId":"asset_groups_update","description":"``list()``/``retrieve()`` mirroring the OS prefetch mixins but using\n:class:`~pro.api_helpers.prefetcher.ProPrefetcher`, so prefetch can resolve\nserializers for Pro-owned FK targets (``Role``, ``Dojo_Group``).\n\nThe OS mixins hardcode ``_Prefetcher()`` with no override seam, and\n``open_source/`` is gitignored (rebuilt by ``build.sh``) so we can't add one\nthere. The two method bodies below are copied verbatim from\n``dojo/api_v2/prefetch/mixins.py`` — the only change is the prefetcher class —\nand must be kept in sync with it.\n\nThis is a plain mixin (it does not re-inherit ``PrefetchListMixin`` /\n``PrefetchRetrieveMixin`` — that would clash with the same bases reached via\n``PrefetchDojoModelViewSet`` and break C3 MRO). Place it *before*\n``PrefetchDojoModelViewSet`` in a viewset's bases so these methods win.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ group.","required":true}],"tags":["asset_groups"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedProductGroupRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/EnhancedProductGroupRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/EnhancedProductGroupRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedProductGroup"}}},"description":""}}},"delete":{"operationId":"asset_groups_destroy","description":"``list()``/``retrieve()`` mirroring the OS prefetch mixins but using\n:class:`~pro.api_helpers.prefetcher.ProPrefetcher`, so prefetch can resolve\nserializers for Pro-owned FK targets (``Role``, ``Dojo_Group``).\n\nThe OS mixins hardcode ``_Prefetcher()`` with no override seam, and\n``open_source/`` is gitignored (rebuilt by ``build.sh``) so we can't add one\nthere. The two method bodies below are copied verbatim from\n``dojo/api_v2/prefetch/mixins.py`` — the only change is the prefetcher class —\nand must be kept in sync with it.\n\nThis is a plain mixin (it does not re-inherit ``PrefetchListMixin`` /\n``PrefetchRetrieveMixin`` — that would clash with the same bases reached via\n``PrefetchDojoModelViewSet`` and break C3 MRO). Place it *before*\n``PrefetchDojoModelViewSet`` in a viewset's bases so these methods win.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ group.","required":true}],"tags":["asset_groups"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/asset_groups/{id}/delete_preview/":{"get":{"operationId":"asset_groups_delete_preview_list","description":"``list()``/``retrieve()`` mirroring the OS prefetch mixins but using\n:class:`~pro.api_helpers.prefetcher.ProPrefetcher`, so prefetch can resolve\nserializers for Pro-owned FK targets (``Role``, ``Dojo_Group``).\n\nThe OS mixins hardcode ``_Prefetcher()`` with no override seam, and\n``open_source/`` is gitignored (rebuilt by ``build.sh``) so we can't add one\nthere. The two method bodies below are copied verbatim from\n``dojo/api_v2/prefetch/mixins.py`` — the only change is the prefetcher class —\nand must be kept in sync with it.\n\nThis is a plain mixin (it does not re-inherit ``PrefetchListMixin`` /\n``PrefetchRetrieveMixin`` — that would clash with the same bases reached via\n``PrefetchDojoModelViewSet`` and break C3 MRO). Place it *before*\n``PrefetchDojoModelViewSet`` in a viewset's bases so these methods win.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ group.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["asset_groups"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/asset_groups/{id}/history/":{"get":{"operationId":"asset_groups_history_list","description":"Get audit log entries for an object with pagination.\n\nUses DojoEvents.objects.tracks(obj) to get events for the object itself,\nand DojoEvents.objects.references(obj) to get events for related objects\n(objects with foreign keys pointing to this object). Supports pagination, filtering, and sorting.\nAvailable at both /api/v2/ and /api/vue/ endpoints.\n\nArgs:\n    field_filter: Optional field name to filter by (e.g., \"finding_enrichment_settings\").\n                Only entries with changes to this field will be returned.","parameters":[{"in":"query","name":"asset_id","schema":{"type":"integer"}},{"in":"query","name":"group","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"group_id","schema":{"type":"integer"}},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ group.","required":true},{"in":"query","name":"id","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"product_id","schema":{"type":"integer"}},{"in":"query","name":"role","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"search","schema":{"type":"string"}}],"tags":["asset_groups"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedAuditLogList"}}},"description":""}}}},"/api/v2/asset_groups/{id}/history/legacy/":{"get":{"operationId":"asset_groups_history_legacy_list","description":"Get legacy audit log for an object (django-auditlog entries) with pagination.\n\nSupports pagination, filtering, and sorting.\nAvailable at both /api/v2/ and /api/vue/ endpoints.","parameters":[{"in":"query","name":"asset_id","schema":{"type":"integer"}},{"in":"query","name":"group","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"group_id","schema":{"type":"integer"}},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ group.","required":true},{"in":"query","name":"id","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"product_id","schema":{"type":"integer"}},{"in":"query","name":"role","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"search","schema":{"type":"string"}}],"tags":["asset_groups"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedLegacyAuditLogList"}}},"description":""}}}},"/api/v2/asset_groups/{id}/history/legacy/count/":{"get":{"operationId":"asset_groups_history_legacy_count_retrieve","description":"Get the total count of legacy audit log entries for an object.\n\nApplies the same filters as history_legacy (date filter, LegacyAuditLogFilter)\nto ensure the count matches what users will see when viewing the legacy history page.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ group.","required":true}],"tags":["asset_groups"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"integer"}}}}},"description":""}}}},"/api/v2/asset_members/":{"get":{"operationId":"asset_members_list","description":"``list()``/``retrieve()`` mirroring the OS prefetch mixins but using\n:class:`~pro.api_helpers.prefetcher.ProPrefetcher`, so prefetch can resolve\nserializers for Pro-owned FK targets (``Role``, ``Dojo_Group``).\n\nThe OS mixins hardcode ``_Prefetcher()`` with no override seam, and\n``open_source/`` is gitignored (rebuilt by ``build.sh``) so we can't add one\nthere. The two method bodies below are copied verbatim from\n``dojo/api_v2/prefetch/mixins.py`` — the only change is the prefetcher class —\nand must be kept in sync with it.\n\nThis is a plain mixin (it does not re-inherit ``PrefetchListMixin`` /\n``PrefetchRetrieveMixin`` — that would clash with the same bases reached via\n``PrefetchDojoModelViewSet`` and break C3 MRO). Place it *before*\n``PrefetchDojoModelViewSet`` in a viewset's bases so these methods win.","parameters":[{"in":"query","name":"asset_id","schema":{"type":"integer"}},{"in":"query","name":"id","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["product","user"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"product_id","schema":{"type":"integer"}},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"},{"in":"query","name":"role","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"search","schema":{"type":"string"}},{"in":"query","name":"user","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"user_id","schema":{"type":"integer"}}],"tags":["asset_members"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedEnhancedProductMemberList"}}},"description":""}}},"post":{"operationId":"asset_members_create","description":"``list()``/``retrieve()`` mirroring the OS prefetch mixins but using\n:class:`~pro.api_helpers.prefetcher.ProPrefetcher`, so prefetch can resolve\nserializers for Pro-owned FK targets (``Role``, ``Dojo_Group``).\n\nThe OS mixins hardcode ``_Prefetcher()`` with no override seam, and\n``open_source/`` is gitignored (rebuilt by ``build.sh``) so we can't add one\nthere. The two method bodies below are copied verbatim from\n``dojo/api_v2/prefetch/mixins.py`` — the only change is the prefetcher class —\nand must be kept in sync with it.\n\nThis is a plain mixin (it does not re-inherit ``PrefetchListMixin`` /\n``PrefetchRetrieveMixin`` — that would clash with the same bases reached via\n``PrefetchDojoModelViewSet`` and break C3 MRO). Place it *before*\n``PrefetchDojoModelViewSet`` in a viewset's bases so these methods win.","tags":["asset_members"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedProductMemberRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/EnhancedProductMemberRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/EnhancedProductMemberRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedProductMember"}}},"description":""}}}},"/api/v2/asset_members/{id}/":{"get":{"operationId":"asset_members_retrieve","description":"``list()``/``retrieve()`` mirroring the OS prefetch mixins but using\n:class:`~pro.api_helpers.prefetcher.ProPrefetcher`, so prefetch can resolve\nserializers for Pro-owned FK targets (``Role``, ``Dojo_Group``).\n\nThe OS mixins hardcode ``_Prefetcher()`` with no override seam, and\n``open_source/`` is gitignored (rebuilt by ``build.sh``) so we can't add one\nthere. The two method bodies below are copied verbatim from\n``dojo/api_v2/prefetch/mixins.py`` — the only change is the prefetcher class —\nand must be kept in sync with it.\n\nThis is a plain mixin (it does not re-inherit ``PrefetchListMixin`` /\n``PrefetchRetrieveMixin`` — that would clash with the same bases reached via\n``PrefetchDojoModelViewSet`` and break C3 MRO). Place it *before*\n``PrefetchDojoModelViewSet`` in a viewset's bases so these methods win.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ member.","required":true},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["product","user"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"}],"tags":["asset_members"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedProductMember"}}},"description":""}}},"put":{"operationId":"asset_members_update","description":"``list()``/``retrieve()`` mirroring the OS prefetch mixins but using\n:class:`~pro.api_helpers.prefetcher.ProPrefetcher`, so prefetch can resolve\nserializers for Pro-owned FK targets (``Role``, ``Dojo_Group``).\n\nThe OS mixins hardcode ``_Prefetcher()`` with no override seam, and\n``open_source/`` is gitignored (rebuilt by ``build.sh``) so we can't add one\nthere. The two method bodies below are copied verbatim from\n``dojo/api_v2/prefetch/mixins.py`` — the only change is the prefetcher class —\nand must be kept in sync with it.\n\nThis is a plain mixin (it does not re-inherit ``PrefetchListMixin`` /\n``PrefetchRetrieveMixin`` — that would clash with the same bases reached via\n``PrefetchDojoModelViewSet`` and break C3 MRO). Place it *before*\n``PrefetchDojoModelViewSet`` in a viewset's bases so these methods win.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ member.","required":true}],"tags":["asset_members"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedProductMemberRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/EnhancedProductMemberRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/EnhancedProductMemberRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedProductMember"}}},"description":""}}},"delete":{"operationId":"asset_members_destroy","description":"``list()``/``retrieve()`` mirroring the OS prefetch mixins but using\n:class:`~pro.api_helpers.prefetcher.ProPrefetcher`, so prefetch can resolve\nserializers for Pro-owned FK targets (``Role``, ``Dojo_Group``).\n\nThe OS mixins hardcode ``_Prefetcher()`` with no override seam, and\n``open_source/`` is gitignored (rebuilt by ``build.sh``) so we can't add one\nthere. The two method bodies below are copied verbatim from\n``dojo/api_v2/prefetch/mixins.py`` — the only change is the prefetcher class —\nand must be kept in sync with it.\n\nThis is a plain mixin (it does not re-inherit ``PrefetchListMixin`` /\n``PrefetchRetrieveMixin`` — that would clash with the same bases reached via\n``PrefetchDojoModelViewSet`` and break C3 MRO). Place it *before*\n``PrefetchDojoModelViewSet`` in a viewset's bases so these methods win.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ member.","required":true}],"tags":["asset_members"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/asset_members/{id}/delete_preview/":{"get":{"operationId":"asset_members_delete_preview_list","description":"``list()``/``retrieve()`` mirroring the OS prefetch mixins but using\n:class:`~pro.api_helpers.prefetcher.ProPrefetcher`, so prefetch can resolve\nserializers for Pro-owned FK targets (``Role``, ``Dojo_Group``).\n\nThe OS mixins hardcode ``_Prefetcher()`` with no override seam, and\n``open_source/`` is gitignored (rebuilt by ``build.sh``) so we can't add one\nthere. The two method bodies below are copied verbatim from\n``dojo/api_v2/prefetch/mixins.py`` — the only change is the prefetcher class —\nand must be kept in sync with it.\n\nThis is a plain mixin (it does not re-inherit ``PrefetchListMixin`` /\n``PrefetchRetrieveMixin`` — that would clash with the same bases reached via\n``PrefetchDojoModelViewSet`` and break C3 MRO). Place it *before*\n``PrefetchDojoModelViewSet`` in a viewset's bases so these methods win.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ member.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["asset_members"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/assets/":{"get":{"operationId":"assets_list","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"query","name":"asset_manager","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"asset_numeric_grade","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"business_criticality","schema":{"type":"array","items":{"type":"string","x-spec-enum-id":"ef412461eb271471","nullable":true,"enum":["high","low","medium","none","very high","very low"]}},"description":"* `very high` - Very High\n* `high` - High\n* `medium` - Medium\n* `low` - Low\n* `very low` - Very Low\n* `none` - None","explode":true,"style":"form"},{"in":"query","name":"created","schema":{"type":"string","format":"date-time","nullable":true,"enum":[1,2,3,4,5,6,7,null]},"description":"Time that the object was initially created, and saved to the database\n\n* `None` - Any date\n* `1` - Today\n* `2` - Past 7 days\n* `3` - Past 30 days\n* `4` - Past 90 days\n* `5` - Current month\n* `6` - Current year\n* `7` - Past year"},{"in":"query","name":"description","schema":{"type":"string"}},{"in":"query","name":"external_audience","schema":{"type":"boolean"}},{"in":"query","name":"has_children","schema":{"type":"boolean"}},{"in":"query","name":"has_parent","schema":{"type":"boolean"}},{"in":"query","name":"has_tags","schema":{"type":"boolean"},"description":"Has tags"},{"in":"query","name":"id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"internet_accessible","schema":{"type":"boolean"}},{"in":"query","name":"lifecycle","schema":{"type":"array","items":{"type":"string","x-spec-enum-id":"65f9d93250b96377","nullable":true,"enum":["construction","production","retirement"]}},"description":"* `construction` - Construction\n* `production` - Production\n* `retirement` - Retirement","explode":true,"style":"form"},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"name","schema":{"type":"string"}},{"in":"query","name":"name_exact","schema":{"type":"string"}},{"in":"query","name":"not_tag","schema":{"type":"string"},"description":"Not Tag name contains"},{"in":"query","name":"not_tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags not present on Asset","explode":false,"style":"form"},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-asset_manager","-asset_manager__first_name","-asset_manager__last_name","-asset_numeric_grade","-business_criticality","-created","-external_audience","-id","-internet_accessible","-lifecycle","-name","-organization","-organization__name","-origin","-platform","-revenue","-team_manager","-team_manager__first_name","-team_manager__last_name","-technical_contact","-technical_contact__first_name","-technical_contact__last_name","-tid","-updated","-user_records","asset_manager","asset_manager__first_name","asset_manager__last_name","asset_numeric_grade","business_criticality","created","external_audience","id","internet_accessible","lifecycle","name","organization","organization__name","origin","platform","revenue","team_manager","team_manager__first_name","team_manager__last_name","technical_contact","technical_contact__first_name","technical_contact__last_name","tid","updated","user_records"]}},"description":"Ordering\n\n* `id` - Id\n* `-id` - Id (descending)\n* `tid` - Tid\n* `-tid` - Tid (descending)\n* `name` - Name\n* `-name` - Name (descending)\n* `created` - Created\n* `-created` - Created (descending)\n* `asset_numeric_grade` - Asset numeric grade\n* `-asset_numeric_grade` - Asset numeric grade (descending)\n* `business_criticality` - Business criticality\n* `-business_criticality` - Business criticality (descending)\n* `platform` - Platform\n* `-platform` - Platform (descending)\n* `lifecycle` - Lifecycle\n* `-lifecycle` - Lifecycle (descending)\n* `origin` - Origin\n* `-origin` - Origin (descending)\n* `revenue` - Revenue\n* `-revenue` - Revenue (descending)\n* `external_audience` - External audience\n* `-external_audience` - External audience (descending)\n* `internet_accessible` - Internet accessible\n* `-internet_accessible` - Internet accessible (descending)\n* `asset_manager` - Asset manager\n* `-asset_manager` - Asset manager (descending)\n* `asset_manager__first_name` - Asset manager  first name\n* `-asset_manager__first_name` - Asset manager  first name (descending)\n* `asset_manager__last_name` - Asset manager  last name\n* `-asset_manager__last_name` - Asset manager  last name (descending)\n* `technical_contact` - Technical contact\n* `-technical_contact` - Technical contact (descending)\n* `technical_contact__first_name` - Technical contact  first name\n* `-technical_contact__first_name` - Technical contact  first name (descending)\n* `technical_contact__last_name` - Technical contact  last name\n* `-technical_contact__last_name` - Technical contact  last name (descending)\n* `team_manager` - Team manager\n* `-team_manager` - Team manager (descending)\n* `team_manager__first_name` - Team manager  first name\n* `-team_manager__first_name` - Team manager  first name (descending)\n* `team_manager__last_name` - Team manager  last name\n* `-team_manager__last_name` - Team manager  last name (descending)\n* `organization` - Organization\n* `-organization` - Organization (descending)\n* `organization__name` - Organization  name\n* `-organization__name` - Organization  name (descending)\n* `updated` - Updated\n* `-updated` - Updated (descending)\n* `user_records` - User records\n* `-user_records` - User records (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"organization","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"origin","schema":{"type":"array","items":{"type":"string","x-spec-enum-id":"435026afe6c513fa","nullable":true,"enum":["contractor","internal","open source","outsourced","purchased","third party library"]}},"description":"* `third party library` - Third Party Library\n* `purchased` - Purchased\n* `contractor` - Contractor Developed\n* `internal` - Internally Developed\n* `open source` - Open Source\n* `outsourced` - Outsourced","explode":true,"style":"form"},{"in":"query","name":"outside_of_sla","schema":{"type":"number"}},{"in":"query","name":"platform","schema":{"type":"array","items":{"type":"string","x-spec-enum-id":"48ed03cfd9c8641d","nullable":true,"enum":["desktop","iot","mobile","web","web service"]}},"description":"* `web service` - API\n* `desktop` - Desktop\n* `iot` - Internet of Things\n* `mobile` - Mobile\n* `web` - Web","explode":true,"style":"form"},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["authorized_users","prod_type","product_manager","regulations","sla_configuration","team_manager","technical_contact"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"regulations","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"},{"in":"query","name":"revenue","schema":{"type":"number"}},{"in":"query","name":"tag","schema":{"type":"string"},"description":"Tag name contains"},{"in":"query","name":"tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags (uses OR for multiple values)","explode":false,"style":"form"},{"in":"query","name":"tags__and","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags to match with an AND expression","explode":false,"style":"form"},{"in":"query","name":"team_manager","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"technical_contact","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"tid","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"updated","schema":{"type":"string","format":"date-time","nullable":true,"enum":[1,2,3,4,5,6,7,null]},"description":"Time that the object was most recently saved to the database\n\n* `None` - Any date\n* `1` - Today\n* `2` - Past 7 days\n* `3` - Past 30 days\n* `4` - Past 90 days\n* `5` - Current month\n* `6` - Current year\n* `7` - Past year"},{"in":"query","name":"user_records","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"}],"tags":["assets"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedAssetsList"}}},"description":""}}},"post":{"operationId":"assets_create","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","tags":["assets"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetsRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/AssetsRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/AssetsRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Assets"}}},"description":""}}}},"/api/v2/assets/{id}/":{"get":{"operationId":"assets_retrieve","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product.","required":true},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["authorized_users","prod_type","product_manager","regulations","sla_configuration","team_manager","technical_contact"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"}],"tags":["assets"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Assets"}}},"description":""}}},"put":{"operationId":"assets_update","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product.","required":true}],"tags":["assets"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetsRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/AssetsRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/AssetsRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Assets"}}},"description":""}}},"patch":{"operationId":"assets_partial_update","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product.","required":true}],"tags":["assets"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedAssetsRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedAssetsRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedAssetsRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Assets"}}},"description":""}}},"delete":{"operationId":"assets_destroy","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product.","required":true}],"tags":["assets"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/assets/{id}/delete_preview/":{"get":{"operationId":"assets_delete_preview_list","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["assets"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/assets/{id}/finding_diff/{other_id}/":{"get":{"operationId":"assets_finding_diff_retrieve","description":"Compares the findings associated with the two objects and returns\nadded, removed, equality, and improvement information.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product.","required":true},{"in":"path","name":"other_id","schema":{"type":"string","pattern":"^\\d+$"},"required":true}],"tags":["assets"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindingDiff"}}},"description":""}}}},"/api/v2/assets/{id}/generate_report/":{"post":{"operationId":"assets_generate_report_create","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product.","required":true}],"tags":["assets"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportGenerateOptionRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ReportGenerateOptionRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ReportGenerateOptionRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportGenerate"}}},"description":""}}}},"/api/v2/assets/{id}/history/":{"get":{"operationId":"assets_history_list","description":"Get audit log entries for an object with pagination.\n\nUses DojoEvents.objects.tracks(obj) to get events for the object itself,\nand DojoEvents.objects.references(obj) to get events for related objects\n(objects with foreign keys pointing to this object). Supports pagination, filtering, and sorting.\nAvailable at both /api/v2/ and /api/vue/ endpoints.\n\nArgs:\n    field_filter: Optional field name to filter by (e.g., \"finding_enrichment_settings\").\n                Only entries with changes to this field will be returned.","parameters":[{"in":"query","name":"asset_manager","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"asset_numeric_grade","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"business_criticality","schema":{"type":"array","items":{"type":"string","x-spec-enum-id":"ef412461eb271471","nullable":true,"enum":["high","low","medium","none","very high","very low"]}},"description":"* `very high` - Very High\n* `high` - High\n* `medium` - Medium\n* `low` - Low\n* `very low` - Very Low\n* `none` - None","explode":true,"style":"form"},{"in":"query","name":"created","schema":{"type":"string","format":"date-time","nullable":true,"enum":[1,2,3,4,5,6,7,null]},"description":"Time that the object was initially created, and saved to the database\n\n* `None` - Any date\n* `1` - Today\n* `2` - Past 7 days\n* `3` - Past 30 days\n* `4` - Past 90 days\n* `5` - Current month\n* `6` - Current year\n* `7` - Past year"},{"in":"query","name":"description","schema":{"type":"string"}},{"in":"query","name":"external_audience","schema":{"type":"boolean"}},{"in":"query","name":"has_children","schema":{"type":"boolean"}},{"in":"query","name":"has_parent","schema":{"type":"boolean"}},{"in":"query","name":"has_tags","schema":{"type":"boolean"},"description":"Has tags"},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product.","required":true},{"in":"query","name":"id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"internet_accessible","schema":{"type":"boolean"}},{"in":"query","name":"lifecycle","schema":{"type":"array","items":{"type":"string","x-spec-enum-id":"65f9d93250b96377","nullable":true,"enum":["construction","production","retirement"]}},"description":"* `construction` - Construction\n* `production` - Production\n* `retirement` - Retirement","explode":true,"style":"form"},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"name","schema":{"type":"string"}},{"in":"query","name":"name_exact","schema":{"type":"string"}},{"in":"query","name":"not_tag","schema":{"type":"string"},"description":"Not Tag name contains"},{"in":"query","name":"not_tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags not present on Asset","explode":false,"style":"form"},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-asset_manager","-asset_manager__first_name","-asset_manager__last_name","-asset_numeric_grade","-business_criticality","-created","-external_audience","-id","-internet_accessible","-lifecycle","-name","-organization","-organization__name","-origin","-platform","-revenue","-team_manager","-team_manager__first_name","-team_manager__last_name","-technical_contact","-technical_contact__first_name","-technical_contact__last_name","-tid","-updated","-user_records","asset_manager","asset_manager__first_name","asset_manager__last_name","asset_numeric_grade","business_criticality","created","external_audience","id","internet_accessible","lifecycle","name","organization","organization__name","origin","platform","revenue","team_manager","team_manager__first_name","team_manager__last_name","technical_contact","technical_contact__first_name","technical_contact__last_name","tid","updated","user_records"]}},"description":"Ordering\n\n* `id` - Id\n* `-id` - Id (descending)\n* `tid` - Tid\n* `-tid` - Tid (descending)\n* `name` - Name\n* `-name` - Name (descending)\n* `created` - Created\n* `-created` - Created (descending)\n* `asset_numeric_grade` - Asset numeric grade\n* `-asset_numeric_grade` - Asset numeric grade (descending)\n* `business_criticality` - Business criticality\n* `-business_criticality` - Business criticality (descending)\n* `platform` - Platform\n* `-platform` - Platform (descending)\n* `lifecycle` - Lifecycle\n* `-lifecycle` - Lifecycle (descending)\n* `origin` - Origin\n* `-origin` - Origin (descending)\n* `revenue` - Revenue\n* `-revenue` - Revenue (descending)\n* `external_audience` - External audience\n* `-external_audience` - External audience (descending)\n* `internet_accessible` - Internet accessible\n* `-internet_accessible` - Internet accessible (descending)\n* `asset_manager` - Asset manager\n* `-asset_manager` - Asset manager (descending)\n* `asset_manager__first_name` - Asset manager  first name\n* `-asset_manager__first_name` - Asset manager  first name (descending)\n* `asset_manager__last_name` - Asset manager  last name\n* `-asset_manager__last_name` - Asset manager  last name (descending)\n* `technical_contact` - Technical contact\n* `-technical_contact` - Technical contact (descending)\n* `technical_contact__first_name` - Technical contact  first name\n* `-technical_contact__first_name` - Technical contact  first name (descending)\n* `technical_contact__last_name` - Technical contact  last name\n* `-technical_contact__last_name` - Technical contact  last name (descending)\n* `team_manager` - Team manager\n* `-team_manager` - Team manager (descending)\n* `team_manager__first_name` - Team manager  first name\n* `-team_manager__first_name` - Team manager  first name (descending)\n* `team_manager__last_name` - Team manager  last name\n* `-team_manager__last_name` - Team manager  last name (descending)\n* `organization` - Organization\n* `-organization` - Organization (descending)\n* `organization__name` - Organization  name\n* `-organization__name` - Organization  name (descending)\n* `updated` - Updated\n* `-updated` - Updated (descending)\n* `user_records` - User records\n* `-user_records` - User records (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"organization","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"origin","schema":{"type":"array","items":{"type":"string","x-spec-enum-id":"435026afe6c513fa","nullable":true,"enum":["contractor","internal","open source","outsourced","purchased","third party library"]}},"description":"* `third party library` - Third Party Library\n* `purchased` - Purchased\n* `contractor` - Contractor Developed\n* `internal` - Internally Developed\n* `open source` - Open Source\n* `outsourced` - Outsourced","explode":true,"style":"form"},{"in":"query","name":"outside_of_sla","schema":{"type":"number"}},{"in":"query","name":"platform","schema":{"type":"array","items":{"type":"string","x-spec-enum-id":"48ed03cfd9c8641d","nullable":true,"enum":["desktop","iot","mobile","web","web service"]}},"description":"* `web service` - API\n* `desktop` - Desktop\n* `iot` - Internet of Things\n* `mobile` - Mobile\n* `web` - Web","explode":true,"style":"form"},{"in":"query","name":"regulations","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"revenue","schema":{"type":"number"}},{"in":"query","name":"tag","schema":{"type":"string"},"description":"Tag name contains"},{"in":"query","name":"tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags (uses OR for multiple values)","explode":false,"style":"form"},{"in":"query","name":"tags__and","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags to match with an AND expression","explode":false,"style":"form"},{"in":"query","name":"team_manager","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"technical_contact","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"tid","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"updated","schema":{"type":"string","format":"date-time","nullable":true,"enum":[1,2,3,4,5,6,7,null]},"description":"Time that the object was most recently saved to the database\n\n* `None` - Any date\n* `1` - Today\n* `2` - Past 7 days\n* `3` - Past 30 days\n* `4` - Past 90 days\n* `5` - Current month\n* `6` - Current year\n* `7` - Past year"},{"in":"query","name":"user_records","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"}],"tags":["assets"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedAuditLogList"}}},"description":""}}}},"/api/v2/assets/{id}/history/legacy/":{"get":{"operationId":"assets_history_legacy_list","description":"Get legacy audit log for an object (django-auditlog entries) with pagination.\n\nSupports pagination, filtering, and sorting.\nAvailable at both /api/v2/ and /api/vue/ endpoints.","parameters":[{"in":"query","name":"asset_manager","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"asset_numeric_grade","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"business_criticality","schema":{"type":"array","items":{"type":"string","x-spec-enum-id":"ef412461eb271471","nullable":true,"enum":["high","low","medium","none","very high","very low"]}},"description":"* `very high` - Very High\n* `high` - High\n* `medium` - Medium\n* `low` - Low\n* `very low` - Very Low\n* `none` - None","explode":true,"style":"form"},{"in":"query","name":"created","schema":{"type":"string","format":"date-time","nullable":true,"enum":[1,2,3,4,5,6,7,null]},"description":"Time that the object was initially created, and saved to the database\n\n* `None` - Any date\n* `1` - Today\n* `2` - Past 7 days\n* `3` - Past 30 days\n* `4` - Past 90 days\n* `5` - Current month\n* `6` - Current year\n* `7` - Past year"},{"in":"query","name":"description","schema":{"type":"string"}},{"in":"query","name":"external_audience","schema":{"type":"boolean"}},{"in":"query","name":"has_children","schema":{"type":"boolean"}},{"in":"query","name":"has_parent","schema":{"type":"boolean"}},{"in":"query","name":"has_tags","schema":{"type":"boolean"},"description":"Has tags"},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product.","required":true},{"in":"query","name":"id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"internet_accessible","schema":{"type":"boolean"}},{"in":"query","name":"lifecycle","schema":{"type":"array","items":{"type":"string","x-spec-enum-id":"65f9d93250b96377","nullable":true,"enum":["construction","production","retirement"]}},"description":"* `construction` - Construction\n* `production` - Production\n* `retirement` - Retirement","explode":true,"style":"form"},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"name","schema":{"type":"string"}},{"in":"query","name":"name_exact","schema":{"type":"string"}},{"in":"query","name":"not_tag","schema":{"type":"string"},"description":"Not Tag name contains"},{"in":"query","name":"not_tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags not present on Asset","explode":false,"style":"form"},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-asset_manager","-asset_manager__first_name","-asset_manager__last_name","-asset_numeric_grade","-business_criticality","-created","-external_audience","-id","-internet_accessible","-lifecycle","-name","-organization","-organization__name","-origin","-platform","-revenue","-team_manager","-team_manager__first_name","-team_manager__last_name","-technical_contact","-technical_contact__first_name","-technical_contact__last_name","-tid","-updated","-user_records","asset_manager","asset_manager__first_name","asset_manager__last_name","asset_numeric_grade","business_criticality","created","external_audience","id","internet_accessible","lifecycle","name","organization","organization__name","origin","platform","revenue","team_manager","team_manager__first_name","team_manager__last_name","technical_contact","technical_contact__first_name","technical_contact__last_name","tid","updated","user_records"]}},"description":"Ordering\n\n* `id` - Id\n* `-id` - Id (descending)\n* `tid` - Tid\n* `-tid` - Tid (descending)\n* `name` - Name\n* `-name` - Name (descending)\n* `created` - Created\n* `-created` - Created (descending)\n* `asset_numeric_grade` - Asset numeric grade\n* `-asset_numeric_grade` - Asset numeric grade (descending)\n* `business_criticality` - Business criticality\n* `-business_criticality` - Business criticality (descending)\n* `platform` - Platform\n* `-platform` - Platform (descending)\n* `lifecycle` - Lifecycle\n* `-lifecycle` - Lifecycle (descending)\n* `origin` - Origin\n* `-origin` - Origin (descending)\n* `revenue` - Revenue\n* `-revenue` - Revenue (descending)\n* `external_audience` - External audience\n* `-external_audience` - External audience (descending)\n* `internet_accessible` - Internet accessible\n* `-internet_accessible` - Internet accessible (descending)\n* `asset_manager` - Asset manager\n* `-asset_manager` - Asset manager (descending)\n* `asset_manager__first_name` - Asset manager  first name\n* `-asset_manager__first_name` - Asset manager  first name (descending)\n* `asset_manager__last_name` - Asset manager  last name\n* `-asset_manager__last_name` - Asset manager  last name (descending)\n* `technical_contact` - Technical contact\n* `-technical_contact` - Technical contact (descending)\n* `technical_contact__first_name` - Technical contact  first name\n* `-technical_contact__first_name` - Technical contact  first name (descending)\n* `technical_contact__last_name` - Technical contact  last name\n* `-technical_contact__last_name` - Technical contact  last name (descending)\n* `team_manager` - Team manager\n* `-team_manager` - Team manager (descending)\n* `team_manager__first_name` - Team manager  first name\n* `-team_manager__first_name` - Team manager  first name (descending)\n* `team_manager__last_name` - Team manager  last name\n* `-team_manager__last_name` - Team manager  last name (descending)\n* `organization` - Organization\n* `-organization` - Organization (descending)\n* `organization__name` - Organization  name\n* `-organization__name` - Organization  name (descending)\n* `updated` - Updated\n* `-updated` - Updated (descending)\n* `user_records` - User records\n* `-user_records` - User records (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"organization","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"origin","schema":{"type":"array","items":{"type":"string","x-spec-enum-id":"435026afe6c513fa","nullable":true,"enum":["contractor","internal","open source","outsourced","purchased","third party library"]}},"description":"* `third party library` - Third Party Library\n* `purchased` - Purchased\n* `contractor` - Contractor Developed\n* `internal` - Internally Developed\n* `open source` - Open Source\n* `outsourced` - Outsourced","explode":true,"style":"form"},{"in":"query","name":"outside_of_sla","schema":{"type":"number"}},{"in":"query","name":"platform","schema":{"type":"array","items":{"type":"string","x-spec-enum-id":"48ed03cfd9c8641d","nullable":true,"enum":["desktop","iot","mobile","web","web service"]}},"description":"* `web service` - API\n* `desktop` - Desktop\n* `iot` - Internet of Things\n* `mobile` - Mobile\n* `web` - Web","explode":true,"style":"form"},{"in":"query","name":"regulations","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"revenue","schema":{"type":"number"}},{"in":"query","name":"tag","schema":{"type":"string"},"description":"Tag name contains"},{"in":"query","name":"tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags (uses OR for multiple values)","explode":false,"style":"form"},{"in":"query","name":"tags__and","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags to match with an AND expression","explode":false,"style":"form"},{"in":"query","name":"team_manager","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"technical_contact","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"tid","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"updated","schema":{"type":"string","format":"date-time","nullable":true,"enum":[1,2,3,4,5,6,7,null]},"description":"Time that the object was most recently saved to the database\n\n* `None` - Any date\n* `1` - Today\n* `2` - Past 7 days\n* `3` - Past 30 days\n* `4` - Past 90 days\n* `5` - Current month\n* `6` - Current year\n* `7` - Past year"},{"in":"query","name":"user_records","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"}],"tags":["assets"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedLegacyAuditLogList"}}},"description":""}}}},"/api/v2/assets/{id}/history/legacy/count/":{"get":{"operationId":"assets_history_legacy_count_retrieve","description":"Get the total count of legacy audit log entries for an object.\n\nApplies the same filters as history_legacy (date filter, LegacyAuditLogFilter)\nto ensure the count matches what users will see when viewing the legacy history page.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product.","required":true}],"tags":["assets"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"integer"}}}}},"description":""}}}},"/api/v2/audit_log/":{"get":{"operationId":"audit_log_list","description":"List pghistory events with normalization and prefetching. So we can't use DRF built-in filtering/pagination.","parameters":[{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["audit_log"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedAuditLogList"}}},"description":""}}}},"/api/v2/audit_log/{pgh_id}/":{"get":{"operationId":"audit_log_retrieve","description":"Retrieve a single pghistory event, normalized like the list view.","parameters":[{"in":"path","name":"pgh_id","schema":{"type":"integer","maximum":9223372036854775807,"minimum":-9223372036854775808,"format":"int64","description":"The primary key of the event."},"required":true}],"tags":["audit_log"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuditLog"}}},"description":""}}}},"/api/v2/audit_log/legacy/":{"get":{"operationId":"audit_log_legacy_retrieve","description":"Legacy audit log endpoint (django-auditlog entries).\n\nDelegates to LegacyAuditLogViewSet to handle django-auditlog entries.","tags":["audit_log"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuditLog"}}},"description":""}}}},"/api/v2/audit_log/legacy/count/":{"get":{"operationId":"audit_log_legacy_count_retrieve","description":"Legacy audit log count endpoint.\n\nReturns the total count of legacy audit log entries (unfiltered).","tags":["audit_log"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuditLog"}}},"description":""}}}},"/api/v2/audit_log/legacy/model_names/":{"get":{"operationId":"audit_log_legacy_model_names_retrieve","description":"Legacy model names endpoint.\n\nReturns model names from django-auditlog entries.","tags":["audit_log"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuditLog"}}},"description":""}}}},"/api/v2/audit_log/model_names/":{"get":{"operationId":"audit_log_model_names_retrieve","description":"Returns a list of all distinct model names present in the pghistory entries.","tags":["audit_log"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuditLog"}}},"description":""}}}},"/api/v2/benchmark_categories/":{"get":{"operationId":"benchmark_categories_list","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"query","name":"created","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"enabled","schema":{"type":"boolean"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"name","schema":{"type":"string"}},{"in":"query","name":"objective","schema":{"type":"string"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"references","schema":{"type":"string"}},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"},{"in":"query","name":"type","schema":{"type":"integer"}},{"in":"query","name":"updated","schema":{"type":"string","format":"date-time"}}],"tags":["benchmark_categories"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedBenchmarkCategoryList"}}},"description":""}}},"post":{"operationId":"benchmark_categories_create","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","tags":["benchmark_categories"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BenchmarkCategoryRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/BenchmarkCategoryRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/BenchmarkCategoryRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BenchmarkCategory"}}},"description":""}}}},"/api/v2/benchmark_categories/{id}/":{"get":{"operationId":"benchmark_categories_retrieve","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this benchmark_ category.","required":true},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"}],"tags":["benchmark_categories"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BenchmarkCategory"}}},"description":""}}},"put":{"operationId":"benchmark_categories_update","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this benchmark_ category.","required":true}],"tags":["benchmark_categories"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BenchmarkCategoryRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/BenchmarkCategoryRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/BenchmarkCategoryRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BenchmarkCategory"}}},"description":""}}},"patch":{"operationId":"benchmark_categories_partial_update","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this benchmark_ category.","required":true}],"tags":["benchmark_categories"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedBenchmarkCategoryRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedBenchmarkCategoryRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedBenchmarkCategoryRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BenchmarkCategory"}}},"description":""}}},"delete":{"operationId":"benchmark_categories_destroy","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this benchmark_ category.","required":true}],"tags":["benchmark_categories"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/benchmark_categories/{id}/delete_preview/":{"get":{"operationId":"benchmark_categories_delete_preview_list","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this benchmark_ category.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["benchmark_categories"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/benchmark_product_summaries/":{"get":{"operationId":"benchmark_product_summaries_list","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"query","name":"asvs_level_1_benchmark","schema":{"type":"integer"}},{"in":"query","name":"asvs_level_1_score","schema":{"type":"integer"}},{"in":"query","name":"asvs_level_2_benchmark","schema":{"type":"integer"}},{"in":"query","name":"asvs_level_2_score","schema":{"type":"integer"}},{"in":"query","name":"asvs_level_3_benchmark","schema":{"type":"integer"}},{"in":"query","name":"asvs_level_3_score","schema":{"type":"integer"}},{"in":"query","name":"benchmark_type","schema":{"type":"integer"}},{"in":"query","name":"created","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"current_level","schema":{"type":"string","x-spec-enum-id":"51d382524500f67b","nullable":true,"enum":["Level 1","Level 2","Level 3"]},"description":"* `Level 1` - Level 1\n* `Level 2` - Level 2\n* `Level 3` - Level 3"},{"in":"query","name":"desired_level","schema":{"type":"string","x-spec-enum-id":"51d382524500f67b","enum":["Level 1","Level 2","Level 3"]},"description":"* `Level 1` - Level 1\n* `Level 2` - Level 2\n* `Level 3` - Level 3"},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["product"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"product","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"publish","schema":{"type":"boolean"}},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"},{"in":"query","name":"updated","schema":{"type":"string","format":"date-time"}}],"tags":["benchmark_product_summaries"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedBenchmarkProductSummaryList"}}},"description":""}}},"post":{"operationId":"benchmark_product_summaries_create","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","tags":["benchmark_product_summaries"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BenchmarkProductSummaryRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/BenchmarkProductSummaryRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/BenchmarkProductSummaryRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BenchmarkProductSummary"}}},"description":""}}}},"/api/v2/benchmark_product_summaries/{id}/":{"get":{"operationId":"benchmark_product_summaries_retrieve","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this benchmark_ product_ summary.","required":true},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["product"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"}],"tags":["benchmark_product_summaries"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BenchmarkProductSummary"}}},"description":""}}},"put":{"operationId":"benchmark_product_summaries_update","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this benchmark_ product_ summary.","required":true}],"tags":["benchmark_product_summaries"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BenchmarkProductSummaryRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/BenchmarkProductSummaryRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/BenchmarkProductSummaryRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BenchmarkProductSummary"}}},"description":""}}},"patch":{"operationId":"benchmark_product_summaries_partial_update","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this benchmark_ product_ summary.","required":true}],"tags":["benchmark_product_summaries"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedBenchmarkProductSummaryRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedBenchmarkProductSummaryRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedBenchmarkProductSummaryRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BenchmarkProductSummary"}}},"description":""}}},"delete":{"operationId":"benchmark_product_summaries_destroy","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this benchmark_ product_ summary.","required":true}],"tags":["benchmark_product_summaries"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/benchmark_product_summaries/{id}/delete_preview/":{"get":{"operationId":"benchmark_product_summaries_delete_preview_list","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this benchmark_ product_ summary.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["benchmark_product_summaries"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/benchmark_products/":{"get":{"operationId":"benchmark_products_list","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"query","name":"control","schema":{"type":"integer"}},{"in":"query","name":"created","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"enabled","schema":{"type":"boolean"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"notes","schema":{"type":"array","items":{"type":"integer"}},"explode":true,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"pass_fail","schema":{"type":"boolean"}},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["notes","product"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"product","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"},{"in":"query","name":"updated","schema":{"type":"string","format":"date-time"}}],"tags":["benchmark_products"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedBenchmarkProductList"}}},"description":""}}},"post":{"operationId":"benchmark_products_create","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","tags":["benchmark_products"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BenchmarkProductRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/BenchmarkProductRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/BenchmarkProductRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BenchmarkProduct"}}},"description":""}}}},"/api/v2/benchmark_products/{id}/":{"get":{"operationId":"benchmark_products_retrieve","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this benchmark_ product.","required":true},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["notes","product"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"}],"tags":["benchmark_products"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BenchmarkProduct"}}},"description":""}}},"put":{"operationId":"benchmark_products_update","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this benchmark_ product.","required":true}],"tags":["benchmark_products"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BenchmarkProductRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/BenchmarkProductRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/BenchmarkProductRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BenchmarkProduct"}}},"description":""}}},"patch":{"operationId":"benchmark_products_partial_update","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this benchmark_ product.","required":true}],"tags":["benchmark_products"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedBenchmarkProductRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedBenchmarkProductRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedBenchmarkProductRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BenchmarkProduct"}}},"description":""}}},"delete":{"operationId":"benchmark_products_destroy","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this benchmark_ product.","required":true}],"tags":["benchmark_products"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/benchmark_products/{id}/delete_preview/":{"get":{"operationId":"benchmark_products_delete_preview_list","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this benchmark_ product.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["benchmark_products"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/benchmark_requirements/":{"get":{"operationId":"benchmark_requirements_list","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"query","name":"category","schema":{"type":"integer"}},{"in":"query","name":"created","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"enabled","schema":{"type":"boolean"}},{"in":"query","name":"level_1","schema":{"type":"boolean"}},{"in":"query","name":"level_2","schema":{"type":"boolean"}},{"in":"query","name":"level_3","schema":{"type":"boolean"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"objective","schema":{"type":"string"}},{"in":"query","name":"objective_number","schema":{"type":"string"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"references","schema":{"type":"string"}},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"},{"in":"query","name":"updated","schema":{"type":"string","format":"date-time"}}],"tags":["benchmark_requirements"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedBenchmarkRequirementList"}}},"description":""}}},"post":{"operationId":"benchmark_requirements_create","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","tags":["benchmark_requirements"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BenchmarkRequirementRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/BenchmarkRequirementRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/BenchmarkRequirementRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BenchmarkRequirement"}}},"description":""}}}},"/api/v2/benchmark_requirements/{id}/":{"get":{"operationId":"benchmark_requirements_retrieve","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this benchmark_ requirement.","required":true},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"}],"tags":["benchmark_requirements"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BenchmarkRequirement"}}},"description":""}}},"put":{"operationId":"benchmark_requirements_update","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this benchmark_ requirement.","required":true}],"tags":["benchmark_requirements"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BenchmarkRequirementRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/BenchmarkRequirementRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/BenchmarkRequirementRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BenchmarkRequirement"}}},"description":""}}},"patch":{"operationId":"benchmark_requirements_partial_update","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this benchmark_ requirement.","required":true}],"tags":["benchmark_requirements"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedBenchmarkRequirementRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedBenchmarkRequirementRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedBenchmarkRequirementRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BenchmarkRequirement"}}},"description":""}}},"delete":{"operationId":"benchmark_requirements_destroy","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this benchmark_ requirement.","required":true}],"tags":["benchmark_requirements"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/benchmark_requirements/{id}/delete_preview/":{"get":{"operationId":"benchmark_requirements_delete_preview_list","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this benchmark_ requirement.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["benchmark_requirements"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/benchmark_types/":{"get":{"operationId":"benchmark_types_list","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"query","name":"benchmark_source","schema":{"type":"string","x-spec-enum-id":"091a6ccd03b2ee84","nullable":true,"enum":["OWASP ASVS","OWASP Mobile ASVS","PCI"]},"description":"* `PCI` - PCI\n* `OWASP ASVS` - OWASP ASVS\n* `OWASP Mobile ASVS` - OWASP Mobile ASVS"},{"in":"query","name":"created","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"enabled","schema":{"type":"boolean"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"name","schema":{"type":"string"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"},{"in":"query","name":"updated","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"version","schema":{"type":"string"}}],"tags":["benchmark_types"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedBenchmarkTypeList"}}},"description":""}}},"post":{"operationId":"benchmark_types_create","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","tags":["benchmark_types"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BenchmarkTypeRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/BenchmarkTypeRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/BenchmarkTypeRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BenchmarkType"}}},"description":""}}}},"/api/v2/benchmark_types/{id}/":{"get":{"operationId":"benchmark_types_retrieve","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this benchmark_ type.","required":true},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"}],"tags":["benchmark_types"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BenchmarkType"}}},"description":""}}},"put":{"operationId":"benchmark_types_update","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this benchmark_ type.","required":true}],"tags":["benchmark_types"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BenchmarkTypeRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/BenchmarkTypeRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/BenchmarkTypeRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BenchmarkType"}}},"description":""}}},"patch":{"operationId":"benchmark_types_partial_update","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this benchmark_ type.","required":true}],"tags":["benchmark_types"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedBenchmarkTypeRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedBenchmarkTypeRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedBenchmarkTypeRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BenchmarkType"}}},"description":""}}},"delete":{"operationId":"benchmark_types_destroy","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this benchmark_ type.","required":true}],"tags":["benchmark_types"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/benchmark_types/{id}/delete_preview/":{"get":{"operationId":"benchmark_types_delete_preview_list","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this benchmark_ type.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["benchmark_types"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/celery/queue/details/":{"get":{"operationId":"celery_queue_details_list","description":"Scans every message in the queue (O(N)) and returns task name, count, and oldest/newest queue positions. May be slow for large queues.","summary":"Get per-task breakdown of the Celery queue","tags":["celery"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CeleryQueueTaskDetail"}}}},"description":""}}}},"/api/v2/celery/queue/purge/":{"post":{"operationId":"celery_queue_purge_create","description":"Removes all pending tasks from the default Celery queue. Tasks already being executed by workers are not affected. Note: if deduplication tasks were queued, you may need to re-run deduplication manually via `python manage.py dedupe`.","summary":"Purge all pending Celery tasks from the queue","tags":["celery"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"purged":{"type":"integer"}}}}},"description":""}}}},"/api/v2/celery/queue/task/purge/":{"post":{"operationId":"celery_queue_task_purge_create","description":"Removes all pending tasks matching the given task name from the default Celery queue.","summary":"Purge all queued tasks with a given task name","tags":["celery"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"task_name":{"type":"string"}},"required":["task_name"]}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"purged":{"type":"integer"}}}}},"description":""}}}},"/api/v2/celery/status/":{"get":{"operationId":"celery_status_retrieve","description":"Returns Celery worker liveness, pending queue length, and the active task timeout/expiry configuration. Uses the Celery control channel (pidbox) for worker status so it works correctly even when the task queue is clogged.","summary":"Get Celery worker and queue status","tags":["celery"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CeleryStatus"}}},"description":""}}}},"/api/v2/cloud_firewall/":{"get":{"operationId":"cloud_firewall_list","parameters":[{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["cloud_firewall"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedFireWallList"}}},"description":""}}}},"/api/v2/cloud_firewall/{id}/":{"get":{"operationId":"cloud_firewall_retrieve","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this fire wall.","required":true}],"tags":["cloud_firewall"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FireWall"}}},"description":""}}}},"/api/v2/cloud_firewall/add_rules/":{"post":{"operationId":"cloud_firewall_add_rules_create","tags":["cloud_firewall"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModifyFireWallRulesRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ModifyFireWallRulesRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ModifyFireWallRulesRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModifyFireWallRules"}}},"description":""}}}},"/api/v2/cloud_firewall/remove_rules/":{"post":{"operationId":"cloud_firewall_remove_rules_create","tags":["cloud_firewall"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModifyFireWallRulesRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ModifyFireWallRulesRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ModifyFireWallRulesRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModifyFireWallRules"}}},"description":""}}}},"/api/v2/cloud_firewall/update_external_services/":{"post":{"operationId":"cloud_firewall_update_external_services_create","tags":["cloud_firewall"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FirewallExternalServicesRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/FirewallExternalServicesRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/FirewallExternalServicesRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FirewallExternalServices"}}},"description":""}}}},"/api/v2/configuration_permissions/":{"get":{"operationId":"configuration_permissions_list","parameters":[{"in":"query","name":"codename","schema":{"type":"string"}},{"in":"query","name":"id","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"name","schema":{"type":"string"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["configuration_permissions"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedExtendedConfigurationPermissionList"}}},"description":""}}}},"/api/v2/configuration_permissions/{id}/":{"get":{"operationId":"configuration_permissions_retrieve","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this permission.","required":true}],"tags":["configuration_permissions"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtendedConfigurationPermission"}}},"description":""}}}},"/api/v2/connector_operations/":{"get":{"operationId":"connector_operations_list","parameters":[{"in":"query","name":"connector_config","schema":{"type":"integer"}},{"in":"query","name":"end_time_after","schema":{"type":"string","format":"date-time"},"description":"Filter by end_time range. Use `end_time_after` and `end_time_before`. Example: `/api/v2/connectors_operations/?end_time_after=2024-01-01T00:00:00Z&end_time_before=2024-02-01T00:00:00Z`"},{"in":"query","name":"end_time_before","schema":{"type":"string","format":"date-time"},"description":"Filter by end_time range. Use `end_time_after` and `end_time_before`. Example: `/api/v2/connectors_operations/?end_time_after=2024-01-01T00:00:00Z&end_time_before=2024-02-01T00:00:00Z`"},{"in":"query","name":"errors","schema":{"type":"array","items":{"type":"integer"}},"explode":true,"style":"form"},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-duration","-end_time","-id","-operation","-start_time","-status","-trigger","duration","end_time","id","operation","start_time","status","trigger"]}},"description":"Ordering\n\n* `id` - Id\n* `-id` - Id (descending)\n* `duration` - Duration\n* `-duration` - Duration (descending)\n* `operation` - Operation\n* `-operation` - Operation (descending)\n* `status` - Status\n* `-status` - Status (descending)\n* `trigger` - Trigger\n* `-trigger` - Trigger (descending)\n* `start_time` - Start time\n* `-start_time` - Start time (descending)\n* `end_time` - End time\n* `-end_time` - End time (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"operation","schema":{"type":"string","x-spec-enum-id":"60d91fd4719782f6","nullable":true,"enum":["DISCOVER","SYNC"]},"description":"Filter by operation type.\n\n* `DISCOVER` - DISCOVER\n* `SYNC` - SYNC"},{"in":"query","name":"start_time_after","schema":{"type":"string","format":"date-time"},"description":"Filter by start_time range. Use `start_time_after` and `start_time_before`. Example: `/api/v2/connectors_operations/?start_time_after=2024-01-01T00:00:00Z&start_time_before=2024-02-01T00:00:00Z`"},{"in":"query","name":"start_time_before","schema":{"type":"string","format":"date-time"},"description":"Filter by start_time range. Use `start_time_after` and `start_time_before`. Example: `/api/v2/connectors_operations/?start_time_after=2024-01-01T00:00:00Z&start_time_before=2024-02-01T00:00:00Z`"},{"in":"query","name":"status","schema":{"type":"string","x-spec-enum-id":"eafe5fec03783907","nullable":true,"enum":["ERROR","PENDING","SUCCESS","TIMEOUT"]},"description":"Filter by status type.\n\n* `SUCCESS` - SUCCESS\n* `ERROR` - ERROR\n* `TIMEOUT` - TIMEOUT\n* `PENDING` - PENDING"},{"in":"query","name":"trigger","schema":{"type":"string","x-spec-enum-id":"b656895639c7afd7","nullable":true,"enum":["MANUAL","SCHEDULED"]},"description":"Filter by trigger type.\n\n* `SCHEDULED` - SCHEDULED\n* `MANUAL` - MANUAL"}],"tags":["connector_operations"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedOperationList"}}},"description":""}}}},"/api/v2/connector_operations/{id}/":{"get":{"operationId":"connector_operations_retrieve","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this operation.","required":true}],"tags":["connector_operations"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Operation"}}},"description":""}}}},"/api/v2/connector_records/":{"get":{"operationId":"connector_records_list","parameters":[{"in":"query","name":"connector_config","schema":{"type":"integer"}},{"in":"query","name":"connector_type","schema":{"type":"string","enum":["assets","findings"]},"description":"Filter by connector type (findings or assets).\n\n* `findings` - findings\n* `assets` - assets"},{"in":"query","name":"delta_sync_timestamp","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"finalized_after","schema":{"type":"string","format":"date-time"},"description":"Filter by finalized range. Use `finalized_after` and `finalized_before`. Example: `/api/v2/connectors_operations/?finalized_after=2024-01-01T00:00:00Z&finalized_before=2024-02-01T00:00:00Z`"},{"in":"query","name":"finalized_before","schema":{"type":"string","format":"date-time"},"description":"Filter by finalized range. Use `finalized_after` and `finalized_before`. Example: `/api/v2/connectors_operations/?finalized_after=2024-01-01T00:00:00Z&finalized_before=2024-02-01T00:00:00Z`"},{"in":"query","name":"first_seen_after","schema":{"type":"string","format":"date-time"},"description":"Filter by first_seen range. Use `first_seen_after` and `first_seen_before`. Example: `/api/v2/connectors_operations/?first_seen_after=2024-01-01T00:00:00Z&first_seen_before=2024-02-01T00:00:00Z`"},{"in":"query","name":"first_seen_before","schema":{"type":"string","format":"date-time"},"description":"Filter by first_seen range. Use `first_seen_after` and `first_seen_before`. Example: `/api/v2/connectors_operations/?first_seen_after=2024-01-01T00:00:00Z&first_seen_before=2024-02-01T00:00:00Z`"},{"in":"query","name":"last_seen_after","schema":{"type":"string","format":"date-time"},"description":"Filter by last_seen range. Use `last_seen_after` and `last_seen_before`. Example: `/api/v2/connectors_operations/?last_seen_after=2024-01-01T00:00:00Z&last_seen_before=2024-02-01T00:00:00Z`"},{"in":"query","name":"last_seen_before","schema":{"type":"string","format":"date-time"},"description":"Filter by last_seen range. Use `last_seen_after` and `last_seen_before`. Example: `/api/v2/connectors_operations/?last_seen_after=2024-01-01T00:00:00Z&last_seen_before=2024-02-01T00:00:00Z`"},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-finalized","-first_seen","-id","-last_seen","-state","finalized","first_seen","id","last_seen","state"]}},"description":"Ordering\n\n* `id` - Id\n* `-id` - Id (descending)\n* `first_seen` - First seen\n* `-first_seen` - First seen (descending)\n* `last_seen` - Last seen\n* `-last_seen` - Last seen (descending)\n* `finalized` - Finalized\n* `-finalized` - Finalized (descending)\n* `state` - State\n* `-state` - State (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"product_name","schema":{"type":"string"}},{"in":"query","name":"state","schema":{"type":"string","x-spec-enum-id":"bd142512a4c8aa6e","nullable":true,"enum":["GOOD","IGNORED","MISSING","NEW","PARTIAL","STALE"]},"description":"Filter by state type.\n\n* `NEW` - NEW\n* `GOOD` - GOOD\n* `STALE` - STALE\n* `MISSING` - MISSING\n* `IGNORED` - IGNORED\n* `PARTIAL` - PARTIAL"},{"in":"query","name":"vendor_equivalent_product_description","schema":{"type":"string"}},{"in":"query","name":"vendor_equivalent_product_id","schema":{"type":"string"}},{"in":"query","name":"vendor_equivalent_product_name","schema":{"type":"string"}}],"tags":["connector_records"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedRecordList"}}},"description":""}}}},"/api/v2/connector_records/{id}/":{"get":{"operationId":"connector_records_retrieve","parameters":[{"in":"query","name":"extended_mapping","schema":{"type":"boolean"},"description":"Expand the details of the mapping for further details"},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this record.","required":true}],"tags":["connector_records"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Record"}}},"description":""}}},"delete":{"operationId":"connector_records_destroy","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this record.","required":true}],"tags":["connector_records"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/connector_records/{id}/assign_product/":{"post":{"operationId":"connector_records_assign_product_create","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this record.","required":true}],"tags":["connector_records"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicAssignProductRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PublicAssignProductRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PublicAssignProductRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicAssignProduct"}}},"description":""}}}},"/api/v2/connector_records/{id}/update-subtype-filters/":{"patch":{"operationId":"connector_records_update_subtype_filters_partial_update","description":"User-facing variant -- same serializer; filter values aren't asymmetric between\nGo and user the way subtype status is.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this record.","required":true}],"tags":["connector_records"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedMappingSubtypeFiltersRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedMappingSubtypeFiltersRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedMappingSubtypeFiltersRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MappingSubtypeFilters"}}},"description":""}}}},"/api/v2/connector_records/{id}/update-subtype-status/":{"patch":{"operationId":"connector_records_update_subtype_status_partial_update","description":"User-facing variant — restricts status choices to GOOD and IGNORED.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this record.","required":true}],"tags":["connector_records"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedPublicMappingSubtypeStatusRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedPublicMappingSubtypeStatusRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedPublicMappingSubtypeStatusRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicMappingSubtypeStatus"}}},"description":""}}}},"/api/v2/connector_records/{id}/update_status/":{"patch":{"operationId":"connector_records_update_status_partial_update","description":"Accepted values for state are \"NEW\" and \"IGNORED\"","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this record.","required":true}],"tags":["connector_records"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedRecordStatusRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedRecordStatusRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedRecordStatusRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecordStatus"}}},"description":""}}}},"/api/v2/dashboard/":{"get":{"operationId":"dashboard_list","parameters":[{"in":"query","name":"graphs","schema":{"type":"boolean"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["user"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"questionnaires","schema":{"type":"boolean"}},{"in":"query","name":"tables","schema":{"type":"boolean"}},{"in":"query","name":"tiles","schema":{"type":"array","items":{"type":"integer"}},"explode":true,"style":"form"},{"in":"query","name":"user","schema":{"type":"array","items":{"type":"integer"}},"explode":true,"style":"form"}],"tags":["dashboard"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDashboardConfigurationList"}}},"description":""}}},"post":{"operationId":"dashboard_create","tags":["dashboard"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardConfigurationRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/DashboardConfigurationRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/DashboardConfigurationRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardConfiguration"}}},"description":""}}}},"/api/v2/dashboard/{id}/":{"get":{"operationId":"dashboard_retrieve","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this dashboard configuration.","required":true},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["user"]}},"description":"List of fields for which to prefetch model instances and add those to the response"}],"tags":["dashboard"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardConfiguration"}}},"description":""}}},"put":{"operationId":"dashboard_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this dashboard configuration.","required":true}],"tags":["dashboard"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardConfigurationRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/DashboardConfigurationRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/DashboardConfigurationRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardConfiguration"}}},"description":""}}},"patch":{"operationId":"dashboard_partial_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this dashboard configuration.","required":true}],"tags":["dashboard"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedDashboardConfigurationRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedDashboardConfigurationRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedDashboardConfigurationRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardConfiguration"}}},"description":""}}},"delete":{"operationId":"dashboard_destroy","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this dashboard configuration.","required":true}],"tags":["dashboard"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/dashboard/{id}/delete_preview/":{"get":{"operationId":"dashboard_delete_preview_list","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this dashboard configuration.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["dashboard"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/dashboard/{id}/reset/":{"post":{"operationId":"dashboard_reset_create","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this dashboard configuration.","required":true}],"tags":["dashboard"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardConfigurationRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/DashboardConfigurationRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/DashboardConfigurationRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardConfiguration"}}},"description":""}}}},"/api/v2/dashboard/filter_options/":{"get":{"operationId":"dashboard_filter_options_retrieve","tags":["dashboard"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardConfiguration"}}},"description":""}}}},"/api/v2/dashboard/graded_products/":{"get":{"operationId":"dashboard_graded_products_retrieve","tags":["dashboard"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardConfiguration"}}},"description":""}}}},"/api/v2/dashboard/graph_data/":{"get":{"operationId":"dashboard_graph_data_retrieve","tags":["dashboard"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardConfiguration"}}},"description":""}}}},"/api/v2/dashboard/questionnaires/":{"get":{"operationId":"dashboard_questionnaires_retrieve","tags":["dashboard"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardConfiguration"}}},"description":""}}}},"/api/v2/dashboard_tile/":{"get":{"operationId":"dashboard_tile_list","parameters":[{"in":"query","name":"color","schema":{"type":"string","x-spec-enum-id":"9c9a36b0f59676ad","title":"Tile Color","enum":["blue","cyan","dark","green","indigo","light","orange","pink","purple","red","teal","yellow"]},"description":"The color of this tile (if dynamic tile is enabled, selected color will be ignored).\n\n* `red` - Red\n* `orange` - Orange\n* `yellow` - Yellow\n* `green` - Green\n* `teal` - Teal\n* `cyan` - Cyan\n* `blue` - Blue\n* `indigo` - Indigo\n* `purple` - Purple\n* `pink` - Pink\n* `dark` - Dark\n* `light` - Light"},{"in":"query","name":"count","schema":{"type":"integer"}},{"in":"query","name":"dynamic","schema":{"type":"boolean"}},{"in":"query","name":"footer","schema":{"type":"string"}},{"in":"query","name":"header","schema":{"type":"string"}},{"in":"query","name":"icon","schema":{"type":"string","x-spec-enum-id":"c3556497146d88cf","title":"Tile Icon","enum":["align-left","ban","bars","bolt","box-archive","bug","bullseye","calendar-days","certificate","check","circle-exclamation","circle-info","circle-question","clock","code","download","file","filter","fire-extinguisher","flag","gear","house","list-check","lock","lock-open","magnifying-glass","user"]},"description":"The icon to display within this tile.\n\n* `align-left` - Align Left\n* `box-archive` - Archive\n* `bars` - Bars\n* `ban` - Ban\n* `bolt` - Bolt\n* `bug` - Bug\n* `bullseye` - Bullseye\n* `calendar-days` - Calendar\n* `certificate` - Certificate\n* `check` - Check\n* `code` - Code\n* `gear` - Cog\n* `clock` - Clock\n* `download` - Download\n* `circle-exclamation` - Exclamation\n* `file` - File\n* `filter` - Filter\n* `fire-extinguisher` - Fire Extinguisher\n* `flag` - Flag\n* `house` - Home\n* `circle-info` - Info\n* `lock` - Lock\n* `circle-question` - Question\n* `magnifying-glass` - Search\n* `list-check` - Tasks\n* `lock-open` - Unlock\n* `user` - User"},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"maximum","schema":{"type":"integer"}},{"in":"query","name":"minimum","schema":{"type":"integer"}},{"in":"query","name":"model","schema":{"type":"string","x-spec-enum-id":"a6e596d1d03709b5","title":"Tile Type","enum":["endpoint","engagement","finding","prod-grade","product","scan-time","sla","test"]},"description":"The type of data to display within this tile.\n\n* `product` - Product\n* `engagement` - Engagement\n* `test` - Test\n* `finding` - Finding\n* `endpoint` - Endpoint\n* `sla` - SLA Violation\n* `scan-time` - Scan Time Violation\n* `prod-grade` - Product Grade"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["dashboard_tile"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDashboardTileList"}}},"description":""}}},"post":{"operationId":"dashboard_tile_create","tags":["dashboard_tile"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardTileRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/DashboardTileRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/DashboardTileRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardTile"}}},"description":""}}}},"/api/v2/dashboard_tile/{id}/":{"get":{"operationId":"dashboard_tile_retrieve","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this dashboard tile.","required":true}],"tags":["dashboard_tile"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardTile"}}},"description":""}}},"put":{"operationId":"dashboard_tile_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this dashboard tile.","required":true}],"tags":["dashboard_tile"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardTileRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/DashboardTileRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/DashboardTileRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardTile"}}},"description":""}}},"patch":{"operationId":"dashboard_tile_partial_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this dashboard tile.","required":true}],"tags":["dashboard_tile"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedDashboardTileRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedDashboardTileRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedDashboardTileRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardTile"}}},"description":""}}},"delete":{"operationId":"dashboard_tile_destroy","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this dashboard tile.","required":true}],"tags":["dashboard_tile"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/dashboard_tile/{id}/fetch_count/":{"get":{"operationId":"dashboard_tile_fetch_count_retrieve","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this dashboard tile.","required":true}],"tags":["dashboard_tile"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardTile"}}},"description":""}}}},"/api/v2/dashboard_tile/all_tiles/":{"get":{"operationId":"dashboard_tile_all_tiles_retrieve","tags":["dashboard_tile"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardTile"}}},"description":""}}}},"/api/v2/dashboard_tile/fetch_counts/":{"get":{"operationId":"dashboard_tile_fetch_counts_retrieve","description":"Fetch counts for all tiles in one request.\n\nAll tiles are processed within a single request so that\n@cache_for_request on get_authorized_* functions ensures\nthe expensive authorization subqueries are built only once\nper model type, then reused across all tiles.","tags":["dashboard_tile"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardTile"}}},"description":""}}}},"/api/v2/dashboards/layouts/":{"get":{"operationId":"dashboards_layouts_list","description":"CRUD + sharing + cloning for dashboard layouts.\n\nA layout is a persistent collection of widgets the user assembles\ninto a dashboard. Each layout belongs to a single user (or to the\nshared catalog when ``is_shared=True``) and carries:\n\n  * ``widgets`` — an ordered list of widget objects, each with a\n    ``type`` (one of the values from\n    ``/api/v2/dashboards/widget_catalog/``), a ``title``, a\n    per-widget ``config`` matching that type's schema, and a\n    UUID ``id`` that ties the widget to its grid position.\n  * ``layout`` — a UUID → grid-position map (``{x, y, w, h,\n    min_w, min_h, max_w, max_h}``) describing where each widget\n    sits on the 12-column grid.\n  * ``settings`` — free-form per-layout settings the frontend\n    owns (column count overrides, theme tweaks, ...).\n\nAuthorisation model:\n\n  * The whole surface is gated behind the ``dashboard_v2`` feature\n    flag (``DashboardV2Enabled``); when it is off every endpoint\n    returns 403 regardless of the caller's role.\n  * Any authenticated user can list / read their own layouts and\n    every shared (``is_shared=True``) layout.\n  * Anyone can create their own layouts.\n  * Publishing a shared layout (``is_shared=True`` on create or\n    update) requires the global maintainer permission.\n  * Modifying / deleting a shared layout requires the same.\n  * Cloning is always allowed — the clone is owned by the caller\n    and is independent of the source.\n\nTypical AI-agent flow:\n\n  1. ``GET widget_catalog/`` once to discover widget types.\n  2. ``POST layouts/`` to create a new layout with the desired\n     ``widgets`` + ``layout`` map.\n  3. (Optionally) ``POST layouts/{id}/set_default/`` to make the\n     new layout the user's default landing dashboard.","parameters":[{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["Dashboards · Layouts"],"security":[{"cookieAuth":[]},{"tokenAuth":[]},{"basicAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDashboardLayoutList"}}},"description":""}}},"post":{"operationId":"dashboards_layouts_create","description":"CRUD + sharing + cloning for dashboard layouts.\n\nA layout is a persistent collection of widgets the user assembles\ninto a dashboard. Each layout belongs to a single user (or to the\nshared catalog when ``is_shared=True``) and carries:\n\n  * ``widgets`` — an ordered list of widget objects, each with a\n    ``type`` (one of the values from\n    ``/api/v2/dashboards/widget_catalog/``), a ``title``, a\n    per-widget ``config`` matching that type's schema, and a\n    UUID ``id`` that ties the widget to its grid position.\n  * ``layout`` — a UUID → grid-position map (``{x, y, w, h,\n    min_w, min_h, max_w, max_h}``) describing where each widget\n    sits on the 12-column grid.\n  * ``settings`` — free-form per-layout settings the frontend\n    owns (column count overrides, theme tweaks, ...).\n\nAuthorisation model:\n\n  * The whole surface is gated behind the ``dashboard_v2`` feature\n    flag (``DashboardV2Enabled``); when it is off every endpoint\n    returns 403 regardless of the caller's role.\n  * Any authenticated user can list / read their own layouts and\n    every shared (``is_shared=True``) layout.\n  * Anyone can create their own layouts.\n  * Publishing a shared layout (``is_shared=True`` on create or\n    update) requires the global maintainer permission.\n  * Modifying / deleting a shared layout requires the same.\n  * Cloning is always allowed — the clone is owned by the caller\n    and is independent of the source.\n\nTypical AI-agent flow:\n\n  1. ``GET widget_catalog/`` once to discover widget types.\n  2. ``POST layouts/`` to create a new layout with the desired\n     ``widgets`` + ``layout`` map.\n  3. (Optionally) ``POST layouts/{id}/set_default/`` to make the\n     new layout the user's default landing dashboard.","tags":["Dashboards · Layouts"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardLayoutRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/DashboardLayoutRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/DashboardLayoutRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]},{"basicAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardLayout"}}},"description":""}}}},"/api/v2/dashboards/layouts/{id}/":{"get":{"operationId":"dashboards_layouts_retrieve","description":"CRUD + sharing + cloning for dashboard layouts.\n\nA layout is a persistent collection of widgets the user assembles\ninto a dashboard. Each layout belongs to a single user (or to the\nshared catalog when ``is_shared=True``) and carries:\n\n  * ``widgets`` — an ordered list of widget objects, each with a\n    ``type`` (one of the values from\n    ``/api/v2/dashboards/widget_catalog/``), a ``title``, a\n    per-widget ``config`` matching that type's schema, and a\n    UUID ``id`` that ties the widget to its grid position.\n  * ``layout`` — a UUID → grid-position map (``{x, y, w, h,\n    min_w, min_h, max_w, max_h}``) describing where each widget\n    sits on the 12-column grid.\n  * ``settings`` — free-form per-layout settings the frontend\n    owns (column count overrides, theme tweaks, ...).\n\nAuthorisation model:\n\n  * The whole surface is gated behind the ``dashboard_v2`` feature\n    flag (``DashboardV2Enabled``); when it is off every endpoint\n    returns 403 regardless of the caller's role.\n  * Any authenticated user can list / read their own layouts and\n    every shared (``is_shared=True``) layout.\n  * Anyone can create their own layouts.\n  * Publishing a shared layout (``is_shared=True`` on create or\n    update) requires the global maintainer permission.\n  * Modifying / deleting a shared layout requires the same.\n  * Cloning is always allowed — the clone is owned by the caller\n    and is independent of the source.\n\nTypical AI-agent flow:\n\n  1. ``GET widget_catalog/`` once to discover widget types.\n  2. ``POST layouts/`` to create a new layout with the desired\n     ``widgets`` + ``layout`` map.\n  3. (Optionally) ``POST layouts/{id}/set_default/`` to make the\n     new layout the user's default landing dashboard.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this dashboard layout.","required":true}],"tags":["Dashboards · Layouts"],"security":[{"cookieAuth":[]},{"tokenAuth":[]},{"basicAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardLayout"}}},"description":""}}},"put":{"operationId":"dashboards_layouts_update","description":"CRUD + sharing + cloning for dashboard layouts.\n\nA layout is a persistent collection of widgets the user assembles\ninto a dashboard. Each layout belongs to a single user (or to the\nshared catalog when ``is_shared=True``) and carries:\n\n  * ``widgets`` — an ordered list of widget objects, each with a\n    ``type`` (one of the values from\n    ``/api/v2/dashboards/widget_catalog/``), a ``title``, a\n    per-widget ``config`` matching that type's schema, and a\n    UUID ``id`` that ties the widget to its grid position.\n  * ``layout`` — a UUID → grid-position map (``{x, y, w, h,\n    min_w, min_h, max_w, max_h}``) describing where each widget\n    sits on the 12-column grid.\n  * ``settings`` — free-form per-layout settings the frontend\n    owns (column count overrides, theme tweaks, ...).\n\nAuthorisation model:\n\n  * The whole surface is gated behind the ``dashboard_v2`` feature\n    flag (``DashboardV2Enabled``); when it is off every endpoint\n    returns 403 regardless of the caller's role.\n  * Any authenticated user can list / read their own layouts and\n    every shared (``is_shared=True``) layout.\n  * Anyone can create their own layouts.\n  * Publishing a shared layout (``is_shared=True`` on create or\n    update) requires the global maintainer permission.\n  * Modifying / deleting a shared layout requires the same.\n  * Cloning is always allowed — the clone is owned by the caller\n    and is independent of the source.\n\nTypical AI-agent flow:\n\n  1. ``GET widget_catalog/`` once to discover widget types.\n  2. ``POST layouts/`` to create a new layout with the desired\n     ``widgets`` + ``layout`` map.\n  3. (Optionally) ``POST layouts/{id}/set_default/`` to make the\n     new layout the user's default landing dashboard.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this dashboard layout.","required":true}],"tags":["Dashboards · Layouts"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardLayoutRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/DashboardLayoutRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/DashboardLayoutRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]},{"basicAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardLayout"}}},"description":""}}},"patch":{"operationId":"dashboards_layouts_partial_update","description":"CRUD + sharing + cloning for dashboard layouts.\n\nA layout is a persistent collection of widgets the user assembles\ninto a dashboard. Each layout belongs to a single user (or to the\nshared catalog when ``is_shared=True``) and carries:\n\n  * ``widgets`` — an ordered list of widget objects, each with a\n    ``type`` (one of the values from\n    ``/api/v2/dashboards/widget_catalog/``), a ``title``, a\n    per-widget ``config`` matching that type's schema, and a\n    UUID ``id`` that ties the widget to its grid position.\n  * ``layout`` — a UUID → grid-position map (``{x, y, w, h,\n    min_w, min_h, max_w, max_h}``) describing where each widget\n    sits on the 12-column grid.\n  * ``settings`` — free-form per-layout settings the frontend\n    owns (column count overrides, theme tweaks, ...).\n\nAuthorisation model:\n\n  * The whole surface is gated behind the ``dashboard_v2`` feature\n    flag (``DashboardV2Enabled``); when it is off every endpoint\n    returns 403 regardless of the caller's role.\n  * Any authenticated user can list / read their own layouts and\n    every shared (``is_shared=True``) layout.\n  * Anyone can create their own layouts.\n  * Publishing a shared layout (``is_shared=True`` on create or\n    update) requires the global maintainer permission.\n  * Modifying / deleting a shared layout requires the same.\n  * Cloning is always allowed — the clone is owned by the caller\n    and is independent of the source.\n\nTypical AI-agent flow:\n\n  1. ``GET widget_catalog/`` once to discover widget types.\n  2. ``POST layouts/`` to create a new layout with the desired\n     ``widgets`` + ``layout`` map.\n  3. (Optionally) ``POST layouts/{id}/set_default/`` to make the\n     new layout the user's default landing dashboard.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this dashboard layout.","required":true}],"tags":["Dashboards · Layouts"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedDashboardLayoutRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedDashboardLayoutRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedDashboardLayoutRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]},{"basicAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardLayout"}}},"description":""}}},"delete":{"operationId":"dashboards_layouts_destroy","description":"CRUD + sharing + cloning for dashboard layouts.\n\nA layout is a persistent collection of widgets the user assembles\ninto a dashboard. Each layout belongs to a single user (or to the\nshared catalog when ``is_shared=True``) and carries:\n\n  * ``widgets`` — an ordered list of widget objects, each with a\n    ``type`` (one of the values from\n    ``/api/v2/dashboards/widget_catalog/``), a ``title``, a\n    per-widget ``config`` matching that type's schema, and a\n    UUID ``id`` that ties the widget to its grid position.\n  * ``layout`` — a UUID → grid-position map (``{x, y, w, h,\n    min_w, min_h, max_w, max_h}``) describing where each widget\n    sits on the 12-column grid.\n  * ``settings`` — free-form per-layout settings the frontend\n    owns (column count overrides, theme tweaks, ...).\n\nAuthorisation model:\n\n  * The whole surface is gated behind the ``dashboard_v2`` feature\n    flag (``DashboardV2Enabled``); when it is off every endpoint\n    returns 403 regardless of the caller's role.\n  * Any authenticated user can list / read their own layouts and\n    every shared (``is_shared=True``) layout.\n  * Anyone can create their own layouts.\n  * Publishing a shared layout (``is_shared=True`` on create or\n    update) requires the global maintainer permission.\n  * Modifying / deleting a shared layout requires the same.\n  * Cloning is always allowed — the clone is owned by the caller\n    and is independent of the source.\n\nTypical AI-agent flow:\n\n  1. ``GET widget_catalog/`` once to discover widget types.\n  2. ``POST layouts/`` to create a new layout with the desired\n     ``widgets`` + ``layout`` map.\n  3. (Optionally) ``POST layouts/{id}/set_default/`` to make the\n     new layout the user's default landing dashboard.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this dashboard layout.","required":true}],"tags":["Dashboards · Layouts"],"security":[{"cookieAuth":[]},{"tokenAuth":[]},{"basicAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/dashboards/layouts/{id}/clone/":{"post":{"operationId":"dashboards_layouts_clone","description":"Creates a personal copy of the source layout. Each widget in the copy gets a freshly-generated UUID so the clone doesn't share widget identifiers with the source — important so subsequent PATCHes to the clone don't accidentally rewrite the source. The clone is owned by the caller and starts with ``is_shared=false`` regardless of the source's sharing state.\n\nIf the optional ``name`` field is omitted, the clone is named ``\"Copy of <source name>\"``. A 400 is returned if a layout with the target name already exists for the caller — clients should pick a different ``name`` or delete the existing one first.","summary":"Clone an existing layout into the caller's own space","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this dashboard layout.","required":true}],"tags":["Dashboards · Layouts"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardLayoutCloneRequestRequest"},"examples":{"CloneWithCustomName":{"value":{"name":"My Triage Dashboard"},"summary":"Clone with custom name"}}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/DashboardLayoutCloneRequestRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/DashboardLayoutCloneRequestRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]},{"basicAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardLayout"}}},"description":""},"400":{"description":"Name already exists for caller."}}}},"/api/v2/dashboards/layouts/{id}/set_default/":{"post":{"operationId":"dashboards_layouts_set_default","description":"Sets the layout identified by ``id`` as the user's default. The default determines which dashboard the UI renders on first load and which layout the ``is_default=true`` flag points at in serialised responses. A user may only set their OWN layouts as the default — attempts to default a shared catalog row (which has no owner) return 400. The previous default is replaced atomically.","summary":"Mark a layout as the caller's default landing dashboard","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this dashboard layout.","required":true}],"tags":["Dashboards · Layouts"],"security":[{"cookieAuth":[]},{"tokenAuth":[]},{"basicAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardLayout"}}},"description":""},"400":{"description":"Not the layout owner."}}}},"/api/v2/dashboards/layouts/for_current_user/":{"get":{"operationId":"dashboards_layouts_for_current_user","description":"Returns a ``{results, default_id}`` envelope describing every layout the caller owns plus the id of their default layout. On a first hit (no owned layouts), lazily clones the starter template into the caller's own space so the very first call always returns at least one layout — subsequent calls are idempotent.\n\nUse this on app load to populate the dashboard picker without juggling separate ``GET layouts/`` and ``GET shared/`` calls.","summary":"Bootstrap endpoint — list the caller's layouts + default id","tags":["Dashboards · Layouts"],"security":[{"cookieAuth":[]},{"tokenAuth":[]},{"basicAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardLayoutsForCurrentUserResponse"}}},"description":""}}}},"/api/v2/dashboards/layouts/shared/":{"get":{"operationId":"dashboards_layouts_shared","description":"Returns the set of layouts visible to every authenticated user — the curated catalog templates (Default Dashboard, Priority Layout, Mitigation Layout, Tool Layout) plus any team-published shared layouts. Catalog rows carry ``is_catalog=true``; user-published ones carry ``is_catalog=false``.","summary":"List every shared (catalog or team-published) layout","parameters":[{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["Dashboards · Layouts"],"security":[{"cookieAuth":[]},{"tokenAuth":[]},{"basicAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDashboardLayoutList"}}},"description":""}}}},"/api/v2/dashboards/widget_catalog/":{"get":{"operationId":"dashboards_widget_catalog_list","description":"Returns the full widget catalog plus the four category groups. Each catalog entry carries the widget ``type`` (the value to set on a widget in a saved layout), a human-readable label and description, the category id, the data endpoints the widget reads from, and a minimal ``config_example`` you can copy as a starting point. The order of the entries is editorial — the Vue UI's Add Widget Dialog renders them in this order, and client-side reorderings should preserve it.","summary":"List every widget type the dashboard supports","parameters":[{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["Dashboards · Widget Catalog"],"security":[{"cookieAuth":[]},{"tokenAuth":[]},{"basicAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedWidgetCatalogResponseList"}}},"description":""}}}},"/api/v2/dashboards/widget_data/aggregate/":{"post":{"operationId":"dashboards_widget_data_aggregate","description":"Returns a ``{labels, series, group_by, aggregation, time_bucket, model, model_label, group_by_label}`` envelope suitable for direct rendering as an eCharts bar / line / pie / area chart. ``group_by`` must be a key from the model's dimension catalog (see ``GET dimensions/?model=<m>``); ``aggregation`` is ``count`` only in the v1 API.","summary":"Group-by aggregation for the Graph widget","tags":["Dashboards · Widget Data"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WidgetAggregateRequestRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/WidgetAggregateRequestRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/WidgetAggregateRequestRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]},{"basicAuth":[]}],"responses":{"200":{"description":"Chart envelope (labels + series + metadata)."}}}},"/api/v2/dashboards/widget_data/aging/":{"post":{"operationId":"dashboards_widget_data_aging","description":"Returns one bar per age bucket (defined by ``boundaries`` — defaults to [30, 90, 180] producing [0-30d, 30-90d, 90-180d, 180+d]); each bar splits by severity. ``date_field`` picks which timestamp drives the bucketing (default ``created``).","summary":"Vulnerability aging — stacked bars by age bucket × severity","tags":["Dashboards · Widget Data"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WidgetAgingRequestRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/WidgetAgingRequestRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/WidgetAgingRequestRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]},{"basicAuth":[]}],"responses":{"200":{"description":"``{labels, series:[Critical, High, Medium, Low, Info], total}``."}}}},"/api/v2/dashboards/widget_data/count/":{"post":{"operationId":"dashboards_widget_data_count","description":"Returns the count of rows matching ``filters`` for the given ``model``. The same filter dict the equivalent list view accepts (the v2 ``Extended*Filter`` chain) works here — see the ``url_contracts`` in the catalog module for the URL-contract-safe subset. Result is cached for 10s per ``(user, model, filter-hash)`` to keep a dashboard refresh cheap.","summary":"Filtered row count for a single model","tags":["Dashboards · Widget Data"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WidgetCountRequestRequest"},"examples":{"ActiveCriticalFindings":{"value":{"model":"finding","filters":{"status_any":"Active","severity":"Critical"}},"summary":"Active critical findings"}}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/WidgetCountRequestRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/WidgetCountRequestRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]},{"basicAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WidgetCountResponse"}}},"description":""}}}},"/api/v2/dashboards/widget_data/dimensions/":{"get":{"operationId":"dashboards_widget_data_dimensions","description":"Returns the curated dimension catalog for one model — the same allowlist ``POST aggregate/`` enforces. Each entry carries the dim ``key`` (the value to pass as ``group_by``), a human ``label``, and a ``kind`` (``categorical`` / ``boolean`` / ``time`` / ``banded``). The Graph / Sunburst / Sankey config dialogs populate their dropdowns from this endpoint.","summary":"List the group-by dimensions valid for a model","parameters":[{"in":"query","name":"model","schema":{"type":"string"},"description":"Target model (finding / product / engagement / test).","required":true}],"tags":["Dashboards · Widget Data"],"security":[{"cookieAuth":[]},{"tokenAuth":[]},{"basicAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WidgetDimensionsResponse"}}},"description":""}}}},"/api/v2/dashboards/widget_data/heatmap/":{"post":{"operationId":"dashboards_widget_data_heatmap","description":"Returns a per-day count array suitable for an eCharts calendar series. Use ``date_field`` to choose which timestamp drives bucketing (``created`` for inflow, ``mitigated`` for outflow, ``date`` for discovery).","summary":"GitHub-style calendar heatmap of daily activity","tags":["Dashboards · Widget Data"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WidgetHeatmapRequestRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/WidgetHeatmapRequestRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/WidgetHeatmapRequestRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]},{"basicAuth":[]}],"responses":{"200":{"description":"``{cells:[{date, count}, ...], start, end, max, total}``."}}}},"/api/v2/dashboards/widget_data/mttr_mttd/":{"post":{"operationId":"dashboards_widget_data_mttr_mttd","description":"Paired time series — mean time to remediate (MTTR) and mean time to detect (MTTD) bucketed at ``time_bucket`` granularity over ``window_days``. MTTR anchors on ``mitigated`` minus ``date``; MTTD on ``last_status_update`` minus ``date``.","summary":"MTTR + MTTD time series","tags":["Dashboards · Widget Data"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WidgetMttrMttdRequestRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/WidgetMttrMttdRequestRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/WidgetMttrMttdRequestRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]},{"basicAuth":[]}],"responses":{"200":{"description":"``{mttr:{value, count, trend:[...], labels:[...]}, mttd:{value, count, trend, labels}, time_bucket, window_days}`` — ``value`` is mean days (or null when count is 0); ``trend`` is per-bucket mean days."}}}},"/api/v2/dashboards/widget_data/my_work/":{"get":{"operationId":"dashboards_widget_data_my_work","description":"Always scopes to ``request.user`` server-side — a shared layout that embeds this widget renders each viewer's own queue rather than the layout owner's. Use the ``buckets`` query param to subset which categories are returned; default is all three.","summary":"Per-caller work queue (assignments / mentions / reviews)","parameters":[{"in":"query","name":"buckets","schema":{"type":"string"},"description":"Comma-separated bucket names: assigned, mentions, pending_reviews. Omit for all."},{"in":"query","name":"limit","schema":{"type":"integer"},"description":"Max rows per bucket. 1-50, default 10."}],"tags":["Dashboards · Widget Data"],"security":[{"cookieAuth":[]},{"tokenAuth":[]},{"basicAuth":[]}],"responses":{"200":{"description":"``{assigned:[...], mentions:[...], pending_reviews:[...], totals:{assigned, mentions, pending_reviews}}`` — only the requested buckets are populated; ``totals`` always reflects all three."}}}},"/api/v2/dashboards/widget_data/priority_histogram/":{"post":{"operationId":"dashboards_widget_data_priority_histogram","description":"Returns an equal-width histogram of ``EnhancedFinding.priority`` over the filtered universe. Bins are auto-computed between the dataset's observed min and max. Findings with NULL priority (engine hasn't run yet) are reported separately as ``without_priority``.","summary":"Continuous distribution of priority scores","tags":["Dashboards · Widget Data"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WidgetPriorityHistogramRequestRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/WidgetPriorityHistogramRequestRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/WidgetPriorityHistogramRequestRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]},{"basicAuth":[]}],"responses":{"200":{"description":"``{min, max, bin_count, bin_width, bins:[{low, high, label, count}, ...], total, without_priority}``."}}}},"/api/v2/dashboards/widget_data/rate_chart/":{"post":{"operationId":"dashboards_widget_data_rate_chart","description":"Two FilterSets in one call — ``filters`` defines the universe (denominator); ``pass_filters`` defines the numerator subset. The endpoint groups both populations by ``group_by`` and emits per-category rates. Single round-trip replaces what would otherwise be N+1 count fetches.","summary":"Per-category numerator/denominator rate","tags":["Dashboards · Widget Data"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WidgetRateChartRequestRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/WidgetRateChartRequestRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/WidgetRateChartRequestRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]},{"basicAuth":[]}],"responses":{"200":{"description":"``{labels, series:[rate, numerator, denominator], ...}``."}}}},"/api/v2/dashboards/widget_data/recent_activity/":{"get":{"operationId":"dashboards_widget_data_recent_activity","description":"Returns the N most recently updated rows for the model scoped through the same ``get_authorized_*`` queryset the list view uses. Each row carries enough metadata (id, title, when, who) to render a clickable feed entry.","summary":"Most-recent rows for the chosen model","parameters":[{"in":"query","name":"limit","schema":{"type":"integer"},"description":"Row cap (per the recent_activity helper)."},{"in":"query","name":"model","schema":{"type":"string"},"description":"finding / engagement / test / risk_acceptance. Default finding."}],"tags":["Dashboards · Widget Data"],"security":[{"cookieAuth":[]},{"tokenAuth":[]},{"basicAuth":[]}],"responses":{"200":{"description":"``{items:[{id, title, when, ...}, ...], model:<str>, limit:<int>}``."}}}},"/api/v2/dashboards/widget_data/record_metrics/":{"get":{"operationId":"dashboards_widget_data_record_metrics","description":"Mirrors ``GET dimensions/`` but for the Top-N widget's records mode. Returns the allowlist of per-record metrics ``POST top_records/`` accepts as ``metric`` — e.g. ``priority``, ``numeric_grade``, ``oldest_open``, ``recently_mitigated``. Each entry carries a user-facing ``label`` plus the metric's natural sort direction.","summary":"List the per-record sort metrics valid for a model","parameters":[{"in":"query","name":"model","schema":{"type":"string"},"description":"Target model (finding / product).","required":true}],"tags":["Dashboards · Widget Data"],"security":[{"cookieAuth":[]},{"tokenAuth":[]},{"basicAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WidgetRecordMetricsResponse"}}},"description":""}}}},"/api/v2/dashboards/widget_data/risk_matrix/":{"post":{"operationId":"dashboards_widget_data_risk_matrix","description":"Returns a ``cells`` grid where rows are EPSS bands (top → bottom = highest probability → lowest) and columns are the chosen X dimension's canonical low → high-risk order. Findings with no EPSS data are excluded from the matrix and surfaced separately as ``without_epss``.","summary":"EPSS × risk-dimension 5×N heatmap (finding-only)","tags":["Dashboards · Widget Data"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WidgetRiskMatrixRequestRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/WidgetRiskMatrixRequestRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/WidgetRiskMatrixRequestRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]},{"basicAuth":[]}],"responses":{"200":{"description":"``{x_dim, x_dim_label, x_labels, y_labels, cells, total, without_epss}``."}}}},"/api/v2/dashboards/widget_data/sankey/":{"post":{"operationId":"dashboards_widget_data_sankey","description":"Returns ``{nodes, links}`` in eCharts sankey shape. Each node carries display ``label`` + namespaced ``name`` (``src::<value>`` / ``tgt::<value>``) so overlapping values across the two dims don't trip the DAG-cycle check eCharts applies.","summary":"Sankey flow — source dim → target dim","tags":["Dashboards · Widget Data"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WidgetSankeyRequestRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/WidgetSankeyRequestRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/WidgetSankeyRequestRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]},{"basicAuth":[]}],"responses":{"200":{"description":"``{nodes, links, source_dim, target_dim, ...}``."}}}},"/api/v2/dashboards/widget_data/saved_reports/":{"get":{"operationId":"dashboards_widget_data_saved_reports","description":"Returns the user's accessible Report Templates plus each template's ``latest_run`` metadata. Run + download is handled via the existing ``/api/vue/generated_reports/`` endpoint — this read-only endpoint just surfaces the catalog. Requires the ``reporting`` feature flag; instances without it return 403.","summary":"Caller's saved Report Templates with latest run state","parameters":[{"in":"query","name":"limit","schema":{"type":"integer"},"description":"Row cap, defaults to the SAVED_REPORTS default."}],"tags":["Dashboards · Widget Data"],"security":[{"cookieAuth":[]},{"tokenAuth":[]},{"basicAuth":[]}],"responses":{"200":{"description":"``{rows:[{id, name, latest_run, ...}, ...]}``."},"403":{"description":"Reporting feature flag is off."}}}},"/api/v2/dashboards/widget_data/scan_coverage/":{"post":{"operationId":"dashboards_widget_data_scan_coverage","description":"Returns one ``band`` per window — each with the count of matching rows scanned within ``window_days`` days, the universe total, and the percentage. Bands are sorted ascending by ``window_days`` so the funnel reads tightest-window-first.","summary":"Multi-window scan-recency rollup","tags":["Dashboards · Widget Data"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WidgetScanCoverageRequestRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/WidgetScanCoverageRequestRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/WidgetScanCoverageRequestRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]},{"basicAuth":[]}],"responses":{"200":{"description":"``{bands:[{window_days, label, scanned, total, percent}, ...], total, model}``."}}}},"/api/v2/dashboards/widget_data/sla_burndown/":{"get":{"operationId":"dashboards_widget_data_sla_burndown","description":"Returns up to ``limit`` findings whose SLA expiration is within ``days_threshold`` days of today. Use ``severity_filter`` (comma-separated, e.g. ``Critical,High``) to scope to a specific tier; omit for all severities. ``include_overdue=false`` excludes already-breached findings (default includes them).","summary":"Findings approaching SLA breach, sorted by days remaining","parameters":[{"in":"query","name":"days_threshold","schema":{"type":"integer"},"description":"SLA window, -365..365, default 14."},{"in":"query","name":"include_overdue","schema":{"type":"boolean"},"description":"Include findings past SLA. Default true."},{"in":"query","name":"limit","schema":{"type":"integer"},"description":"Row cap, 1..100, default 10."},{"in":"query","name":"severity_filter","schema":{"type":"string"},"description":"Comma-separated severities. Omit for all."}],"tags":["Dashboards · Widget Data"],"security":[{"cookieAuth":[]},{"tokenAuth":[]},{"basicAuth":[]}],"responses":{"200":{"description":"``{rows:[{id, title, severity, sla_days_remaining, product_name, ...}, ...]}``."}}}},"/api/v2/dashboards/widget_data/sunburst/":{"post":{"operationId":"dashboards_widget_data_sunburst","description":"Returns a ``{tree, hierarchy, total, labels, model}`` envelope in eCharts sunburst data shape. ``hierarchy`` is one or two dimension keys (1 = single-ring pie, 2 = drill-down sunburst). Top-level slices and per-parent fan-out are capped at 12 and 8 respectively; overflow rolls into synthetic 'Other' arcs.","summary":"Two-level hierarchical breakdown (sunburst chart)","tags":["Dashboards · Widget Data"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WidgetSunburstRequestRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/WidgetSunburstRequestRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/WidgetSunburstRequestRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]},{"basicAuth":[]}],"responses":{"200":{"description":"``{tree, hierarchy, total, labels, model}``."}}}},"/api/v2/dashboards/widget_data/top_records/":{"post":{"operationId":"dashboards_widget_data_top_records","description":"Returns the top N individual records (NOT aggregated buckets) ranked by a per-record metric — e.g. 'top products by grade', 'top findings by priority'. The ``metric`` must be one of the keys from ``GET record_metrics/?model=<m>``.","summary":"Top-N records by a per-record metric (Top-N widget, records mode)","tags":["Dashboards · Widget Data"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WidgetTopRecordsRequestRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/WidgetTopRecordsRequestRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/WidgetTopRecordsRequestRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]},{"basicAuth":[]}],"responses":{"200":{"description":"``{labels, series, metric, model, ...}`` chart envelope."}}}},"/api/v2/dashboards/widget_data/treemap/":{"post":{"operationId":"dashboards_widget_data_treemap","description":"Returns a nested-rectangle ``tree`` in eCharts treemap shape. Inner rectangles are products grouped under their parent organisations; rectangle area scales with the chosen ``metric`` (``count`` or ``active_count``). Colour scales with severity weight.","summary":"Portfolio treemap (organisation → product, sized by metric)","tags":["Dashboards · Widget Data"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WidgetTreemapRequestRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/WidgetTreemapRequestRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/WidgetTreemapRequestRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]},{"basicAuth":[]}],"responses":{"200":{"description":"``{tree:[...], total, max_weight, metric}``."}}}},"/api/v2/dashboards/widget_data/usage/":{"get":{"operationId":"dashboards_widget_data_usage","description":"Returns the account's current license-usage verdict — aggregate status / level / percentage plus a per-signal ``breakdown`` array (one entry per enforcement on the license, e.g. ``database_size_limit``, ``weekly_finding_usage``). Result is cached for 30s by the licensing module, so refreshing the widget at a high cadence stays cheap.\n\nAccount-wide signal — accepts no payload. The widget config carries no knobs in v1 (the user just adds the widget and it renders the current usage).","summary":"License usage + per-signal enforcement breakdown","tags":["Dashboards · Widget Data"],"security":[{"cookieAuth":[]},{"tokenAuth":[]},{"basicAuth":[]}],"responses":{"200":{"description":"``{status, level, usage, capacity, percentage, human_string, breakdown:[{measurement_type, level, usage, capacity, percentage, human_string, ...}]}``."},"403":{"description":"Caller lacks the maintainer permission the License Manager requires."}}}},"/api/v2/dashboards/widget_data/velocity/":{"post":{"operationId":"dashboards_widget_data_velocity","description":"Returns paired time series of finding *creation* (grouped by ``date``) and *closure* (grouped by ``mitigated``) per bucket, plus a running net delta. Indicator for whether the backlog is growing or shrinking.","summary":"Finding velocity — created vs closed per bucket","tags":["Dashboards · Widget Data"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WidgetVelocityRequestRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/WidgetVelocityRequestRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/WidgetVelocityRequestRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]},{"basicAuth":[]}],"responses":{"200":{"description":"``{labels, series:[created, closed, net], totals}``."}}}},"/api/v2/defectdojo_information/version/":{"get":{"operationId":"defectdojo_information_version_retrieve","tags":["defectdojo_information"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Version"}}},"description":""}}}},"/api/v2/dependency/":{"get":{"operationId":"dependency_list","description":"A simple ViewSet for viewing and editing Dependencies.","parameters":[{"in":"query","name":"file_path_contains","schema":{"type":"string"},"description":"File Path: Contains"},{"in":"query","name":"file_path_ends_with","schema":{"type":"string"},"description":"File Path: Ends With"},{"in":"query","name":"file_path_exact","schema":{"type":"string"},"description":"File Path: Exact Match"},{"in":"query","name":"file_path_includes","schema":{"type":"array","items":{"type":"string"}},"description":"File Path: Included in List","explode":false,"style":"form"},{"in":"query","name":"file_path_not_contains","schema":{"type":"string"},"description":"File Path: Not Contains"},{"in":"query","name":"file_path_not_exact","schema":{"type":"string"},"description":"File Path: Not Exact Match"},{"in":"query","name":"file_path_not_includes","schema":{"type":"array","items":{"type":"string"}},"description":"File Path: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"file_path_starts_with","schema":{"type":"string"},"description":"File Path: Starts With"},{"in":"query","name":"id_equals","schema":{"type":"integer"},"description":"ID: Equals"},{"in":"query","name":"id_greater_than_or_equal_to","schema":{"type":"integer"},"description":"ID: Greater Than or Equal To"},{"in":"query","name":"id_includes","schema":{"type":"array","items":{"type":"integer"}},"description":"ID: Included in List","explode":false,"style":"form"},{"in":"query","name":"id_less_than_or_equal_to","schema":{"type":"integer"},"description":"ID: Less Than or Equal To"},{"in":"query","name":"id_not_equals","schema":{"type":"integer"},"description":"ID: Not Equals"},{"in":"query","name":"id_not_includes","schema":{"type":"array","items":{"type":"integer"}},"description":"ID: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"license_expression_contains","schema":{"type":"string"},"description":"License Expression: Contains"},{"in":"query","name":"license_expression_ends_with","schema":{"type":"string"},"description":"License Expression: Ends With"},{"in":"query","name":"license_expression_exact","schema":{"type":"string"},"description":"License Expression: Exact Match"},{"in":"query","name":"license_expression_includes","schema":{"type":"array","items":{"type":"string"}},"description":"License Expression: Included in List","explode":false,"style":"form"},{"in":"query","name":"license_expression_not_contains","schema":{"type":"string"},"description":"License Expression: Not Contains"},{"in":"query","name":"license_expression_not_exact","schema":{"type":"string"},"description":"License Expression: Not Exact Match"},{"in":"query","name":"license_expression_not_includes","schema":{"type":"array","items":{"type":"string"}},"description":"License Expression: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"license_expression_starts_with","schema":{"type":"string"},"description":"License Expression: Starts With"},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"location__created_at_contains","schema":{"type":"string"},"description":"Created At: Contains"},{"in":"query","name":"location__created_at_ends_with","schema":{"type":"string"},"description":"Created At: Ends With"},{"in":"query","name":"location__created_at_exact","schema":{"type":"string"},"description":"Created At: Exact Match"},{"in":"query","name":"location__created_at_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Created At: Included in List","explode":false,"style":"form"},{"in":"query","name":"location__created_at_not_contains","schema":{"type":"string"},"description":"Created At: Not Contains"},{"in":"query","name":"location__created_at_not_exact","schema":{"type":"string"},"description":"Created At: Not Exact Match"},{"in":"query","name":"location__created_at_not_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Created At: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"location__created_at_starts_with","schema":{"type":"string"},"description":"Created At: Starts With"},{"in":"query","name":"location__findings__finding_equals","schema":{"type":"integer"},"description":"Finding ID: Equals"},{"in":"query","name":"location__findings__finding_greater_than_or_equal_to","schema":{"type":"integer"},"description":"Finding ID: Greater Than or Equal To"},{"in":"query","name":"location__findings__finding_includes","schema":{"type":"array","items":{"type":"integer"}},"description":"Finding ID: Included in List","explode":false,"style":"form"},{"in":"query","name":"location__findings__finding_less_than_or_equal_to","schema":{"type":"integer"},"description":"Finding ID: Less Than or Equal To"},{"in":"query","name":"location__findings__finding_not_equals","schema":{"type":"integer"},"description":"Finding ID: Not Equals"},{"in":"query","name":"location__findings__finding_not_includes","schema":{"type":"array","items":{"type":"integer"}},"description":"Finding ID: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"location__products__product_equals","schema":{"type":"integer"},"description":"Product ID: Equals"},{"in":"query","name":"location__products__product_greater_than_or_equal_to","schema":{"type":"integer"},"description":"Product ID: Greater Than or Equal To"},{"in":"query","name":"location__products__product_includes","schema":{"type":"array","items":{"type":"integer"}},"description":"Product ID: Included in List","explode":false,"style":"form"},{"in":"query","name":"location__products__product_less_than_or_equal_to","schema":{"type":"integer"},"description":"Product ID: Less Than or Equal To"},{"in":"query","name":"location__products__product_not_equals","schema":{"type":"integer"},"description":"Product ID: Not Equals"},{"in":"query","name":"location__products__product_not_includes","schema":{"type":"array","items":{"type":"integer"}},"description":"Product ID: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"location__tags__name_contains","schema":{"type":"string"},"description":"Tags: Contains"},{"in":"query","name":"location__tags__name_ends_with","schema":{"type":"string"},"description":"Tags: Ends With"},{"in":"query","name":"location__tags__name_exact","schema":{"type":"string"},"description":"Tags: Exact Match"},{"in":"query","name":"location__tags__name_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Tags: Included in List","explode":false,"style":"form"},{"in":"query","name":"location__tags__name_not_contains","schema":{"type":"string"},"description":"Tags: Not Contains"},{"in":"query","name":"location__tags__name_not_exact","schema":{"type":"string"},"description":"Tags: Not Exact Match"},{"in":"query","name":"location__tags__name_not_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Tags: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"location__tags__name_starts_with","schema":{"type":"string"},"description":"Tags: Starts With"},{"in":"query","name":"location__updated_at_contains","schema":{"type":"string"},"description":"Updated At: Contains"},{"in":"query","name":"location__updated_at_ends_with","schema":{"type":"string"},"description":"Updated At: Ends With"},{"in":"query","name":"location__updated_at_exact","schema":{"type":"string"},"description":"Updated At: Exact Match"},{"in":"query","name":"location__updated_at_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Updated At: Included in List","explode":false,"style":"form"},{"in":"query","name":"location__updated_at_not_contains","schema":{"type":"string"},"description":"Updated At: Not Contains"},{"in":"query","name":"location__updated_at_not_exact","schema":{"type":"string"},"description":"Updated At: Not Exact Match"},{"in":"query","name":"location__updated_at_not_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Updated At: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"location__updated_at_starts_with","schema":{"type":"string"},"description":"Updated At: Starts With"},{"in":"query","name":"name_contains","schema":{"type":"string"},"description":"Name: Contains"},{"in":"query","name":"name_ends_with","schema":{"type":"string"},"description":"Name: Ends With"},{"in":"query","name":"name_exact","schema":{"type":"string"},"description":"Name: Exact Match"},{"in":"query","name":"name_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Name: Included in List","explode":false,"style":"form"},{"in":"query","name":"name_not_contains","schema":{"type":"string"},"description":"Name: Not Contains"},{"in":"query","name":"name_not_exact","schema":{"type":"string"},"description":"Name: Not Exact Match"},{"in":"query","name":"name_not_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Name: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"name_starts_with","schema":{"type":"string"},"description":"Name: Starts With"},{"in":"query","name":"namespace_contains","schema":{"type":"string"},"description":"Namespace: Contains"},{"in":"query","name":"namespace_ends_with","schema":{"type":"string"},"description":"Namespace: Ends With"},{"in":"query","name":"namespace_exact","schema":{"type":"string"},"description":"Namespace: Exact Match"},{"in":"query","name":"namespace_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Namespace: Included in List","explode":false,"style":"form"},{"in":"query","name":"namespace_not_contains","schema":{"type":"string"},"description":"Namespace: Not Contains"},{"in":"query","name":"namespace_not_exact","schema":{"type":"string"},"description":"Namespace: Not Exact Match"},{"in":"query","name":"namespace_not_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Namespace: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"namespace_starts_with","schema":{"type":"string"},"description":"Namespace: Starts With"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"ordering","schema":{"type":"array","items":{"type":"string","enum":["-created","-file_path","-id","-license_expression","-name","-namespace","-purl_type","-updated","-version","created","file_path","id","license_expression","name","namespace","purl_type","updated","version"]}},"description":"Ordering\n\n* `id` - Id\n* `-id` - Id (descending)\n* `purl_type` - Purl type\n* `-purl_type` - Purl type (descending)\n* `namespace` - Namespace\n* `-namespace` - Namespace (descending)\n* `name` - Name\n* `-name` - Name (descending)\n* `version` - Version\n* `-version` - Version (descending)\n* `file_path` - File path\n* `-file_path` - File path (descending)\n* `license_expression` - License expression\n* `-license_expression` - License expression (descending)\n* `created` - Created\n* `-created` - Created (descending)\n* `updated` - Updated\n* `-updated` - Updated (descending)","explode":false,"style":"form"},{"in":"query","name":"product","schema":{"type":"integer"},"description":"Product ID: Equals"},{"in":"query","name":"purl_type_contains","schema":{"type":"string"},"description":"Package Type: Contains"},{"in":"query","name":"purl_type_ends_with","schema":{"type":"string"},"description":"Package Type: Ends With"},{"in":"query","name":"purl_type_exact","schema":{"type":"string"},"description":"Package Type: Exact Match"},{"in":"query","name":"purl_type_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Package Type: Included in List","explode":false,"style":"form"},{"in":"query","name":"purl_type_not_contains","schema":{"type":"string"},"description":"Package Type: Not Contains"},{"in":"query","name":"purl_type_not_exact","schema":{"type":"string"},"description":"Package Type: Not Exact Match"},{"in":"query","name":"purl_type_not_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Package Type: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"purl_type_starts_with","schema":{"type":"string"},"description":"Package Type: Starts With"},{"in":"query","name":"version_contains","schema":{"type":"string"},"description":"Version: Contains"},{"in":"query","name":"version_ends_with","schema":{"type":"string"},"description":"Version: Ends With"},{"in":"query","name":"version_exact","schema":{"type":"string"},"description":"Version: Exact Match"},{"in":"query","name":"version_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Version: Included in List","explode":false,"style":"form"},{"in":"query","name":"version_not_contains","schema":{"type":"string"},"description":"Version: Not Contains"},{"in":"query","name":"version_not_exact","schema":{"type":"string"},"description":"Version: Not Exact Match"},{"in":"query","name":"version_not_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Version: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"version_starts_with","schema":{"type":"string"},"description":"Version: Starts With"}],"tags":["dependency"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDependencyList"}}},"description":""}}},"post":{"operationId":"dependency_create","description":"A simple ViewSet for viewing and editing Dependencies.","tags":["dependency"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DependencyRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/DependencyRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/DependencyRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Dependency"}}},"description":""}}}},"/api/v2/dependency/{id}/":{"get":{"operationId":"dependency_retrieve","description":"A simple ViewSet for viewing and editing Dependencies.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this dependency.","required":true}],"tags":["dependency"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Dependency"}}},"description":""}}},"put":{"operationId":"dependency_update","description":"A simple ViewSet for viewing and editing Dependencies.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this dependency.","required":true}],"tags":["dependency"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DependencyRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/DependencyRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/DependencyRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Dependency"}}},"description":""}}},"patch":{"operationId":"dependency_partial_update","description":"A simple ViewSet for viewing and editing Dependencies.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this dependency.","required":true}],"tags":["dependency"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedDependencyRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedDependencyRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedDependencyRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Dependency"}}},"description":""}}},"delete":{"operationId":"dependency_destroy","description":"A simple ViewSet for viewing and editing Dependencies.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this dependency.","required":true}],"tags":["dependency"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/dependency/{id}/history/":{"get":{"operationId":"dependency_history_list","description":"Get audit log entries for an object with pagination.\n\nUses DojoEvents.objects.tracks(obj) to get events for the object itself,\nand DojoEvents.objects.references(obj) to get events for related objects\n(objects with foreign keys pointing to this object). Supports pagination, filtering, and sorting.\nAvailable at both /api/v2/ and /api/vue/ endpoints.\n\nArgs:\n    field_filter: Optional field name to filter by (e.g., \"finding_enrichment_settings\").\n                Only entries with changes to this field will be returned.","parameters":[{"in":"query","name":"file_path_contains","schema":{"type":"string"},"description":"File Path: Contains"},{"in":"query","name":"file_path_ends_with","schema":{"type":"string"},"description":"File Path: Ends With"},{"in":"query","name":"file_path_exact","schema":{"type":"string"},"description":"File Path: Exact Match"},{"in":"query","name":"file_path_includes","schema":{"type":"array","items":{"type":"string"}},"description":"File Path: Included in List","explode":false,"style":"form"},{"in":"query","name":"file_path_not_contains","schema":{"type":"string"},"description":"File Path: Not Contains"},{"in":"query","name":"file_path_not_exact","schema":{"type":"string"},"description":"File Path: Not Exact Match"},{"in":"query","name":"file_path_not_includes","schema":{"type":"array","items":{"type":"string"}},"description":"File Path: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"file_path_starts_with","schema":{"type":"string"},"description":"File Path: Starts With"},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this dependency.","required":true},{"in":"query","name":"id_equals","schema":{"type":"integer"},"description":"ID: Equals"},{"in":"query","name":"id_greater_than_or_equal_to","schema":{"type":"integer"},"description":"ID: Greater Than or Equal To"},{"in":"query","name":"id_includes","schema":{"type":"array","items":{"type":"integer"}},"description":"ID: Included in List","explode":false,"style":"form"},{"in":"query","name":"id_less_than_or_equal_to","schema":{"type":"integer"},"description":"ID: Less Than or Equal To"},{"in":"query","name":"id_not_equals","schema":{"type":"integer"},"description":"ID: Not Equals"},{"in":"query","name":"id_not_includes","schema":{"type":"array","items":{"type":"integer"}},"description":"ID: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"license_expression_contains","schema":{"type":"string"},"description":"License Expression: Contains"},{"in":"query","name":"license_expression_ends_with","schema":{"type":"string"},"description":"License Expression: Ends With"},{"in":"query","name":"license_expression_exact","schema":{"type":"string"},"description":"License Expression: Exact Match"},{"in":"query","name":"license_expression_includes","schema":{"type":"array","items":{"type":"string"}},"description":"License Expression: Included in List","explode":false,"style":"form"},{"in":"query","name":"license_expression_not_contains","schema":{"type":"string"},"description":"License Expression: Not Contains"},{"in":"query","name":"license_expression_not_exact","schema":{"type":"string"},"description":"License Expression: Not Exact Match"},{"in":"query","name":"license_expression_not_includes","schema":{"type":"array","items":{"type":"string"}},"description":"License Expression: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"license_expression_starts_with","schema":{"type":"string"},"description":"License Expression: Starts With"},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"location__created_at_contains","schema":{"type":"string"},"description":"Created At: Contains"},{"in":"query","name":"location__created_at_ends_with","schema":{"type":"string"},"description":"Created At: Ends With"},{"in":"query","name":"location__created_at_exact","schema":{"type":"string"},"description":"Created At: Exact Match"},{"in":"query","name":"location__created_at_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Created At: Included in List","explode":false,"style":"form"},{"in":"query","name":"location__created_at_not_contains","schema":{"type":"string"},"description":"Created At: Not Contains"},{"in":"query","name":"location__created_at_not_exact","schema":{"type":"string"},"description":"Created At: Not Exact Match"},{"in":"query","name":"location__created_at_not_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Created At: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"location__created_at_starts_with","schema":{"type":"string"},"description":"Created At: Starts With"},{"in":"query","name":"location__findings__finding_equals","schema":{"type":"integer"},"description":"Finding ID: Equals"},{"in":"query","name":"location__findings__finding_greater_than_or_equal_to","schema":{"type":"integer"},"description":"Finding ID: Greater Than or Equal To"},{"in":"query","name":"location__findings__finding_includes","schema":{"type":"array","items":{"type":"integer"}},"description":"Finding ID: Included in List","explode":false,"style":"form"},{"in":"query","name":"location__findings__finding_less_than_or_equal_to","schema":{"type":"integer"},"description":"Finding ID: Less Than or Equal To"},{"in":"query","name":"location__findings__finding_not_equals","schema":{"type":"integer"},"description":"Finding ID: Not Equals"},{"in":"query","name":"location__findings__finding_not_includes","schema":{"type":"array","items":{"type":"integer"}},"description":"Finding ID: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"location__products__product_equals","schema":{"type":"integer"},"description":"Product ID: Equals"},{"in":"query","name":"location__products__product_greater_than_or_equal_to","schema":{"type":"integer"},"description":"Product ID: Greater Than or Equal To"},{"in":"query","name":"location__products__product_includes","schema":{"type":"array","items":{"type":"integer"}},"description":"Product ID: Included in List","explode":false,"style":"form"},{"in":"query","name":"location__products__product_less_than_or_equal_to","schema":{"type":"integer"},"description":"Product ID: Less Than or Equal To"},{"in":"query","name":"location__products__product_not_equals","schema":{"type":"integer"},"description":"Product ID: Not Equals"},{"in":"query","name":"location__products__product_not_includes","schema":{"type":"array","items":{"type":"integer"}},"description":"Product ID: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"location__tags__name_contains","schema":{"type":"string"},"description":"Tags: Contains"},{"in":"query","name":"location__tags__name_ends_with","schema":{"type":"string"},"description":"Tags: Ends With"},{"in":"query","name":"location__tags__name_exact","schema":{"type":"string"},"description":"Tags: Exact Match"},{"in":"query","name":"location__tags__name_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Tags: Included in List","explode":false,"style":"form"},{"in":"query","name":"location__tags__name_not_contains","schema":{"type":"string"},"description":"Tags: Not Contains"},{"in":"query","name":"location__tags__name_not_exact","schema":{"type":"string"},"description":"Tags: Not Exact Match"},{"in":"query","name":"location__tags__name_not_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Tags: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"location__tags__name_starts_with","schema":{"type":"string"},"description":"Tags: Starts With"},{"in":"query","name":"location__updated_at_contains","schema":{"type":"string"},"description":"Updated At: Contains"},{"in":"query","name":"location__updated_at_ends_with","schema":{"type":"string"},"description":"Updated At: Ends With"},{"in":"query","name":"location__updated_at_exact","schema":{"type":"string"},"description":"Updated At: Exact Match"},{"in":"query","name":"location__updated_at_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Updated At: Included in List","explode":false,"style":"form"},{"in":"query","name":"location__updated_at_not_contains","schema":{"type":"string"},"description":"Updated At: Not Contains"},{"in":"query","name":"location__updated_at_not_exact","schema":{"type":"string"},"description":"Updated At: Not Exact Match"},{"in":"query","name":"location__updated_at_not_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Updated At: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"location__updated_at_starts_with","schema":{"type":"string"},"description":"Updated At: Starts With"},{"in":"query","name":"name_contains","schema":{"type":"string"},"description":"Name: Contains"},{"in":"query","name":"name_ends_with","schema":{"type":"string"},"description":"Name: Ends With"},{"in":"query","name":"name_exact","schema":{"type":"string"},"description":"Name: Exact Match"},{"in":"query","name":"name_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Name: Included in List","explode":false,"style":"form"},{"in":"query","name":"name_not_contains","schema":{"type":"string"},"description":"Name: Not Contains"},{"in":"query","name":"name_not_exact","schema":{"type":"string"},"description":"Name: Not Exact Match"},{"in":"query","name":"name_not_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Name: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"name_starts_with","schema":{"type":"string"},"description":"Name: Starts With"},{"in":"query","name":"namespace_contains","schema":{"type":"string"},"description":"Namespace: Contains"},{"in":"query","name":"namespace_ends_with","schema":{"type":"string"},"description":"Namespace: Ends With"},{"in":"query","name":"namespace_exact","schema":{"type":"string"},"description":"Namespace: Exact Match"},{"in":"query","name":"namespace_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Namespace: Included in List","explode":false,"style":"form"},{"in":"query","name":"namespace_not_contains","schema":{"type":"string"},"description":"Namespace: Not Contains"},{"in":"query","name":"namespace_not_exact","schema":{"type":"string"},"description":"Namespace: Not Exact Match"},{"in":"query","name":"namespace_not_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Namespace: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"namespace_starts_with","schema":{"type":"string"},"description":"Namespace: Starts With"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"ordering","schema":{"type":"array","items":{"type":"string","enum":["-created","-file_path","-id","-license_expression","-name","-namespace","-purl_type","-updated","-version","created","file_path","id","license_expression","name","namespace","purl_type","updated","version"]}},"description":"Ordering\n\n* `id` - Id\n* `-id` - Id (descending)\n* `purl_type` - Purl type\n* `-purl_type` - Purl type (descending)\n* `namespace` - Namespace\n* `-namespace` - Namespace (descending)\n* `name` - Name\n* `-name` - Name (descending)\n* `version` - Version\n* `-version` - Version (descending)\n* `file_path` - File path\n* `-file_path` - File path (descending)\n* `license_expression` - License expression\n* `-license_expression` - License expression (descending)\n* `created` - Created\n* `-created` - Created (descending)\n* `updated` - Updated\n* `-updated` - Updated (descending)","explode":false,"style":"form"},{"in":"query","name":"product","schema":{"type":"integer"},"description":"Product ID: Equals"},{"in":"query","name":"purl_type_contains","schema":{"type":"string"},"description":"Package Type: Contains"},{"in":"query","name":"purl_type_ends_with","schema":{"type":"string"},"description":"Package Type: Ends With"},{"in":"query","name":"purl_type_exact","schema":{"type":"string"},"description":"Package Type: Exact Match"},{"in":"query","name":"purl_type_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Package Type: Included in List","explode":false,"style":"form"},{"in":"query","name":"purl_type_not_contains","schema":{"type":"string"},"description":"Package Type: Not Contains"},{"in":"query","name":"purl_type_not_exact","schema":{"type":"string"},"description":"Package Type: Not Exact Match"},{"in":"query","name":"purl_type_not_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Package Type: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"purl_type_starts_with","schema":{"type":"string"},"description":"Package Type: Starts With"},{"in":"query","name":"version_contains","schema":{"type":"string"},"description":"Version: Contains"},{"in":"query","name":"version_ends_with","schema":{"type":"string"},"description":"Version: Ends With"},{"in":"query","name":"version_exact","schema":{"type":"string"},"description":"Version: Exact Match"},{"in":"query","name":"version_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Version: Included in List","explode":false,"style":"form"},{"in":"query","name":"version_not_contains","schema":{"type":"string"},"description":"Version: Not Contains"},{"in":"query","name":"version_not_exact","schema":{"type":"string"},"description":"Version: Not Exact Match"},{"in":"query","name":"version_not_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Version: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"version_starts_with","schema":{"type":"string"},"description":"Version: Starts With"}],"tags":["dependency"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedAuditLogList"}}},"description":""}}}},"/api/v2/dependency/{id}/history/legacy/":{"get":{"operationId":"dependency_history_legacy_list","description":"Get legacy audit log for an object (django-auditlog entries) with pagination.\n\nSupports pagination, filtering, and sorting.\nAvailable at both /api/v2/ and /api/vue/ endpoints.","parameters":[{"in":"query","name":"file_path_contains","schema":{"type":"string"},"description":"File Path: Contains"},{"in":"query","name":"file_path_ends_with","schema":{"type":"string"},"description":"File Path: Ends With"},{"in":"query","name":"file_path_exact","schema":{"type":"string"},"description":"File Path: Exact Match"},{"in":"query","name":"file_path_includes","schema":{"type":"array","items":{"type":"string"}},"description":"File Path: Included in List","explode":false,"style":"form"},{"in":"query","name":"file_path_not_contains","schema":{"type":"string"},"description":"File Path: Not Contains"},{"in":"query","name":"file_path_not_exact","schema":{"type":"string"},"description":"File Path: Not Exact Match"},{"in":"query","name":"file_path_not_includes","schema":{"type":"array","items":{"type":"string"}},"description":"File Path: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"file_path_starts_with","schema":{"type":"string"},"description":"File Path: Starts With"},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this dependency.","required":true},{"in":"query","name":"id_equals","schema":{"type":"integer"},"description":"ID: Equals"},{"in":"query","name":"id_greater_than_or_equal_to","schema":{"type":"integer"},"description":"ID: Greater Than or Equal To"},{"in":"query","name":"id_includes","schema":{"type":"array","items":{"type":"integer"}},"description":"ID: Included in List","explode":false,"style":"form"},{"in":"query","name":"id_less_than_or_equal_to","schema":{"type":"integer"},"description":"ID: Less Than or Equal To"},{"in":"query","name":"id_not_equals","schema":{"type":"integer"},"description":"ID: Not Equals"},{"in":"query","name":"id_not_includes","schema":{"type":"array","items":{"type":"integer"}},"description":"ID: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"license_expression_contains","schema":{"type":"string"},"description":"License Expression: Contains"},{"in":"query","name":"license_expression_ends_with","schema":{"type":"string"},"description":"License Expression: Ends With"},{"in":"query","name":"license_expression_exact","schema":{"type":"string"},"description":"License Expression: Exact Match"},{"in":"query","name":"license_expression_includes","schema":{"type":"array","items":{"type":"string"}},"description":"License Expression: Included in List","explode":false,"style":"form"},{"in":"query","name":"license_expression_not_contains","schema":{"type":"string"},"description":"License Expression: Not Contains"},{"in":"query","name":"license_expression_not_exact","schema":{"type":"string"},"description":"License Expression: Not Exact Match"},{"in":"query","name":"license_expression_not_includes","schema":{"type":"array","items":{"type":"string"}},"description":"License Expression: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"license_expression_starts_with","schema":{"type":"string"},"description":"License Expression: Starts With"},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"location__created_at_contains","schema":{"type":"string"},"description":"Created At: Contains"},{"in":"query","name":"location__created_at_ends_with","schema":{"type":"string"},"description":"Created At: Ends With"},{"in":"query","name":"location__created_at_exact","schema":{"type":"string"},"description":"Created At: Exact Match"},{"in":"query","name":"location__created_at_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Created At: Included in List","explode":false,"style":"form"},{"in":"query","name":"location__created_at_not_contains","schema":{"type":"string"},"description":"Created At: Not Contains"},{"in":"query","name":"location__created_at_not_exact","schema":{"type":"string"},"description":"Created At: Not Exact Match"},{"in":"query","name":"location__created_at_not_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Created At: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"location__created_at_starts_with","schema":{"type":"string"},"description":"Created At: Starts With"},{"in":"query","name":"location__findings__finding_equals","schema":{"type":"integer"},"description":"Finding ID: Equals"},{"in":"query","name":"location__findings__finding_greater_than_or_equal_to","schema":{"type":"integer"},"description":"Finding ID: Greater Than or Equal To"},{"in":"query","name":"location__findings__finding_includes","schema":{"type":"array","items":{"type":"integer"}},"description":"Finding ID: Included in List","explode":false,"style":"form"},{"in":"query","name":"location__findings__finding_less_than_or_equal_to","schema":{"type":"integer"},"description":"Finding ID: Less Than or Equal To"},{"in":"query","name":"location__findings__finding_not_equals","schema":{"type":"integer"},"description":"Finding ID: Not Equals"},{"in":"query","name":"location__findings__finding_not_includes","schema":{"type":"array","items":{"type":"integer"}},"description":"Finding ID: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"location__products__product_equals","schema":{"type":"integer"},"description":"Product ID: Equals"},{"in":"query","name":"location__products__product_greater_than_or_equal_to","schema":{"type":"integer"},"description":"Product ID: Greater Than or Equal To"},{"in":"query","name":"location__products__product_includes","schema":{"type":"array","items":{"type":"integer"}},"description":"Product ID: Included in List","explode":false,"style":"form"},{"in":"query","name":"location__products__product_less_than_or_equal_to","schema":{"type":"integer"},"description":"Product ID: Less Than or Equal To"},{"in":"query","name":"location__products__product_not_equals","schema":{"type":"integer"},"description":"Product ID: Not Equals"},{"in":"query","name":"location__products__product_not_includes","schema":{"type":"array","items":{"type":"integer"}},"description":"Product ID: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"location__tags__name_contains","schema":{"type":"string"},"description":"Tags: Contains"},{"in":"query","name":"location__tags__name_ends_with","schema":{"type":"string"},"description":"Tags: Ends With"},{"in":"query","name":"location__tags__name_exact","schema":{"type":"string"},"description":"Tags: Exact Match"},{"in":"query","name":"location__tags__name_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Tags: Included in List","explode":false,"style":"form"},{"in":"query","name":"location__tags__name_not_contains","schema":{"type":"string"},"description":"Tags: Not Contains"},{"in":"query","name":"location__tags__name_not_exact","schema":{"type":"string"},"description":"Tags: Not Exact Match"},{"in":"query","name":"location__tags__name_not_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Tags: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"location__tags__name_starts_with","schema":{"type":"string"},"description":"Tags: Starts With"},{"in":"query","name":"location__updated_at_contains","schema":{"type":"string"},"description":"Updated At: Contains"},{"in":"query","name":"location__updated_at_ends_with","schema":{"type":"string"},"description":"Updated At: Ends With"},{"in":"query","name":"location__updated_at_exact","schema":{"type":"string"},"description":"Updated At: Exact Match"},{"in":"query","name":"location__updated_at_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Updated At: Included in List","explode":false,"style":"form"},{"in":"query","name":"location__updated_at_not_contains","schema":{"type":"string"},"description":"Updated At: Not Contains"},{"in":"query","name":"location__updated_at_not_exact","schema":{"type":"string"},"description":"Updated At: Not Exact Match"},{"in":"query","name":"location__updated_at_not_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Updated At: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"location__updated_at_starts_with","schema":{"type":"string"},"description":"Updated At: Starts With"},{"in":"query","name":"name_contains","schema":{"type":"string"},"description":"Name: Contains"},{"in":"query","name":"name_ends_with","schema":{"type":"string"},"description":"Name: Ends With"},{"in":"query","name":"name_exact","schema":{"type":"string"},"description":"Name: Exact Match"},{"in":"query","name":"name_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Name: Included in List","explode":false,"style":"form"},{"in":"query","name":"name_not_contains","schema":{"type":"string"},"description":"Name: Not Contains"},{"in":"query","name":"name_not_exact","schema":{"type":"string"},"description":"Name: Not Exact Match"},{"in":"query","name":"name_not_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Name: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"name_starts_with","schema":{"type":"string"},"description":"Name: Starts With"},{"in":"query","name":"namespace_contains","schema":{"type":"string"},"description":"Namespace: Contains"},{"in":"query","name":"namespace_ends_with","schema":{"type":"string"},"description":"Namespace: Ends With"},{"in":"query","name":"namespace_exact","schema":{"type":"string"},"description":"Namespace: Exact Match"},{"in":"query","name":"namespace_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Namespace: Included in List","explode":false,"style":"form"},{"in":"query","name":"namespace_not_contains","schema":{"type":"string"},"description":"Namespace: Not Contains"},{"in":"query","name":"namespace_not_exact","schema":{"type":"string"},"description":"Namespace: Not Exact Match"},{"in":"query","name":"namespace_not_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Namespace: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"namespace_starts_with","schema":{"type":"string"},"description":"Namespace: Starts With"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"ordering","schema":{"type":"array","items":{"type":"string","enum":["-created","-file_path","-id","-license_expression","-name","-namespace","-purl_type","-updated","-version","created","file_path","id","license_expression","name","namespace","purl_type","updated","version"]}},"description":"Ordering\n\n* `id` - Id\n* `-id` - Id (descending)\n* `purl_type` - Purl type\n* `-purl_type` - Purl type (descending)\n* `namespace` - Namespace\n* `-namespace` - Namespace (descending)\n* `name` - Name\n* `-name` - Name (descending)\n* `version` - Version\n* `-version` - Version (descending)\n* `file_path` - File path\n* `-file_path` - File path (descending)\n* `license_expression` - License expression\n* `-license_expression` - License expression (descending)\n* `created` - Created\n* `-created` - Created (descending)\n* `updated` - Updated\n* `-updated` - Updated (descending)","explode":false,"style":"form"},{"in":"query","name":"product","schema":{"type":"integer"},"description":"Product ID: Equals"},{"in":"query","name":"purl_type_contains","schema":{"type":"string"},"description":"Package Type: Contains"},{"in":"query","name":"purl_type_ends_with","schema":{"type":"string"},"description":"Package Type: Ends With"},{"in":"query","name":"purl_type_exact","schema":{"type":"string"},"description":"Package Type: Exact Match"},{"in":"query","name":"purl_type_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Package Type: Included in List","explode":false,"style":"form"},{"in":"query","name":"purl_type_not_contains","schema":{"type":"string"},"description":"Package Type: Not Contains"},{"in":"query","name":"purl_type_not_exact","schema":{"type":"string"},"description":"Package Type: Not Exact Match"},{"in":"query","name":"purl_type_not_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Package Type: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"purl_type_starts_with","schema":{"type":"string"},"description":"Package Type: Starts With"},{"in":"query","name":"version_contains","schema":{"type":"string"},"description":"Version: Contains"},{"in":"query","name":"version_ends_with","schema":{"type":"string"},"description":"Version: Ends With"},{"in":"query","name":"version_exact","schema":{"type":"string"},"description":"Version: Exact Match"},{"in":"query","name":"version_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Version: Included in List","explode":false,"style":"form"},{"in":"query","name":"version_not_contains","schema":{"type":"string"},"description":"Version: Not Contains"},{"in":"query","name":"version_not_exact","schema":{"type":"string"},"description":"Version: Not Exact Match"},{"in":"query","name":"version_not_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Version: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"version_starts_with","schema":{"type":"string"},"description":"Version: Starts With"}],"tags":["dependency"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedLegacyAuditLogList"}}},"description":""}}}},"/api/v2/dependency/{id}/history/legacy/count/":{"get":{"operationId":"dependency_history_legacy_count_retrieve","description":"Get the total count of legacy audit log entries for an object.\n\nApplies the same filters as history_legacy (date filter, LegacyAuditLogFilter)\nto ensure the count matches what users will see when viewing the legacy history page.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this dependency.","required":true}],"tags":["dependency"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"integer"}}}}},"description":""}}}},"/api/v2/development_environments/":{"get":{"operationId":"development_environments_list","parameters":[{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["development_environments"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDevelopmentEnvironmentList"}}},"description":""}}},"post":{"operationId":"development_environments_create","tags":["development_environments"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DevelopmentEnvironmentRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/DevelopmentEnvironmentRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/DevelopmentEnvironmentRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DevelopmentEnvironment"}}},"description":""}}}},"/api/v2/development_environments/{id}/":{"get":{"operationId":"development_environments_retrieve","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this development_ environment.","required":true}],"tags":["development_environments"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DevelopmentEnvironment"}}},"description":""}}},"put":{"operationId":"development_environments_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this development_ environment.","required":true}],"tags":["development_environments"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DevelopmentEnvironmentRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/DevelopmentEnvironmentRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/DevelopmentEnvironmentRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DevelopmentEnvironment"}}},"description":""}}},"patch":{"operationId":"development_environments_partial_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this development_ environment.","required":true}],"tags":["development_environments"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedDevelopmentEnvironmentRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedDevelopmentEnvironmentRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedDevelopmentEnvironmentRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DevelopmentEnvironment"}}},"description":""}}},"delete":{"operationId":"development_environments_destroy","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this development_ environment.","required":true}],"tags":["development_environments"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/development_environments/{id}/delete_preview/":{"get":{"operationId":"development_environments_delete_preview_list","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this development_ environment.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["development_environments"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/dojo_group_members/":{"get":{"operationId":"dojo_group_members_list","description":"``list()``/``retrieve()`` mirroring the OS prefetch mixins but using\n:class:`~pro.api_helpers.prefetcher.ProPrefetcher`, so prefetch can resolve\nserializers for Pro-owned FK targets (``Role``, ``Dojo_Group``).\n\nThe OS mixins hardcode ``_Prefetcher()`` with no override seam, and\n``open_source/`` is gitignored (rebuilt by ``build.sh``) so we can't add one\nthere. The two method bodies below are copied verbatim from\n``dojo/api_v2/prefetch/mixins.py`` — the only change is the prefetcher class —\nand must be kept in sync with it.\n\nThis is a plain mixin (it does not re-inherit ``PrefetchListMixin`` /\n``PrefetchRetrieveMixin`` — that would clash with the same bases reached via\n``PrefetchDojoModelViewSet`` and break C3 MRO). Place it *before*\n``PrefetchDojoModelViewSet`` in a viewset's bases so these methods win.","parameters":[{"in":"query","name":"group_id","schema":{"type":"integer"}},{"in":"query","name":"id","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["user"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"},{"in":"query","name":"role","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"search","schema":{"type":"string"}},{"in":"query","name":"user","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"user_id","schema":{"type":"integer"}}],"tags":["dojo_group_members"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedEnhancedDojoGroupMemberList"}}},"description":""}}},"post":{"operationId":"dojo_group_members_create","description":"``list()``/``retrieve()`` mirroring the OS prefetch mixins but using\n:class:`~pro.api_helpers.prefetcher.ProPrefetcher`, so prefetch can resolve\nserializers for Pro-owned FK targets (``Role``, ``Dojo_Group``).\n\nThe OS mixins hardcode ``_Prefetcher()`` with no override seam, and\n``open_source/`` is gitignored (rebuilt by ``build.sh``) so we can't add one\nthere. The two method bodies below are copied verbatim from\n``dojo/api_v2/prefetch/mixins.py`` — the only change is the prefetcher class —\nand must be kept in sync with it.\n\nThis is a plain mixin (it does not re-inherit ``PrefetchListMixin`` /\n``PrefetchRetrieveMixin`` — that would clash with the same bases reached via\n``PrefetchDojoModelViewSet`` and break C3 MRO). Place it *before*\n``PrefetchDojoModelViewSet`` in a viewset's bases so these methods win.","tags":["dojo_group_members"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedDojoGroupMemberRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/EnhancedDojoGroupMemberRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/EnhancedDojoGroupMemberRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedDojoGroupMember"}}},"description":""}}}},"/api/v2/dojo_group_members/{id}/":{"get":{"operationId":"dojo_group_members_retrieve","description":"``list()``/``retrieve()`` mirroring the OS prefetch mixins but using\n:class:`~pro.api_helpers.prefetcher.ProPrefetcher`, so prefetch can resolve\nserializers for Pro-owned FK targets (``Role``, ``Dojo_Group``).\n\nThe OS mixins hardcode ``_Prefetcher()`` with no override seam, and\n``open_source/`` is gitignored (rebuilt by ``build.sh``) so we can't add one\nthere. The two method bodies below are copied verbatim from\n``dojo/api_v2/prefetch/mixins.py`` — the only change is the prefetcher class —\nand must be kept in sync with it.\n\nThis is a plain mixin (it does not re-inherit ``PrefetchListMixin`` /\n``PrefetchRetrieveMixin`` — that would clash with the same bases reached via\n``PrefetchDojoModelViewSet`` and break C3 MRO). Place it *before*\n``PrefetchDojoModelViewSet`` in a viewset's bases so these methods win.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this dojo_ group_ member.","required":true},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["user"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"}],"tags":["dojo_group_members"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedDojoGroupMember"}}},"description":""}}},"put":{"operationId":"dojo_group_members_update","description":"``list()``/``retrieve()`` mirroring the OS prefetch mixins but using\n:class:`~pro.api_helpers.prefetcher.ProPrefetcher`, so prefetch can resolve\nserializers for Pro-owned FK targets (``Role``, ``Dojo_Group``).\n\nThe OS mixins hardcode ``_Prefetcher()`` with no override seam, and\n``open_source/`` is gitignored (rebuilt by ``build.sh``) so we can't add one\nthere. The two method bodies below are copied verbatim from\n``dojo/api_v2/prefetch/mixins.py`` — the only change is the prefetcher class —\nand must be kept in sync with it.\n\nThis is a plain mixin (it does not re-inherit ``PrefetchListMixin`` /\n``PrefetchRetrieveMixin`` — that would clash with the same bases reached via\n``PrefetchDojoModelViewSet`` and break C3 MRO). Place it *before*\n``PrefetchDojoModelViewSet`` in a viewset's bases so these methods win.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this dojo_ group_ member.","required":true}],"tags":["dojo_group_members"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedDojoGroupMemberRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/EnhancedDojoGroupMemberRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/EnhancedDojoGroupMemberRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedDojoGroupMember"}}},"description":""}}},"delete":{"operationId":"dojo_group_members_destroy","description":"``list()``/``retrieve()`` mirroring the OS prefetch mixins but using\n:class:`~pro.api_helpers.prefetcher.ProPrefetcher`, so prefetch can resolve\nserializers for Pro-owned FK targets (``Role``, ``Dojo_Group``).\n\nThe OS mixins hardcode ``_Prefetcher()`` with no override seam, and\n``open_source/`` is gitignored (rebuilt by ``build.sh``) so we can't add one\nthere. The two method bodies below are copied verbatim from\n``dojo/api_v2/prefetch/mixins.py`` — the only change is the prefetcher class —\nand must be kept in sync with it.\n\nThis is a plain mixin (it does not re-inherit ``PrefetchListMixin`` /\n``PrefetchRetrieveMixin`` — that would clash with the same bases reached via\n``PrefetchDojoModelViewSet`` and break C3 MRO). Place it *before*\n``PrefetchDojoModelViewSet`` in a viewset's bases so these methods win.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this dojo_ group_ member.","required":true}],"tags":["dojo_group_members"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/dojo_group_members/{id}/delete_preview/":{"get":{"operationId":"dojo_group_members_delete_preview_list","description":"``list()``/``retrieve()`` mirroring the OS prefetch mixins but using\n:class:`~pro.api_helpers.prefetcher.ProPrefetcher`, so prefetch can resolve\nserializers for Pro-owned FK targets (``Role``, ``Dojo_Group``).\n\nThe OS mixins hardcode ``_Prefetcher()`` with no override seam, and\n``open_source/`` is gitignored (rebuilt by ``build.sh``) so we can't add one\nthere. The two method bodies below are copied verbatim from\n``dojo/api_v2/prefetch/mixins.py`` — the only change is the prefetcher class —\nand must be kept in sync with it.\n\nThis is a plain mixin (it does not re-inherit ``PrefetchListMixin`` /\n``PrefetchRetrieveMixin`` — that would clash with the same bases reached via\n``PrefetchDojoModelViewSet`` and break C3 MRO). Place it *before*\n``PrefetchDojoModelViewSet`` in a viewset's bases so these methods win.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this dojo_ group_ member.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["dojo_group_members"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/dojo_groups/":{"get":{"operationId":"dojo_groups_list","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"query","name":"email","schema":{"type":"string"},"description":"Email"},{"in":"query","name":"email_contains","schema":{"type":"string"},"description":"Email Contains"},{"in":"query","name":"id","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"name","schema":{"type":"string"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["users"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"},{"in":"query","name":"social_provider","schema":{"type":"string","x-spec-enum-id":"fe57c2b04188fb94","nullable":true,"title":"Social Authentication Provider","enum":["AzureAD","Remote"]},"description":"Group imported from a social provider.\n\n* `AzureAD` - AzureAD\n* `Remote` - Remote"}],"tags":["dojo_groups"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDojoGroupList"}}},"description":""}}},"post":{"operationId":"dojo_groups_create","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","tags":["dojo_groups"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DojoGroupRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/DojoGroupRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/DojoGroupRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DojoGroup"}}},"description":""}}}},"/api/v2/dojo_groups/{id}/":{"get":{"operationId":"dojo_groups_retrieve","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this dojo_ group.","required":true},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["users"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"}],"tags":["dojo_groups"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DojoGroup"}}},"description":""}}},"put":{"operationId":"dojo_groups_update","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this dojo_ group.","required":true}],"tags":["dojo_groups"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DojoGroupRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/DojoGroupRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/DojoGroupRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DojoGroup"}}},"description":""}}},"patch":{"operationId":"dojo_groups_partial_update","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this dojo_ group.","required":true}],"tags":["dojo_groups"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedDojoGroupRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedDojoGroupRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedDojoGroupRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DojoGroup"}}},"description":""}}},"delete":{"operationId":"dojo_groups_destroy","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this dojo_ group.","required":true}],"tags":["dojo_groups"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/dojo_groups/{id}/delete_preview/":{"get":{"operationId":"dojo_groups_delete_preview_list","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this dojo_ group.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["dojo_groups"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/dojo_groups/{id}/history/":{"get":{"operationId":"dojo_groups_history_list","description":"Get audit log entries for an object with pagination.\n\nUses DojoEvents.objects.tracks(obj) to get events for the object itself,\nand DojoEvents.objects.references(obj) to get events for related objects\n(objects with foreign keys pointing to this object). Supports pagination, filtering, and sorting.\nAvailable at both /api/v2/ and /api/vue/ endpoints.\n\nArgs:\n    field_filter: Optional field name to filter by (e.g., \"finding_enrichment_settings\").\n                Only entries with changes to this field will be returned.","parameters":[{"in":"query","name":"email","schema":{"type":"string"},"description":"Email"},{"in":"query","name":"email_contains","schema":{"type":"string"},"description":"Email Contains"},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this dojo_ group.","required":true},{"in":"query","name":"id","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"name","schema":{"type":"string"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"social_provider","schema":{"type":"string","x-spec-enum-id":"fe57c2b04188fb94","nullable":true,"title":"Social Authentication Provider","enum":["AzureAD","Remote"]},"description":"Group imported from a social provider.\n\n* `AzureAD` - AzureAD\n* `Remote` - Remote"}],"tags":["dojo_groups"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedAuditLogList"}}},"description":""}}}},"/api/v2/dojo_groups/{id}/history/legacy/":{"get":{"operationId":"dojo_groups_history_legacy_list","description":"Get legacy audit log for an object (django-auditlog entries) with pagination.\n\nSupports pagination, filtering, and sorting.\nAvailable at both /api/v2/ and /api/vue/ endpoints.","parameters":[{"in":"query","name":"email","schema":{"type":"string"},"description":"Email"},{"in":"query","name":"email_contains","schema":{"type":"string"},"description":"Email Contains"},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this dojo_ group.","required":true},{"in":"query","name":"id","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"name","schema":{"type":"string"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"social_provider","schema":{"type":"string","x-spec-enum-id":"fe57c2b04188fb94","nullable":true,"title":"Social Authentication Provider","enum":["AzureAD","Remote"]},"description":"Group imported from a social provider.\n\n* `AzureAD` - AzureAD\n* `Remote` - Remote"}],"tags":["dojo_groups"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedLegacyAuditLogList"}}},"description":""}}}},"/api/v2/dojo_groups/{id}/history/legacy/count/":{"get":{"operationId":"dojo_groups_history_legacy_count_retrieve","description":"Get the total count of legacy audit log entries for an object.\n\nApplies the same filters as history_legacy (date filter, LegacyAuditLogFilter)\nto ensure the count matches what users will see when viewing the legacy history page.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this dojo_ group.","required":true}],"tags":["dojo_groups"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"integer"}}}}},"description":""}}}},"/api/v2/endpoint_meta_import/":{"post":{"operationId":"endpoint_meta_import_create","description":"Imports a CSV file into a product to propagate arbitrary meta and tags on endpoints.\n\nBy Names:\n- Provide `product_name` of existing product\n\nBy ID:\n- Provide the id of the product in the `product` parameter\n\nIn this scenario Defect Dojo will look up the product by the provided details.","tags":["endpoint_meta_import"],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/EndpointMetaImporterRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EndpointMetaImporter"}}},"description":""}}}},"/api/v2/endpoint_status/":{"get":{"operationId":"endpoint_status_list","parameters":[{"in":"query","name":"endpoint","schema":{"type":"integer"}},{"in":"query","name":"false_positive","schema":{"type":"boolean"}},{"in":"query","name":"finding","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"mitigated","schema":{"type":"boolean"}},{"in":"query","name":"mitigated_by","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"out_of_scope","schema":{"type":"boolean"}},{"in":"query","name":"risk_accepted","schema":{"type":"boolean"}}],"tags":["endpoint_status"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedEndpointStatusList"}}},"description":""}}},"post":{"operationId":"endpoint_status_create","tags":["endpoint_status"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EndpointStatusRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/EndpointStatusRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/EndpointStatusRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EndpointStatus"}}},"description":""}}}},"/api/v2/endpoint_status/{id}/":{"get":{"operationId":"endpoint_status_retrieve","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this endpoint_ status.","required":true}],"tags":["endpoint_status"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EndpointStatus"}}},"description":""}}},"put":{"operationId":"endpoint_status_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this endpoint_ status.","required":true}],"tags":["endpoint_status"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EndpointStatusRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/EndpointStatusRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/EndpointStatusRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EndpointStatus"}}},"description":""}}},"patch":{"operationId":"endpoint_status_partial_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this endpoint_ status.","required":true}],"tags":["endpoint_status"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedEndpointStatusRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedEndpointStatusRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedEndpointStatusRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EndpointStatus"}}},"description":""}}},"delete":{"operationId":"endpoint_status_destroy","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this endpoint_ status.","required":true}],"tags":["endpoint_status"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/endpoint_status/{id}/delete_preview/":{"get":{"operationId":"endpoint_status_delete_preview_list","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this endpoint_ status.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["endpoint_status"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/endpoints/":{"get":{"operationId":"endpoints_list","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"query","name":"fragment","schema":{"type":"string"}},{"in":"query","name":"has_tags","schema":{"type":"boolean"},"description":"Has tags"},{"in":"query","name":"host","schema":{"type":"string"}},{"in":"query","name":"id","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"not_tag","schema":{"type":"string"},"description":"Not Tag name contains"},{"in":"query","name":"not_tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags not present on model","explode":false,"style":"form"},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-active_finding_count","-host","-id","-product","active_finding_count","host","id","product"]}},"description":"Ordering\n\n* `host` - Host\n* `-host` - Host (descending)\n* `product` - Product\n* `-product` - Product (descending)\n* `id` - Id\n* `-id` - Id (descending)\n* `active_finding_count` - Active Findings Count\n* `-active_finding_count` - Active Findings Count (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"path","schema":{"type":"string"}},{"in":"query","name":"port","schema":{"type":"integer"}},{"in":"query","name":"product","schema":{"type":"integer"}},{"in":"query","name":"protocol","schema":{"type":"string"}},{"in":"query","name":"query","schema":{"type":"string"}},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"},{"in":"query","name":"tag","schema":{"type":"string"},"description":"Tag name contains"},{"in":"query","name":"tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags (uses OR for multiple values)","explode":false,"style":"form"},{"in":"query","name":"tags__and","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags to match with an AND expression","explode":false,"style":"form"},{"in":"query","name":"userinfo","schema":{"type":"string"}}],"tags":["endpoints"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedEnhancedEndpointList"}}},"description":""}}},"post":{"operationId":"endpoints_create","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","tags":["endpoints"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedEndpointRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/EnhancedEndpointRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/EnhancedEndpointRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedEndpoint"}}},"description":""}}}},"/api/v2/endpoints/{id}/":{"get":{"operationId":"endpoints_retrieve","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this endpoint.","required":true},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"}],"tags":["endpoints"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedEndpoint"}}},"description":""}}},"put":{"operationId":"endpoints_update","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this endpoint.","required":true}],"tags":["endpoints"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedEndpointRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/EnhancedEndpointRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/EnhancedEndpointRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedEndpoint"}}},"description":""}}},"patch":{"operationId":"endpoints_partial_update","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this endpoint.","required":true}],"tags":["endpoints"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedEnhancedEndpointRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedEnhancedEndpointRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedEnhancedEndpointRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedEndpoint"}}},"description":""}}},"delete":{"operationId":"endpoints_destroy","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this endpoint.","required":true}],"tags":["endpoints"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/endpoints/{id}/delete_preview/":{"get":{"operationId":"endpoints_delete_preview_list","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this endpoint.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["endpoints"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/endpoints/{id}/generate_report/":{"post":{"operationId":"endpoints_generate_report_create","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this endpoint.","required":true}],"tags":["endpoints"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportGenerateOptionRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ReportGenerateOptionRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ReportGenerateOptionRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportGenerate"}}},"description":""}}}},"/api/v2/endpoints/{id}/history/":{"get":{"operationId":"endpoints_history_list","description":"Get audit log entries for an object with pagination.\n\nUses DojoEvents.objects.tracks(obj) to get events for the object itself,\nand DojoEvents.objects.references(obj) to get events for related objects\n(objects with foreign keys pointing to this object). Supports pagination, filtering, and sorting.\nAvailable at both /api/v2/ and /api/vue/ endpoints.\n\nArgs:\n    field_filter: Optional field name to filter by (e.g., \"finding_enrichment_settings\").\n                Only entries with changes to this field will be returned.","parameters":[{"in":"query","name":"fragment","schema":{"type":"string"}},{"in":"query","name":"has_tags","schema":{"type":"boolean"},"description":"Has tags"},{"in":"query","name":"host","schema":{"type":"string"}},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this endpoint.","required":true},{"in":"query","name":"id","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"not_tag","schema":{"type":"string"},"description":"Not Tag name contains"},{"in":"query","name":"not_tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags not present on model","explode":false,"style":"form"},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-active_finding_count","-host","-id","-product","active_finding_count","host","id","product"]}},"description":"Ordering\n\n* `host` - Host\n* `-host` - Host (descending)\n* `product` - Product\n* `-product` - Product (descending)\n* `id` - Id\n* `-id` - Id (descending)\n* `active_finding_count` - Active Findings Count\n* `-active_finding_count` - Active Findings Count (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"path","schema":{"type":"string"}},{"in":"query","name":"port","schema":{"type":"integer"}},{"in":"query","name":"product","schema":{"type":"integer"}},{"in":"query","name":"protocol","schema":{"type":"string"}},{"in":"query","name":"query","schema":{"type":"string"}},{"in":"query","name":"tag","schema":{"type":"string"},"description":"Tag name contains"},{"in":"query","name":"tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags (uses OR for multiple values)","explode":false,"style":"form"},{"in":"query","name":"tags__and","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags to match with an AND expression","explode":false,"style":"form"},{"in":"query","name":"userinfo","schema":{"type":"string"}}],"tags":["endpoints"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedAuditLogList"}}},"description":""}}}},"/api/v2/endpoints/{id}/history/legacy/":{"get":{"operationId":"endpoints_history_legacy_list","description":"Get legacy audit log for an object (django-auditlog entries) with pagination.\n\nSupports pagination, filtering, and sorting.\nAvailable at both /api/v2/ and /api/vue/ endpoints.","parameters":[{"in":"query","name":"fragment","schema":{"type":"string"}},{"in":"query","name":"has_tags","schema":{"type":"boolean"},"description":"Has tags"},{"in":"query","name":"host","schema":{"type":"string"}},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this endpoint.","required":true},{"in":"query","name":"id","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"not_tag","schema":{"type":"string"},"description":"Not Tag name contains"},{"in":"query","name":"not_tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags not present on model","explode":false,"style":"form"},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-active_finding_count","-host","-id","-product","active_finding_count","host","id","product"]}},"description":"Ordering\n\n* `host` - Host\n* `-host` - Host (descending)\n* `product` - Product\n* `-product` - Product (descending)\n* `id` - Id\n* `-id` - Id (descending)\n* `active_finding_count` - Active Findings Count\n* `-active_finding_count` - Active Findings Count (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"path","schema":{"type":"string"}},{"in":"query","name":"port","schema":{"type":"integer"}},{"in":"query","name":"product","schema":{"type":"integer"}},{"in":"query","name":"protocol","schema":{"type":"string"}},{"in":"query","name":"query","schema":{"type":"string"}},{"in":"query","name":"tag","schema":{"type":"string"},"description":"Tag name contains"},{"in":"query","name":"tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags (uses OR for multiple values)","explode":false,"style":"form"},{"in":"query","name":"tags__and","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags to match with an AND expression","explode":false,"style":"form"},{"in":"query","name":"userinfo","schema":{"type":"string"}}],"tags":["endpoints"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedLegacyAuditLogList"}}},"description":""}}}},"/api/v2/endpoints/{id}/history/legacy/count/":{"get":{"operationId":"endpoints_history_legacy_count_retrieve","description":"Get the total count of legacy audit log entries for an object.\n\nApplies the same filters as history_legacy (date filter, LegacyAuditLogFilter)\nto ensure the count matches what users will see when viewing the legacy history page.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this endpoint.","required":true}],"tags":["endpoints"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"integer"}}}}},"description":""}}}},"/api/v2/engagement_presets/":{"get":{"operationId":"engagement_presets_list","parameters":[{"in":"query","name":"id","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["network_locations","product","test_type"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"product","schema":{"type":"integer"}},{"in":"query","name":"title","schema":{"type":"string"}}],"tags":["engagement_presets"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedEngagementPresetsList"}}},"description":""}}},"post":{"operationId":"engagement_presets_create","tags":["engagement_presets"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EngagementPresetsRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/EngagementPresetsRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/EngagementPresetsRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EngagementPresets"}}},"description":""}}}},"/api/v2/engagement_presets/{id}/":{"get":{"operationId":"engagement_presets_retrieve","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this engagement_ presets.","required":true},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["network_locations","product","test_type"]}},"description":"List of fields for which to prefetch model instances and add those to the response"}],"tags":["engagement_presets"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EngagementPresets"}}},"description":""}}},"put":{"operationId":"engagement_presets_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this engagement_ presets.","required":true}],"tags":["engagement_presets"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EngagementPresetsRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/EngagementPresetsRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/EngagementPresetsRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EngagementPresets"}}},"description":""}}},"patch":{"operationId":"engagement_presets_partial_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this engagement_ presets.","required":true}],"tags":["engagement_presets"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedEngagementPresetsRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedEngagementPresetsRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedEngagementPresetsRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EngagementPresets"}}},"description":""}}},"delete":{"operationId":"engagement_presets_destroy","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this engagement_ presets.","required":true}],"tags":["engagement_presets"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/engagement_presets/{id}/delete_preview/":{"get":{"operationId":"engagement_presets_delete_preview_list","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this engagement_ presets.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["engagement_presets"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/engagements/":{"get":{"operationId":"engagements_list","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"query","name":"active","schema":{"type":"boolean"}},{"in":"query","name":"api_test","schema":{"type":"boolean"}},{"in":"query","name":"has_tags","schema":{"type":"boolean"},"description":"Has tags"},{"in":"query","name":"id","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"name","schema":{"type":"string"}},{"in":"query","name":"not_product__tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags not present on Asset","explode":false,"style":"form"},{"in":"query","name":"not_tag","schema":{"type":"string"},"description":"Not Tag name contains"},{"in":"query","name":"not_tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags not present on model","explode":false,"style":"form"},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-created","-lead","-name","-status","-target_end","-target_start","-updated","-version","created","lead","name","status","target_end","target_start","updated","version"]}},"description":"Ordering\n\n* `name` - Engagement Name\n* `-name` - Engagement Name (descending)\n* `version` - Version\n* `-version` - Version (descending)\n* `target_start` - Target start\n* `-target_start` - Target start (descending)\n* `target_end` - Target end\n* `-target_end` - Target end (descending)\n* `status` - Status\n* `-status` - Status (descending)\n* `lead` - Lead\n* `-lead` - Lead (descending)\n* `created` - Created\n* `-created` - Created (descending)\n* `updated` - Updated\n* `-updated` - Updated (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"pen_test","schema":{"type":"boolean"}},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["build_server","files","lead","notes","orchestration_engine","product","risk_acceptance","source_code_management_server"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"product","schema":{"type":"integer"}},{"in":"query","name":"product__prod_type","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"product__tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags present on Asset (uses OR for multiple values)","explode":false,"style":"form"},{"in":"query","name":"product__tags__and","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags to match with an AND expression present on Asset","explode":false,"style":"form"},{"in":"query","name":"report_type","schema":{"type":"integer"}},{"in":"query","name":"requester","schema":{"type":"integer"}},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"},{"in":"query","name":"status","schema":{"type":"string","x-spec-enum-id":"ff79738e944f9d44","nullable":true,"enum":["Blocked","Cancelled","Completed","In Progress","Not Started","On Hold","Scheduled","Waiting for Resource"]},"description":"* `Not Started` - Not Started\n* `Blocked` - Blocked\n* `Cancelled` - Cancelled\n* `Completed` - Completed\n* `In Progress` - In Progress\n* `On Hold` - On Hold\n* `Scheduled` - Scheduled\n* `Waiting for Resource` - Waiting for Resource"},{"in":"query","name":"tag","schema":{"type":"string"},"description":"Tag name contains"},{"in":"query","name":"tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags (uses OR for multiple values)","explode":false,"style":"form"},{"in":"query","name":"tags__and","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags to match with an AND expression","explode":false,"style":"form"},{"in":"query","name":"target_end","schema":{"type":"string","format":"date"}},{"in":"query","name":"target_start","schema":{"type":"string","format":"date"}},{"in":"query","name":"threat_model","schema":{"type":"boolean"}},{"in":"query","name":"updated","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"version","schema":{"type":"string"}}],"tags":["engagements"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedEnhancedEngagementList"}}},"description":""}}},"post":{"operationId":"engagements_create","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","tags":["engagements"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedEngagementRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/EnhancedEngagementRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/EnhancedEngagementRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedEngagement"}}},"description":""}}}},"/api/v2/engagements/{id}/":{"get":{"operationId":"engagements_retrieve","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this engagement.","required":true},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["build_server","files","lead","notes","orchestration_engine","product","risk_acceptance","source_code_management_server"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"}],"tags":["engagements"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedEngagement"}}},"description":""}}},"put":{"operationId":"engagements_update","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this engagement.","required":true}],"tags":["engagements"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedEngagementRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/EnhancedEngagementRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/EnhancedEngagementRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedEngagement"}}},"description":""}}},"patch":{"operationId":"engagements_partial_update","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this engagement.","required":true}],"tags":["engagements"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedEnhancedEngagementRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedEnhancedEngagementRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedEnhancedEngagementRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedEngagement"}}},"description":""}}},"delete":{"operationId":"engagements_destroy","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this engagement.","required":true}],"tags":["engagements"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/engagements/{id}/accept_risks/":{"post":{"operationId":"engagements_accept_risks_create","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this engagement.","required":true}],"tags":["engagements"],"requestBody":{"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AcceptedRiskRequest"}}},"application/x-www-form-urlencoded":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AcceptedRiskRequest"}}},"multipart/form-data":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AcceptedRiskRequest"}}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/RiskAcceptance"}}}},"description":""}}}},"/api/v2/engagements/{id}/close/":{"post":{"operationId":"engagements_close_create","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this engagement.","required":true}],"tags":["engagements"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"description":"No response body"}}}},"/api/v2/engagements/{id}/complete_checklist/":{"get":{"operationId":"engagements_complete_checklist_retrieve","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this engagement.","required":true}],"tags":["engagements"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedEngagement"}}},"description":""}}},"post":{"operationId":"engagements_complete_checklist_create","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this engagement.","required":true}],"tags":["engagements"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EngagementCheckListRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/EngagementCheckListRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/EngagementCheckListRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EngagementCheckList"}}},"description":""}}}},"/api/v2/engagements/{id}/delete_preview/":{"get":{"operationId":"engagements_delete_preview_list","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this engagement.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["engagements"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/engagements/{id}/files/":{"get":{"operationId":"engagements_files_retrieve","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this engagement.","required":true}],"tags":["engagements"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EngagementToFiles"}}},"description":""}}},"post":{"operationId":"engagements_files_create","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this engagement.","required":true}],"tags":["engagements"],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/AddNewFileOptionRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/File"}}},"description":""}}}},"/api/v2/engagements/{id}/files/{file_id}/":{"delete":{"operationId":"engagements_files_destroy","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"file_id","schema":{"type":"string","pattern":"^\\d+$"},"required":true},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this engagement.","required":true}],"tags":["engagements"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/engagements/{id}/files/change_name/{file_id}/":{"patch":{"operationId":"engagements_files_change_name_partial_update","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"file_id","schema":{"type":"string","pattern":"^\\d+$"},"required":true},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this engagement.","required":true}],"tags":["engagements"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedFileNameRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedFileNameRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedFileNameRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"description":"No response body"}}}},"/api/v2/engagements/{id}/files/download/{file_id}/":{"get":{"operationId":"engagements_files_download_retrieve","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"file_id","schema":{"type":"string","pattern":"^\\d+$"},"required":true},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this engagement.","required":true}],"tags":["engagements"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RawFile"}}},"description":""}}}},"/api/v2/engagements/{id}/finding_diff/{other_id}/":{"get":{"operationId":"engagements_finding_diff_retrieve","description":"Compares the findings associated with the two objects and returns\nadded, removed, equality, and improvement information.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this engagement.","required":true},{"in":"path","name":"other_id","schema":{"type":"string","pattern":"^\\d+$"},"required":true}],"tags":["engagements"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindingDiff"}}},"description":""}}}},"/api/v2/engagements/{id}/generate_report/":{"post":{"operationId":"engagements_generate_report_create","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this engagement.","required":true}],"tags":["engagements"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportGenerateOptionRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ReportGenerateOptionRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ReportGenerateOptionRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportGenerate"}}},"description":""}}}},"/api/v2/engagements/{id}/history/":{"get":{"operationId":"engagements_history_list","description":"Get audit log entries for an object with pagination.\n\nUses DojoEvents.objects.tracks(obj) to get events for the object itself,\nand DojoEvents.objects.references(obj) to get events for related objects\n(objects with foreign keys pointing to this object). Supports pagination, filtering, and sorting.\nAvailable at both /api/v2/ and /api/vue/ endpoints.\n\nArgs:\n    field_filter: Optional field name to filter by (e.g., \"finding_enrichment_settings\").\n                Only entries with changes to this field will be returned.","parameters":[{"in":"query","name":"active","schema":{"type":"boolean"}},{"in":"query","name":"api_test","schema":{"type":"boolean"}},{"in":"query","name":"has_tags","schema":{"type":"boolean"},"description":"Has tags"},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this engagement.","required":true},{"in":"query","name":"id","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"name","schema":{"type":"string"}},{"in":"query","name":"not_product__tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags not present on Asset","explode":false,"style":"form"},{"in":"query","name":"not_tag","schema":{"type":"string"},"description":"Not Tag name contains"},{"in":"query","name":"not_tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags not present on model","explode":false,"style":"form"},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-created","-lead","-name","-status","-target_end","-target_start","-updated","-version","created","lead","name","status","target_end","target_start","updated","version"]}},"description":"Ordering\n\n* `name` - Engagement Name\n* `-name` - Engagement Name (descending)\n* `version` - Version\n* `-version` - Version (descending)\n* `target_start` - Target start\n* `-target_start` - Target start (descending)\n* `target_end` - Target end\n* `-target_end` - Target end (descending)\n* `status` - Status\n* `-status` - Status (descending)\n* `lead` - Lead\n* `-lead` - Lead (descending)\n* `created` - Created\n* `-created` - Created (descending)\n* `updated` - Updated\n* `-updated` - Updated (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"pen_test","schema":{"type":"boolean"}},{"in":"query","name":"product","schema":{"type":"integer"}},{"in":"query","name":"product__prod_type","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"product__tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags present on Asset (uses OR for multiple values)","explode":false,"style":"form"},{"in":"query","name":"product__tags__and","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags to match with an AND expression present on Asset","explode":false,"style":"form"},{"in":"query","name":"report_type","schema":{"type":"integer"}},{"in":"query","name":"requester","schema":{"type":"integer"}},{"in":"query","name":"status","schema":{"type":"string","x-spec-enum-id":"ff79738e944f9d44","nullable":true,"enum":["Blocked","Cancelled","Completed","In Progress","Not Started","On Hold","Scheduled","Waiting for Resource"]},"description":"* `Not Started` - Not Started\n* `Blocked` - Blocked\n* `Cancelled` - Cancelled\n* `Completed` - Completed\n* `In Progress` - In Progress\n* `On Hold` - On Hold\n* `Scheduled` - Scheduled\n* `Waiting for Resource` - Waiting for Resource"},{"in":"query","name":"tag","schema":{"type":"string"},"description":"Tag name contains"},{"in":"query","name":"tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags (uses OR for multiple values)","explode":false,"style":"form"},{"in":"query","name":"tags__and","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags to match with an AND expression","explode":false,"style":"form"},{"in":"query","name":"target_end","schema":{"type":"string","format":"date"}},{"in":"query","name":"target_start","schema":{"type":"string","format":"date"}},{"in":"query","name":"threat_model","schema":{"type":"boolean"}},{"in":"query","name":"updated","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"version","schema":{"type":"string"}}],"tags":["engagements"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedAuditLogList"}}},"description":""}}}},"/api/v2/engagements/{id}/history/legacy/":{"get":{"operationId":"engagements_history_legacy_list","description":"Get legacy audit log for an object (django-auditlog entries) with pagination.\n\nSupports pagination, filtering, and sorting.\nAvailable at both /api/v2/ and /api/vue/ endpoints.","parameters":[{"in":"query","name":"active","schema":{"type":"boolean"}},{"in":"query","name":"api_test","schema":{"type":"boolean"}},{"in":"query","name":"has_tags","schema":{"type":"boolean"},"description":"Has tags"},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this engagement.","required":true},{"in":"query","name":"id","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"name","schema":{"type":"string"}},{"in":"query","name":"not_product__tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags not present on Asset","explode":false,"style":"form"},{"in":"query","name":"not_tag","schema":{"type":"string"},"description":"Not Tag name contains"},{"in":"query","name":"not_tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags not present on model","explode":false,"style":"form"},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-created","-lead","-name","-status","-target_end","-target_start","-updated","-version","created","lead","name","status","target_end","target_start","updated","version"]}},"description":"Ordering\n\n* `name` - Engagement Name\n* `-name` - Engagement Name (descending)\n* `version` - Version\n* `-version` - Version (descending)\n* `target_start` - Target start\n* `-target_start` - Target start (descending)\n* `target_end` - Target end\n* `-target_end` - Target end (descending)\n* `status` - Status\n* `-status` - Status (descending)\n* `lead` - Lead\n* `-lead` - Lead (descending)\n* `created` - Created\n* `-created` - Created (descending)\n* `updated` - Updated\n* `-updated` - Updated (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"pen_test","schema":{"type":"boolean"}},{"in":"query","name":"product","schema":{"type":"integer"}},{"in":"query","name":"product__prod_type","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"product__tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags present on Asset (uses OR for multiple values)","explode":false,"style":"form"},{"in":"query","name":"product__tags__and","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags to match with an AND expression present on Asset","explode":false,"style":"form"},{"in":"query","name":"report_type","schema":{"type":"integer"}},{"in":"query","name":"requester","schema":{"type":"integer"}},{"in":"query","name":"status","schema":{"type":"string","x-spec-enum-id":"ff79738e944f9d44","nullable":true,"enum":["Blocked","Cancelled","Completed","In Progress","Not Started","On Hold","Scheduled","Waiting for Resource"]},"description":"* `Not Started` - Not Started\n* `Blocked` - Blocked\n* `Cancelled` - Cancelled\n* `Completed` - Completed\n* `In Progress` - In Progress\n* `On Hold` - On Hold\n* `Scheduled` - Scheduled\n* `Waiting for Resource` - Waiting for Resource"},{"in":"query","name":"tag","schema":{"type":"string"},"description":"Tag name contains"},{"in":"query","name":"tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags (uses OR for multiple values)","explode":false,"style":"form"},{"in":"query","name":"tags__and","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags to match with an AND expression","explode":false,"style":"form"},{"in":"query","name":"target_end","schema":{"type":"string","format":"date"}},{"in":"query","name":"target_start","schema":{"type":"string","format":"date"}},{"in":"query","name":"threat_model","schema":{"type":"boolean"}},{"in":"query","name":"updated","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"version","schema":{"type":"string"}}],"tags":["engagements"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedLegacyAuditLogList"}}},"description":""}}}},"/api/v2/engagements/{id}/history/legacy/count/":{"get":{"operationId":"engagements_history_legacy_count_retrieve","description":"Get the total count of legacy audit log entries for an object.\n\nApplies the same filters as history_legacy (date filter, LegacyAuditLogFilter)\nto ensure the count matches what users will see when viewing the legacy history page.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this engagement.","required":true}],"tags":["engagements"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"integer"}}}}},"description":""}}}},"/api/v2/engagements/{id}/notes/":{"get":{"operationId":"engagements_notes_retrieve","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this engagement.","required":true}],"tags":["engagements"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EngagementToNotes"}}},"description":""}}},"post":{"operationId":"engagements_notes_create","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this engagement.","required":true}],"tags":["engagements"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddNewNoteOptionRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/AddNewNoteOptionRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/AddNewNoteOptionRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Note"}}},"description":""}}}},"/api/v2/engagements/{id}/reopen/":{"post":{"operationId":"engagements_reopen_create","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this engagement.","required":true}],"tags":["engagements"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"description":"No response body"}}}},"/api/v2/engagements/{id}/update_jira_epic/":{"post":{"operationId":"engagements_update_jira_epic_create","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this engagement.","required":true}],"tags":["engagements"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EngagementUpdateJiraEpicRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/EngagementUpdateJiraEpicRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/EngagementUpdateJiraEpicRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EngagementUpdateJiraEpic"}}},"description":""}}}},"/api/v2/executive_insights/active_age_by_risk/":{"get":{"operationId":"executive_insights_active_age_by_risk_retrieve","description":"the average age of active findings by risk","tags":["executive_insights"],"security":[{"tokenAuth":[]}],"responses":{"200":{"description":"No response body"}}}},"/api/v2/executive_insights/active_age_by_severity/":{"get":{"operationId":"executive_insights_active_age_by_severity_retrieve","description":"the average age of active findings by severity","tags":["executive_insights"],"security":[{"tokenAuth":[]}],"responses":{"200":{"description":"No response body"}}}},"/api/v2/executive_insights/average_time_to_remediation/":{"get":{"operationId":"executive_insights_average_time_to_remediation_retrieve","description":"the average time taken for a finding to go from open to mitigated by date","tags":["executive_insights"],"security":[{"tokenAuth":[]}],"responses":{"200":{"description":"No response body"}}}},"/api/v2/executive_insights/epss_score_by_tool/":{"get":{"operationId":"executive_insights_epss_score_by_tool_retrieve","description":"the average epss score across all findings, grouped by test type name","tags":["executive_insights"],"security":[{"tokenAuth":[]}],"responses":{"200":{"description":"No response body"}}}},"/api/v2/executive_insights/findings_fixed/":{"get":{"operationId":"executive_insights_findings_fixed_retrieve","description":"the total number of findings fixed (mitigated)","tags":["executive_insights"],"security":[{"tokenAuth":[]}],"responses":{"200":{"description":"No response body"}}}},"/api/v2/executive_insights/mitigated_over_time/":{"get":{"operationId":"executive_insights_mitigated_over_time_retrieve","description":"total number of findings mitigated within sla, outside of sla, and mitigated by date","tags":["executive_insights"],"security":[{"tokenAuth":[]}],"responses":{"200":{"description":"No response body"}}}},"/api/v2/executive_insights/products_tested/":{"get":{"operationId":"executive_insights_products_tested_retrieve","description":"the total number of products tested (findings were created)","tags":["executive_insights"],"security":[{"tokenAuth":[]}],"responses":{"200":{"description":"No response body"}}}},"/api/v2/executive_insights/severity_over_time/":{"get":{"operationId":"executive_insights_severity_over_time_retrieve","description":"the running total of findings by severity by date","tags":["executive_insights"],"security":[{"tokenAuth":[]}],"responses":{"200":{"description":"No response body"}}}},"/api/v2/executive_insights/status_over_time/":{"get":{"operationId":"executive_insights_status_over_time_retrieve","description":"the running total of findings of active and mitigated status by date","tags":["executive_insights"],"security":[{"tokenAuth":[]}],"responses":{"200":{"description":"No response body"}}}},"/api/v2/executive_insights/summary/":{"get":{"operationId":"executive_insights_summary_retrieve","description":"the simple metrics (total, active, verified, etc.) for all objects, all product types, and all products","tags":["executive_insights"],"security":[{"tokenAuth":[]}],"responses":{"200":{"description":"No response body"}}}},"/api/v2/executive_insights/tests_performed/":{"get":{"operationId":"executive_insights_tests_performed_retrieve","description":"the total number of tests performed","tags":["executive_insights"],"security":[{"tokenAuth":[]}],"responses":{"200":{"description":"No response body"}}}},"/api/v2/finding_groups/":{"get":{"operationId":"finding_groups_list","parameters":[{"in":"query","name":"created_after","schema":{"type":"string","format":"date"}},{"in":"query","name":"created_before","schema":{"type":"string","format":"date"}},{"in":"query","name":"created_during","schema":{"type":"string"}},{"in":"query","name":"created_is_after","schema":{"type":"string","format":"date"}},{"in":"query","name":"created_is_before","schema":{"type":"string","format":"date"}},{"in":"query","name":"created_is_during","schema":{"type":"string"}},{"in":"query","name":"created_is_on","schema":{"type":"string"}},{"in":"query","name":"created_is_past_days","schema":{"type":"number"}},{"in":"query","name":"created_on","schema":{"type":"string"}},{"in":"query","name":"created_past_days","schema":{"type":"number"}},{"in":"query","name":"creator","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"exclude_id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"findings_count_equals","schema":{"type":"number"}},{"in":"query","name":"findings_count_greater_than","schema":{"type":"number"}},{"in":"query","name":"findings_count_greater_than_equal_to","schema":{"type":"number"}},{"in":"query","name":"findings_count_in","schema":{"type":"array","items":{"type":"number"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"findings_count_less_than","schema":{"type":"number"}},{"in":"query","name":"findings_count_less_than_equal_to","schema":{"type":"number"}},{"in":"query","name":"findings_count_not_equals","schema":{"type":"number"}},{"in":"query","name":"findings_count_not_in","schema":{"type":"array","items":{"type":"number"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"group_age_equals","schema":{"type":"number"}},{"in":"query","name":"group_age_greater_than","schema":{"type":"number"}},{"in":"query","name":"group_age_greater_than_equal_to","schema":{"type":"number"}},{"in":"query","name":"group_age_in","schema":{"type":"array","items":{"type":"number"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"group_age_less_than","schema":{"type":"number"}},{"in":"query","name":"group_age_less_than_equal_to","schema":{"type":"number"}},{"in":"query","name":"group_age_not_equals","schema":{"type":"number"}},{"in":"query","name":"group_age_not_in","schema":{"type":"array","items":{"type":"number"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"has_integrator","schema":{"type":"boolean"}},{"in":"query","name":"has_jira","schema":{"type":"boolean"}},{"in":"query","name":"id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"id_equals","schema":{"type":"integer"}},{"in":"query","name":"id_greater_than","schema":{"type":"integer"}},{"in":"query","name":"id_greater_than_equal_to","schema":{"type":"integer"}},{"in":"query","name":"id_in","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"id_less_than","schema":{"type":"integer"}},{"in":"query","name":"id_less_than_equal_to","schema":{"type":"integer"}},{"in":"query","name":"id_not_equals","schema":{"type":"integer"}},{"in":"query","name":"id_not_in","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"name_contains","schema":{"type":"string"}},{"in":"query","name":"name_ends_with","schema":{"type":"string"}},{"in":"query","name":"name_exact","schema":{"type":"string"}},{"in":"query","name":"name_not_contains","schema":{"type":"string"}},{"in":"query","name":"name_not_exact","schema":{"type":"string"}},{"in":"query","name":"name_not_regex","schema":{"type":"string"}},{"in":"query","name":"name_regex","schema":{"type":"string"}},{"in":"query","name":"name_starts_with","schema":{"type":"string"}},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-created","-creator","-creator__first_name","-creator__last_name","-findings_count","-group_age","-id","-name","-severity","-sla_days_remaining","-status","-test__title","-updated","created","creator","creator__first_name","creator__last_name","findings_count","group_age","id","name","severity","sla_days_remaining","status","test__title","updated"]}},"description":"Ordering\n\n* `id` - Id\n* `-id` - Id (descending)\n* `name` - Name\n* `-name` - Name (descending)\n* `severity` - Severity\n* `-severity` - Severity (descending)\n* `test__title` - Test  title\n* `-test__title` - Test  title (descending)\n* `findings_count` - Findings count\n* `-findings_count` - Findings count (descending)\n* `created` - Created\n* `-created` - Created (descending)\n* `updated` - Updated\n* `-updated` - Updated (descending)\n* `creator` - Creator\n* `-creator` - Creator (descending)\n* `creator__first_name` - Creator  first name\n* `-creator__first_name` - Creator  first name (descending)\n* `creator__last_name` - Creator  last name\n* `-creator__last_name` - Creator  last name (descending)\n* `status` - Status\n* `-status` - Status (descending)\n* `sla_days_remaining` - Sla days remaining\n* `-sla_days_remaining` - Sla days remaining (descending)\n* `group_age` - Group age\n* `-group_age` - Group age (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["creator","findings","test"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"search","schema":{"type":"string"},"description":"Search Across: name, test__title"},{"in":"query","name":"severity","schema":{"type":"array","items":{"type":"string","enum":["Critical","High","Info","Low","Medium"]}},"description":"* `Critical` - Critical\n* `High` - High\n* `Medium` - Medium\n* `Low` - Low\n* `Info` - Info","explode":true,"style":"form"},{"in":"query","name":"sla_days_remaining_equals","schema":{"type":"number"}},{"in":"query","name":"sla_days_remaining_greater_than","schema":{"type":"number"}},{"in":"query","name":"sla_days_remaining_greater_than_equal_to","schema":{"type":"number"}},{"in":"query","name":"sla_days_remaining_in","schema":{"type":"array","items":{"type":"number"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"sla_days_remaining_less_than","schema":{"type":"number"}},{"in":"query","name":"sla_days_remaining_less_than_equal_to","schema":{"type":"number"}},{"in":"query","name":"sla_days_remaining_not_equals","schema":{"type":"number"}},{"in":"query","name":"sla_days_remaining_not_in","schema":{"type":"array","items":{"type":"number"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"status","schema":{"type":"array","items":{"type":"string","enum":["Active","Inactive","Mitigated"]}},"description":"* `Active` - Active\n* `Inactive` - Inactive\n* `Mitigated` - Mitigated","explode":true,"style":"form"},{"in":"query","name":"status_all","schema":{"type":"string"}},{"in":"query","name":"status_any","schema":{"type":"string"}},{"in":"query","name":"test","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"updated_after","schema":{"type":"string","format":"date"}},{"in":"query","name":"updated_before","schema":{"type":"string","format":"date"}},{"in":"query","name":"updated_during","schema":{"type":"string"}},{"in":"query","name":"updated_on","schema":{"type":"string"}},{"in":"query","name":"updated_past_days","schema":{"type":"number"}}],"tags":["finding_groups"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedFullFindingGroupList"}}},"description":""}}},"post":{"operationId":"finding_groups_create","tags":["finding_groups"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FullFindingGroupRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/FullFindingGroupRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/FullFindingGroupRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FullFindingGroup"}}},"description":""}}}},"/api/v2/finding_groups/{id}/":{"get":{"operationId":"finding_groups_retrieve","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this finding_ group.","required":true},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["creator","findings","test"]}},"description":"List of fields for which to prefetch model instances and add those to the response"}],"tags":["finding_groups"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FullFindingGroup"}}},"description":""}}},"put":{"operationId":"finding_groups_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this finding_ group.","required":true}],"tags":["finding_groups"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FullFindingGroupRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/FullFindingGroupRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/FullFindingGroupRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FullFindingGroup"}}},"description":""}}},"patch":{"operationId":"finding_groups_partial_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this finding_ group.","required":true}],"tags":["finding_groups"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedFullFindingGroupRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedFullFindingGroupRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedFullFindingGroupRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FullFindingGroup"}}},"description":""}}},"delete":{"operationId":"finding_groups_destroy","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this finding_ group.","required":true}],"tags":["finding_groups"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/finding_groups/{id}/delete_preview/":{"get":{"operationId":"finding_groups_delete_preview_list","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this finding_ group.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["finding_groups"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/finding_groups/{id}/history/":{"get":{"operationId":"finding_groups_history_list","description":"Get audit log entries for an object with pagination.\n\nUses DojoEvents.objects.tracks(obj) to get events for the object itself,\nand DojoEvents.objects.references(obj) to get events for related objects\n(objects with foreign keys pointing to this object). Supports pagination, filtering, and sorting.\nAvailable at both /api/v2/ and /api/vue/ endpoints.\n\nArgs:\n    field_filter: Optional field name to filter by (e.g., \"finding_enrichment_settings\").\n                Only entries with changes to this field will be returned.","parameters":[{"in":"query","name":"created_after","schema":{"type":"string","format":"date"}},{"in":"query","name":"created_before","schema":{"type":"string","format":"date"}},{"in":"query","name":"created_during","schema":{"type":"string"}},{"in":"query","name":"created_is_after","schema":{"type":"string","format":"date"}},{"in":"query","name":"created_is_before","schema":{"type":"string","format":"date"}},{"in":"query","name":"created_is_during","schema":{"type":"string"}},{"in":"query","name":"created_is_on","schema":{"type":"string"}},{"in":"query","name":"created_is_past_days","schema":{"type":"number"}},{"in":"query","name":"created_on","schema":{"type":"string"}},{"in":"query","name":"created_past_days","schema":{"type":"number"}},{"in":"query","name":"creator","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"exclude_id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"findings_count_equals","schema":{"type":"number"}},{"in":"query","name":"findings_count_greater_than","schema":{"type":"number"}},{"in":"query","name":"findings_count_greater_than_equal_to","schema":{"type":"number"}},{"in":"query","name":"findings_count_in","schema":{"type":"array","items":{"type":"number"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"findings_count_less_than","schema":{"type":"number"}},{"in":"query","name":"findings_count_less_than_equal_to","schema":{"type":"number"}},{"in":"query","name":"findings_count_not_equals","schema":{"type":"number"}},{"in":"query","name":"findings_count_not_in","schema":{"type":"array","items":{"type":"number"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"group_age_equals","schema":{"type":"number"}},{"in":"query","name":"group_age_greater_than","schema":{"type":"number"}},{"in":"query","name":"group_age_greater_than_equal_to","schema":{"type":"number"}},{"in":"query","name":"group_age_in","schema":{"type":"array","items":{"type":"number"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"group_age_less_than","schema":{"type":"number"}},{"in":"query","name":"group_age_less_than_equal_to","schema":{"type":"number"}},{"in":"query","name":"group_age_not_equals","schema":{"type":"number"}},{"in":"query","name":"group_age_not_in","schema":{"type":"array","items":{"type":"number"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"has_integrator","schema":{"type":"boolean"}},{"in":"query","name":"has_jira","schema":{"type":"boolean"}},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this finding_ group.","required":true},{"in":"query","name":"id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"id_equals","schema":{"type":"integer"}},{"in":"query","name":"id_greater_than","schema":{"type":"integer"}},{"in":"query","name":"id_greater_than_equal_to","schema":{"type":"integer"}},{"in":"query","name":"id_in","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"id_less_than","schema":{"type":"integer"}},{"in":"query","name":"id_less_than_equal_to","schema":{"type":"integer"}},{"in":"query","name":"id_not_equals","schema":{"type":"integer"}},{"in":"query","name":"id_not_in","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"name_contains","schema":{"type":"string"}},{"in":"query","name":"name_ends_with","schema":{"type":"string"}},{"in":"query","name":"name_exact","schema":{"type":"string"}},{"in":"query","name":"name_not_contains","schema":{"type":"string"}},{"in":"query","name":"name_not_exact","schema":{"type":"string"}},{"in":"query","name":"name_not_regex","schema":{"type":"string"}},{"in":"query","name":"name_regex","schema":{"type":"string"}},{"in":"query","name":"name_starts_with","schema":{"type":"string"}},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-created","-creator","-creator__first_name","-creator__last_name","-findings_count","-group_age","-id","-name","-severity","-sla_days_remaining","-status","-test__title","-updated","created","creator","creator__first_name","creator__last_name","findings_count","group_age","id","name","severity","sla_days_remaining","status","test__title","updated"]}},"description":"Ordering\n\n* `id` - Id\n* `-id` - Id (descending)\n* `name` - Name\n* `-name` - Name (descending)\n* `severity` - Severity\n* `-severity` - Severity (descending)\n* `test__title` - Test  title\n* `-test__title` - Test  title (descending)\n* `findings_count` - Findings count\n* `-findings_count` - Findings count (descending)\n* `created` - Created\n* `-created` - Created (descending)\n* `updated` - Updated\n* `-updated` - Updated (descending)\n* `creator` - Creator\n* `-creator` - Creator (descending)\n* `creator__first_name` - Creator  first name\n* `-creator__first_name` - Creator  first name (descending)\n* `creator__last_name` - Creator  last name\n* `-creator__last_name` - Creator  last name (descending)\n* `status` - Status\n* `-status` - Status (descending)\n* `sla_days_remaining` - Sla days remaining\n* `-sla_days_remaining` - Sla days remaining (descending)\n* `group_age` - Group age\n* `-group_age` - Group age (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"search","schema":{"type":"string"},"description":"Search Across: name, test__title"},{"in":"query","name":"severity","schema":{"type":"array","items":{"type":"string","enum":["Critical","High","Info","Low","Medium"]}},"description":"* `Critical` - Critical\n* `High` - High\n* `Medium` - Medium\n* `Low` - Low\n* `Info` - Info","explode":true,"style":"form"},{"in":"query","name":"sla_days_remaining_equals","schema":{"type":"number"}},{"in":"query","name":"sla_days_remaining_greater_than","schema":{"type":"number"}},{"in":"query","name":"sla_days_remaining_greater_than_equal_to","schema":{"type":"number"}},{"in":"query","name":"sla_days_remaining_in","schema":{"type":"array","items":{"type":"number"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"sla_days_remaining_less_than","schema":{"type":"number"}},{"in":"query","name":"sla_days_remaining_less_than_equal_to","schema":{"type":"number"}},{"in":"query","name":"sla_days_remaining_not_equals","schema":{"type":"number"}},{"in":"query","name":"sla_days_remaining_not_in","schema":{"type":"array","items":{"type":"number"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"status","schema":{"type":"array","items":{"type":"string","enum":["Active","Inactive","Mitigated"]}},"description":"* `Active` - Active\n* `Inactive` - Inactive\n* `Mitigated` - Mitigated","explode":true,"style":"form"},{"in":"query","name":"status_all","schema":{"type":"string"}},{"in":"query","name":"status_any","schema":{"type":"string"}},{"in":"query","name":"test","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"updated_after","schema":{"type":"string","format":"date"}},{"in":"query","name":"updated_before","schema":{"type":"string","format":"date"}},{"in":"query","name":"updated_during","schema":{"type":"string"}},{"in":"query","name":"updated_on","schema":{"type":"string"}},{"in":"query","name":"updated_past_days","schema":{"type":"number"}}],"tags":["finding_groups"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedAuditLogList"}}},"description":""}}}},"/api/v2/finding_groups/{id}/history/legacy/":{"get":{"operationId":"finding_groups_history_legacy_list","description":"Get legacy audit log for an object (django-auditlog entries) with pagination.\n\nSupports pagination, filtering, and sorting.\nAvailable at both /api/v2/ and /api/vue/ endpoints.","parameters":[{"in":"query","name":"created_after","schema":{"type":"string","format":"date"}},{"in":"query","name":"created_before","schema":{"type":"string","format":"date"}},{"in":"query","name":"created_during","schema":{"type":"string"}},{"in":"query","name":"created_is_after","schema":{"type":"string","format":"date"}},{"in":"query","name":"created_is_before","schema":{"type":"string","format":"date"}},{"in":"query","name":"created_is_during","schema":{"type":"string"}},{"in":"query","name":"created_is_on","schema":{"type":"string"}},{"in":"query","name":"created_is_past_days","schema":{"type":"number"}},{"in":"query","name":"created_on","schema":{"type":"string"}},{"in":"query","name":"created_past_days","schema":{"type":"number"}},{"in":"query","name":"creator","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"exclude_id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"findings_count_equals","schema":{"type":"number"}},{"in":"query","name":"findings_count_greater_than","schema":{"type":"number"}},{"in":"query","name":"findings_count_greater_than_equal_to","schema":{"type":"number"}},{"in":"query","name":"findings_count_in","schema":{"type":"array","items":{"type":"number"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"findings_count_less_than","schema":{"type":"number"}},{"in":"query","name":"findings_count_less_than_equal_to","schema":{"type":"number"}},{"in":"query","name":"findings_count_not_equals","schema":{"type":"number"}},{"in":"query","name":"findings_count_not_in","schema":{"type":"array","items":{"type":"number"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"group_age_equals","schema":{"type":"number"}},{"in":"query","name":"group_age_greater_than","schema":{"type":"number"}},{"in":"query","name":"group_age_greater_than_equal_to","schema":{"type":"number"}},{"in":"query","name":"group_age_in","schema":{"type":"array","items":{"type":"number"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"group_age_less_than","schema":{"type":"number"}},{"in":"query","name":"group_age_less_than_equal_to","schema":{"type":"number"}},{"in":"query","name":"group_age_not_equals","schema":{"type":"number"}},{"in":"query","name":"group_age_not_in","schema":{"type":"array","items":{"type":"number"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"has_integrator","schema":{"type":"boolean"}},{"in":"query","name":"has_jira","schema":{"type":"boolean"}},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this finding_ group.","required":true},{"in":"query","name":"id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"id_equals","schema":{"type":"integer"}},{"in":"query","name":"id_greater_than","schema":{"type":"integer"}},{"in":"query","name":"id_greater_than_equal_to","schema":{"type":"integer"}},{"in":"query","name":"id_in","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"id_less_than","schema":{"type":"integer"}},{"in":"query","name":"id_less_than_equal_to","schema":{"type":"integer"}},{"in":"query","name":"id_not_equals","schema":{"type":"integer"}},{"in":"query","name":"id_not_in","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"name_contains","schema":{"type":"string"}},{"in":"query","name":"name_ends_with","schema":{"type":"string"}},{"in":"query","name":"name_exact","schema":{"type":"string"}},{"in":"query","name":"name_not_contains","schema":{"type":"string"}},{"in":"query","name":"name_not_exact","schema":{"type":"string"}},{"in":"query","name":"name_not_regex","schema":{"type":"string"}},{"in":"query","name":"name_regex","schema":{"type":"string"}},{"in":"query","name":"name_starts_with","schema":{"type":"string"}},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-created","-creator","-creator__first_name","-creator__last_name","-findings_count","-group_age","-id","-name","-severity","-sla_days_remaining","-status","-test__title","-updated","created","creator","creator__first_name","creator__last_name","findings_count","group_age","id","name","severity","sla_days_remaining","status","test__title","updated"]}},"description":"Ordering\n\n* `id` - Id\n* `-id` - Id (descending)\n* `name` - Name\n* `-name` - Name (descending)\n* `severity` - Severity\n* `-severity` - Severity (descending)\n* `test__title` - Test  title\n* `-test__title` - Test  title (descending)\n* `findings_count` - Findings count\n* `-findings_count` - Findings count (descending)\n* `created` - Created\n* `-created` - Created (descending)\n* `updated` - Updated\n* `-updated` - Updated (descending)\n* `creator` - Creator\n* `-creator` - Creator (descending)\n* `creator__first_name` - Creator  first name\n* `-creator__first_name` - Creator  first name (descending)\n* `creator__last_name` - Creator  last name\n* `-creator__last_name` - Creator  last name (descending)\n* `status` - Status\n* `-status` - Status (descending)\n* `sla_days_remaining` - Sla days remaining\n* `-sla_days_remaining` - Sla days remaining (descending)\n* `group_age` - Group age\n* `-group_age` - Group age (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"search","schema":{"type":"string"},"description":"Search Across: name, test__title"},{"in":"query","name":"severity","schema":{"type":"array","items":{"type":"string","enum":["Critical","High","Info","Low","Medium"]}},"description":"* `Critical` - Critical\n* `High` - High\n* `Medium` - Medium\n* `Low` - Low\n* `Info` - Info","explode":true,"style":"form"},{"in":"query","name":"sla_days_remaining_equals","schema":{"type":"number"}},{"in":"query","name":"sla_days_remaining_greater_than","schema":{"type":"number"}},{"in":"query","name":"sla_days_remaining_greater_than_equal_to","schema":{"type":"number"}},{"in":"query","name":"sla_days_remaining_in","schema":{"type":"array","items":{"type":"number"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"sla_days_remaining_less_than","schema":{"type":"number"}},{"in":"query","name":"sla_days_remaining_less_than_equal_to","schema":{"type":"number"}},{"in":"query","name":"sla_days_remaining_not_equals","schema":{"type":"number"}},{"in":"query","name":"sla_days_remaining_not_in","schema":{"type":"array","items":{"type":"number"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"status","schema":{"type":"array","items":{"type":"string","enum":["Active","Inactive","Mitigated"]}},"description":"* `Active` - Active\n* `Inactive` - Inactive\n* `Mitigated` - Mitigated","explode":true,"style":"form"},{"in":"query","name":"status_all","schema":{"type":"string"}},{"in":"query","name":"status_any","schema":{"type":"string"}},{"in":"query","name":"test","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"updated_after","schema":{"type":"string","format":"date"}},{"in":"query","name":"updated_before","schema":{"type":"string","format":"date"}},{"in":"query","name":"updated_during","schema":{"type":"string"}},{"in":"query","name":"updated_on","schema":{"type":"string"}},{"in":"query","name":"updated_past_days","schema":{"type":"number"}}],"tags":["finding_groups"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedLegacyAuditLogList"}}},"description":""}}}},"/api/v2/finding_groups/{id}/history/legacy/count/":{"get":{"operationId":"finding_groups_history_legacy_count_retrieve","description":"Get the total count of legacy audit log entries for an object.\n\nApplies the same filters as history_legacy (date filter, LegacyAuditLogFilter)\nto ensure the count matches what users will see when viewing the legacy history page.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this finding_ group.","required":true}],"tags":["finding_groups"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"integer"}}}}},"description":""}}}},"/api/v2/finding_templates/":{"get":{"operationId":"finding_templates_list","parameters":[{"in":"query","name":"cwe","schema":{"type":"integer"}},{"in":"query","name":"description","schema":{"type":"string"}},{"in":"query","name":"id","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"mitigation","schema":{"type":"string"}},{"in":"query","name":"not_tag","schema":{"type":"string"},"description":"Not Tag name contains"},{"in":"query","name":"not_tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags not present on model","explode":false,"style":"form"},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-cwe","-title","cwe","title"]}},"description":"Ordering\n\n* `title` - Title\n* `-title` - Title (descending)\n* `cwe` - Cwe\n* `-cwe` - Cwe (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"severity","schema":{"type":"string"}},{"in":"query","name":"tag","schema":{"type":"string"},"description":"Tag name contains"},{"in":"query","name":"tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags (uses OR for multiple values)","explode":false,"style":"form"},{"in":"query","name":"tags__and","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags to match with an AND expression","explode":false,"style":"form"},{"in":"query","name":"title","schema":{"type":"string"}}],"tags":["finding_templates"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedFindingTemplateList"}}},"description":""}}},"post":{"operationId":"finding_templates_create","tags":["finding_templates"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindingTemplateRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/FindingTemplateRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/FindingTemplateRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindingTemplate"}}},"description":""}}}},"/api/v2/finding_templates/{id}/":{"get":{"operationId":"finding_templates_retrieve","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this finding_ template.","required":true}],"tags":["finding_templates"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindingTemplate"}}},"description":""}}},"put":{"operationId":"finding_templates_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this finding_ template.","required":true}],"tags":["finding_templates"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindingTemplateRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/FindingTemplateRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/FindingTemplateRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindingTemplate"}}},"description":""}}},"patch":{"operationId":"finding_templates_partial_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this finding_ template.","required":true}],"tags":["finding_templates"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedFindingTemplateRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedFindingTemplateRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedFindingTemplateRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindingTemplate"}}},"description":""}}},"delete":{"operationId":"finding_templates_destroy","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this finding_ template.","required":true}],"tags":["finding_templates"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/finding_templates/{id}/delete_preview/":{"get":{"operationId":"finding_templates_delete_preview_list","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this finding_ template.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["finding_templates"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/finding_templates/{id}/history/":{"get":{"operationId":"finding_templates_history_list","description":"Get audit log entries for an object with pagination.\n\nUses DojoEvents.objects.tracks(obj) to get events for the object itself,\nand DojoEvents.objects.references(obj) to get events for related objects\n(objects with foreign keys pointing to this object). Supports pagination, filtering, and sorting.\nAvailable at both /api/v2/ and /api/vue/ endpoints.\n\nArgs:\n    field_filter: Optional field name to filter by (e.g., \"finding_enrichment_settings\").\n                Only entries with changes to this field will be returned.","parameters":[{"in":"query","name":"cwe","schema":{"type":"integer"}},{"in":"query","name":"description","schema":{"type":"string"}},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this finding_ template.","required":true},{"in":"query","name":"id","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"mitigation","schema":{"type":"string"}},{"in":"query","name":"not_tag","schema":{"type":"string"},"description":"Not Tag name contains"},{"in":"query","name":"not_tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags not present on model","explode":false,"style":"form"},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-cwe","-title","cwe","title"]}},"description":"Ordering\n\n* `title` - Title\n* `-title` - Title (descending)\n* `cwe` - Cwe\n* `-cwe` - Cwe (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"severity","schema":{"type":"string"}},{"in":"query","name":"tag","schema":{"type":"string"},"description":"Tag name contains"},{"in":"query","name":"tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags (uses OR for multiple values)","explode":false,"style":"form"},{"in":"query","name":"tags__and","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags to match with an AND expression","explode":false,"style":"form"},{"in":"query","name":"title","schema":{"type":"string"}}],"tags":["finding_templates"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedAuditLogList"}}},"description":""}}}},"/api/v2/finding_templates/{id}/history/legacy/":{"get":{"operationId":"finding_templates_history_legacy_list","description":"Get legacy audit log for an object (django-auditlog entries) with pagination.\n\nSupports pagination, filtering, and sorting.\nAvailable at both /api/v2/ and /api/vue/ endpoints.","parameters":[{"in":"query","name":"cwe","schema":{"type":"integer"}},{"in":"query","name":"description","schema":{"type":"string"}},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this finding_ template.","required":true},{"in":"query","name":"id","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"mitigation","schema":{"type":"string"}},{"in":"query","name":"not_tag","schema":{"type":"string"},"description":"Not Tag name contains"},{"in":"query","name":"not_tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags not present on model","explode":false,"style":"form"},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-cwe","-title","cwe","title"]}},"description":"Ordering\n\n* `title` - Title\n* `-title` - Title (descending)\n* `cwe` - Cwe\n* `-cwe` - Cwe (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"severity","schema":{"type":"string"}},{"in":"query","name":"tag","schema":{"type":"string"},"description":"Tag name contains"},{"in":"query","name":"tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags (uses OR for multiple values)","explode":false,"style":"form"},{"in":"query","name":"tags__and","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags to match with an AND expression","explode":false,"style":"form"},{"in":"query","name":"title","schema":{"type":"string"}}],"tags":["finding_templates"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedLegacyAuditLogList"}}},"description":""}}}},"/api/v2/finding_templates/{id}/history/legacy/count/":{"get":{"operationId":"finding_templates_history_legacy_count_retrieve","description":"Get the total count of legacy audit log entries for an object.\n\nApplies the same filters as history_legacy (date filter, LegacyAuditLogFilter)\nto ensure the count matches what users will see when viewing the legacy history page.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this finding_ template.","required":true}],"tags":["finding_templates"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"integer"}}}}},"description":""}}}},"/api/v2/findings/":{"get":{"operationId":"findings_list","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"query","name":"active","schema":{"type":"boolean"}},{"in":"query","name":"component_name","schema":{"type":"string"}},{"in":"query","name":"component_version","schema":{"type":"string"}},{"in":"query","name":"created","schema":{"type":"string","format":"date-time","nullable":true,"enum":[1,2,3,4,5,6,7,null]},"description":"Time that the object was initially created, and saved to the database\n\n* `None` - Any date\n* `1` - Today\n* `2` - Past 7 days\n* `3` - Past 30 days\n* `4` - Past 90 days\n* `5` - Current month\n* `6` - Current year\n* `7` - Past year"},{"in":"query","name":"cvssv3","schema":{"type":"string"}},{"in":"query","name":"cvssv3_score","schema":{"type":"number","format":"float"}},{"in":"query","name":"cvssv4","schema":{"type":"string"}},{"in":"query","name":"cvssv4_score","schema":{"type":"number","format":"float"}},{"in":"query","name":"cwe","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"date","schema":{"type":"string","format":"date","enum":[1,2,3,4,5,6,7,null]},"description":"The date the flaw was discovered.\n\n* `None` - Any date\n* `1` - Today\n* `2` - Past 7 days\n* `3` - Past 30 days\n* `4` - Past 90 days\n* `5` - Current month\n* `6` - Current year\n* `7` - Past year"},{"in":"query","name":"defect_review_requested_by","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"description","schema":{"type":"string"}},{"in":"query","name":"discovered_after","schema":{"type":"string","format":"date"}},{"in":"query","name":"discovered_before","schema":{"type":"string","format":"date"}},{"in":"query","name":"discovered_on","schema":{"type":"string","format":"date"}},{"in":"query","name":"duplicate","schema":{"type":"boolean"}},{"in":"query","name":"duplicate_finding","schema":{"type":"integer"}},{"in":"query","name":"dynamic_finding","schema":{"type":"boolean"}},{"in":"query","name":"effort_for_fixing","schema":{"type":"string"}},{"in":"query","name":"endpoints","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"epss_percentile_max","schema":{"type":"number","format":"double","maximum":1.0,"minimum":0.0,"nullable":true},"description":"The range of EPSS percentiles to filter on; the min input is a lower bound, the max is an upper bound. Leaving one empty will skip that bound (e.g., leaving the min bound input empty will filter only on the max bound -- filtering on \"less than or equal\"). Leading 0 required."},{"in":"query","name":"epss_percentile_min","schema":{"type":"number","format":"double","maximum":1.0,"minimum":0.0,"nullable":true},"description":"The range of EPSS percentiles to filter on; the min input is a lower bound, the max is an upper bound. Leaving one empty will skip that bound (e.g., leaving the min bound input empty will filter only on the max bound -- filtering on \"less than or equal\"). Leading 0 required."},{"in":"query","name":"epss_score_max","schema":{"type":"number","format":"double","maximum":1.0,"minimum":0.0,"nullable":true},"description":"The range of EPSS score percentages to filter on; the min input is a lower bound, the max is an upper bound. Leaving one empty will skip that bound (e.g., leaving the min bound input empty will filter only on the max bound -- filtering on \"less than or equal\"). Leading 0 required."},{"in":"query","name":"epss_score_min","schema":{"type":"number","format":"double","maximum":1.0,"minimum":0.0,"nullable":true},"description":"The range of EPSS score percentages to filter on; the min input is a lower bound, the max is an upper bound. Leaving one empty will skip that bound (e.g., leaving the min bound input empty will filter only on the max bound -- filtering on \"less than or equal\"). Leading 0 required."},{"in":"query","name":"exact_title","schema":{"type":"string"},"description":"Finding title exact match (case-insensitive)"},{"in":"query","name":"false_p","schema":{"type":"boolean"}},{"in":"query","name":"file_path","schema":{"type":"string"}},{"in":"query","name":"finding_group","schema":{"type":"array","items":{"type":"number"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"fix_available","schema":{"type":"boolean"}},{"in":"query","name":"fix_version","schema":{"type":"string"}},{"in":"query","name":"found_by","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"has_jira","schema":{"type":"boolean"}},{"in":"query","name":"has_tags","schema":{"type":"boolean"},"description":"Has tags"},{"in":"query","name":"hash_code","schema":{"type":"string"}},{"in":"query","name":"id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"impact","schema":{"type":"string"}},{"in":"query","name":"inherited_tags","schema":{"type":"array","items":{"type":"array","items":{"type":"integer"}}},"description":"Internal use tags sepcifically for maintaining parity with product. This field will be present as a subset in the tags field","explode":true,"style":"form"},{"in":"query","name":"is_mitigated","schema":{"type":"boolean"}},{"in":"query","name":"jira_change","schema":{"type":"string","format":"date-time","nullable":true,"title":"Jira last update","enum":[1,2,3,4,5,6,7,null]},"description":"The date the linked Jira issue was last modified.\n\n* `None` - Any date\n* `1` - Today\n* `2` - Past 7 days\n* `3` - Past 30 days\n* `4` - Past 90 days\n* `5` - Current month\n* `6` - Current year\n* `7` - Past year"},{"in":"query","name":"jira_creation","schema":{"type":"string","format":"date-time","nullable":true,"enum":[1,2,3,4,5,6,7,null]},"description":"The date a Jira issue was created from this finding.\n\n* `None` - Any date\n* `1` - Today\n* `2` - Past 7 days\n* `3` - Past 30 days\n* `4` - Past 90 days\n* `5` - Current month\n* `6` - Current year\n* `7` - Past year"},{"in":"query","name":"kev_date","schema":{"type":"string","format":"date"}},{"in":"query","name":"known_exploited","schema":{"type":"boolean"}},{"in":"query","name":"last_reviewed","schema":{"type":"string","format":"date-time","nullable":true,"enum":[1,2,3,4,5,6,7,null]},"description":"Provides the date the flaw was last 'touched' by a tester.\n\n* `None` - Any date\n* `1` - Today\n* `2` - Past 7 days\n* `3` - Past 30 days\n* `4` - Past 90 days\n* `5` - Current month\n* `6` - Current year\n* `7` - Past year"},{"in":"query","name":"last_reviewed_by","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"last_status_update","schema":{"type":"string","format":"date-time"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"mitigated","schema":{"type":"string","format":"date-time","nullable":true,"enum":[1,2,3,4,5,6,7,null]},"description":"Denotes if this flaw has been fixed by storing the date it was fixed.\n\n* `None` - Any date\n* `1` - Today\n* `2` - Past 7 days\n* `3` - Past 30 days\n* `4` - Past 90 days\n* `5` - Current month\n* `6` - Current year\n* `7` - Past year"},{"in":"query","name":"mitigated_after","schema":{"type":"string","format":"date-time"},"description":"Mitigated After"},{"in":"query","name":"mitigated_before","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"mitigated_by","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"mitigated_on","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"mitigation","schema":{"type":"string"}},{"in":"query","name":"mitigation_available","schema":{"type":"boolean"},"description":"Mitigation Available"},{"in":"query","name":"mitigation_policy","schema":{"type":"array","items":{"type":"number"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"nb_occurences","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"not_tag","schema":{"type":"string"},"description":"Not Tag name contains"},{"in":"query","name":"not_tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags not present on model","explode":false,"style":"form"},{"in":"query","name":"not_test__engagement__product__tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags not present on Asset","explode":false,"style":"form"},{"in":"query","name":"not_test__engagement__tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags not present on engagement","explode":false,"style":"form"},{"in":"query","name":"not_test__tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags present on test","explode":false,"style":"form"},{"in":"query","name":"numerical_severity","schema":{"type":"string"}},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-active","-component_name","-component_version","-created","-cwe","-date","-duplicate","-dynamic_finding","-false_p","-found_by","-id","-is_mitigated","-last_reviewed","-last_status_update","-numerical_severity","-out_of_scope","-planned_remediation_date","-reviewers","-severity","-sla_expiration_date","-static_finding","-test__engagement__product__name","-title","-under_defect_review","-under_review","-verified","active","component_name","component_version","created","cwe","date","duplicate","dynamic_finding","false_p","found_by","id","is_mitigated","last_reviewed","last_status_update","numerical_severity","out_of_scope","planned_remediation_date","reviewers","severity","sla_expiration_date","static_finding","test__engagement__product__name","title","under_defect_review","under_review","verified"]}},"description":"Ordering\n\n* `active` - Active\n* `-active` - Active (descending)\n* `component_name` - Component name\n* `-component_name` - Component name (descending)\n* `component_version` - Component version\n* `-component_version` - Component version (descending)\n* `created` - Created\n* `-created` - Created (descending)\n* `last_status_update` - Last status update\n* `-last_status_update` - Last status update (descending)\n* `last_reviewed` - Last reviewed\n* `-last_reviewed` - Last reviewed (descending)\n* `cwe` - Cwe\n* `-cwe` - Cwe (descending)\n* `date` - Date\n* `-date` - Date (descending)\n* `duplicate` - Duplicate\n* `-duplicate` - Duplicate (descending)\n* `dynamic_finding` - Dynamic finding\n* `-dynamic_finding` - Dynamic finding (descending)\n* `false_p` - False p\n* `-false_p` - False p (descending)\n* `found_by` - Found by\n* `-found_by` - Found by (descending)\n* `id` - Id\n* `-id` - Id (descending)\n* `is_mitigated` - Is mitigated\n* `-is_mitigated` - Is mitigated (descending)\n* `numerical_severity` - Numerical severity\n* `-numerical_severity` - Numerical severity (descending)\n* `out_of_scope` - Out of scope\n* `-out_of_scope` - Out of scope (descending)\n* `planned_remediation_date` - Planned remediation date\n* `-planned_remediation_date` - Planned remediation date (descending)\n* `severity` - Severity\n* `-severity` - Severity (descending)\n* `sla_expiration_date` - Sla expiration date\n* `-sla_expiration_date` - Sla expiration date (descending)\n* `reviewers` - Reviewers\n* `-reviewers` - Reviewers (descending)\n* `static_finding` - Static finding\n* `-static_finding` - Static finding (descending)\n* `test__engagement__product__name` - Test  engagement  product  name\n* `-test__engagement__product__name` - Test  engagement  product  name (descending)\n* `title` - Title\n* `-title` - Title (descending)\n* `under_defect_review` - Under defect review\n* `-under_defect_review` - Under defect review (descending)\n* `under_review` - Under review\n* `-under_review` - Under review (descending)\n* `verified` - Verified\n* `-verified` - Verified (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"out_of_scope","schema":{"type":"boolean"}},{"in":"query","name":"outside_of_sla","schema":{"type":"number"}},{"in":"query","name":"owners","schema":{"type":"array","items":{"type":"string"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"owners_email","schema":{"type":"string"},"description":"owners_email"},{"in":"query","name":"owners_email_contains","schema":{"type":"string"},"description":"owners_email_contains"},{"in":"query","name":"param","schema":{"type":"string"}},{"in":"query","name":"payload","schema":{"type":"string"}},{"in":"query","name":"planned_remediation_date","schema":{"type":"string","format":"date"}},{"in":"query","name":"planned_remediation_version","schema":{"type":"string"}},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["auth_issues","author_issues","config_issues","crypto_issues","data_issues","defect_review_requested_by","duplicate_finding","endpoint_set","endpoints","files","finding_group_set","found_by","last_reviewed_by","mitigated_by","notes","other_issues","reporter","review_requested_by","reviewers","risk_acceptance_set","sensitive_issues","session_issues","sonarqube_issue","test"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"priority_max","schema":{"type":"number"},"description":"Return findings with a priority value less than the supplied value"},{"in":"query","name":"priority_min","schema":{"type":"number"},"description":"Return findings with a priority value greater than the supplied value"},{"in":"query","name":"product_lifecycle","schema":{"type":"string"},"description":"Comma separated list of exact Asset lifecycles"},{"in":"query","name":"product_name","schema":{"type":"string"},"description":"Exact Asset Name"},{"in":"query","name":"product_name_contains","schema":{"type":"string"},"description":"Asset Name Contains"},{"in":"query","name":"publish_date","schema":{"type":"string","format":"date"}},{"in":"query","name":"ransomware_used","schema":{"type":"boolean"}},{"in":"query","name":"references","schema":{"type":"string"}},{"in":"query","name":"related_fields","schema":{"type":"boolean"},"description":"Expand finding external relations (engagement, environment, product, product_type, test, test_type)"},{"in":"query","name":"reporter","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"},{"in":"query","name":"review_requested_by","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"reviewers","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"risk","schema":{"type":"string","enum":["Low","Medium","Needs Action","Urgent"]},"description":"The risk score in which a finding poses to the system it was discovered on\n\n* `Low` - Low\n* `Medium` - Medium\n* `Needs Action` - Needs Action\n* `Urgent` - Urgent"},{"in":"query","name":"risk_acceptance","schema":{"type":"number"}},{"in":"query","name":"risk_accepted","schema":{"type":"boolean"}},{"in":"query","name":"sast_sink_object","schema":{"type":"string"}},{"in":"query","name":"sast_source_file_path","schema":{"type":"string"}},{"in":"query","name":"sast_source_line","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"sast_source_object","schema":{"type":"string"}},{"in":"query","name":"scanner_confidence","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"service","schema":{"type":"string"}},{"in":"query","name":"severity","schema":{"type":"string"}},{"in":"query","name":"severity_justification","schema":{"type":"string"}},{"in":"query","name":"sla_expiration_date","schema":{"type":"string","format":"date"}},{"in":"query","name":"sla_start_date","schema":{"type":"string","format":"date"}},{"in":"query","name":"sonarqube_issue","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"static_finding","schema":{"type":"boolean"}},{"in":"query","name":"steps_to_reproduce","schema":{"type":"string"}},{"in":"query","name":"tag","schema":{"type":"string"},"description":"Tag name contains"},{"in":"query","name":"tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags (uses OR for multiple values)","explode":false,"style":"form"},{"in":"query","name":"tags__and","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags to match with an AND expression","explode":false,"style":"form"},{"in":"query","name":"test","schema":{"type":"integer"}},{"in":"query","name":"test__engagement","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"test__engagement__product","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"test__engagement__product__prod_type","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"test__engagement__product__tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags present on Asset (uses OR for multiple values)","explode":false,"style":"form"},{"in":"query","name":"test__engagement__product__tags__and","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags to match with an AND expression present on Asset","explode":false,"style":"form"},{"in":"query","name":"test__engagement__tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags present on engagement (uses OR for multiple values)","explode":false,"style":"form"},{"in":"query","name":"test__engagement__tags__and","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags to match with an AND expression present on engagement","explode":false,"style":"form"},{"in":"query","name":"test__tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags present on test (uses OR for multiple values)","explode":false,"style":"form"},{"in":"query","name":"test__tags__and","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags to match with an AND expression present on test","explode":false,"style":"form"},{"in":"query","name":"test__test_type","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"title","schema":{"type":"string"}},{"in":"query","name":"under_defect_review","schema":{"type":"boolean"}},{"in":"query","name":"under_review","schema":{"type":"boolean"}},{"in":"query","name":"unique_id_from_tool","schema":{"type":"string"}},{"in":"query","name":"updated","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"verified","schema":{"type":"boolean"}},{"in":"query","name":"vuln_id_from_tool","schema":{"type":"string"}},{"in":"query","name":"vulnerability_id","schema":{"type":"string"}}],"tags":["findings"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedFindingsList"}}},"description":""}}},"post":{"operationId":"findings_create","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","tags":["findings"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindingCreateRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/FindingCreateRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/FindingCreateRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindingCreate"}}},"description":""}}}},"/api/v2/findings/{id}/":{"get":{"operationId":"findings_retrieve","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this finding.","required":true},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["auth_issues","author_issues","config_issues","crypto_issues","data_issues","defect_review_requested_by","duplicate_finding","endpoint_set","endpoints","files","finding_group_set","found_by","last_reviewed_by","mitigated_by","notes","other_issues","reporter","review_requested_by","reviewers","risk_acceptance_set","sensitive_issues","session_issues","sonarqube_issue","test"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"related_fields","schema":{"type":"boolean"},"description":"Expand finding external relations (engagement, environment, product, product_type, test, test_type)"},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"}],"tags":["findings"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Findings"}}},"description":""}}},"put":{"operationId":"findings_update","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this finding.","required":true}],"tags":["findings"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindingsRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/FindingsRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/FindingsRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Findings"}}},"description":""}}},"patch":{"operationId":"findings_partial_update","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this finding.","required":true}],"tags":["findings"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedFindingsRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedFindingsRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedFindingsRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Findings"}}},"description":""}}},"delete":{"operationId":"findings_destroy","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this finding.","required":true}],"tags":["findings"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/findings/{id}/close/":{"post":{"operationId":"findings_close_create","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this finding.","required":true}],"tags":["findings"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindingCloseRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/FindingCloseRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/FindingCloseRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindingClose"}}},"description":""}}}},"/api/v2/findings/{id}/delete_preview/":{"get":{"operationId":"findings_delete_preview_list","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this finding.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["findings"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/findings/{id}/duplicate/":{"get":{"operationId":"findings_duplicate_list","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this finding.","required":true}],"tags":["findings"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Finding"}}}},"description":""}}}},"/api/v2/findings/{id}/duplicate/reset/":{"post":{"operationId":"findings_duplicate_reset_create","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this finding.","required":true}],"tags":["findings"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/findings/{id}/files/":{"get":{"operationId":"findings_files_retrieve","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this finding.","required":true}],"tags":["findings"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindingToFiles"}}},"description":""}}},"post":{"operationId":"findings_files_create","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this finding.","required":true}],"tags":["findings"],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/AddNewFileOptionRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/File"}}},"description":""}}}},"/api/v2/findings/{id}/files/{file_id}/":{"delete":{"operationId":"findings_files_destroy","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"file_id","schema":{"type":"string","pattern":"^\\d+$"},"required":true},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this finding.","required":true}],"tags":["findings"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/findings/{id}/files/change_name/{file_id}/":{"patch":{"operationId":"findings_files_change_name_partial_update","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"file_id","schema":{"type":"string","pattern":"^\\d+$"},"required":true},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this finding.","required":true}],"tags":["findings"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedFileNameRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedFileNameRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedFileNameRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"description":"No response body"}}}},"/api/v2/findings/{id}/files/download/{file_id}/":{"get":{"operationId":"findings_files_download_retrieve","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"file_id","schema":{"type":"string","pattern":"^\\d+$"},"required":true},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this finding.","required":true}],"tags":["findings"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RawFile"}}},"description":""}}}},"/api/v2/findings/{id}/history/":{"get":{"operationId":"findings_history_list","description":"Get audit log entries for an object with pagination.\n\nUses DojoEvents.objects.tracks(obj) to get events for the object itself,\nand DojoEvents.objects.references(obj) to get events for related objects\n(objects with foreign keys pointing to this object). Supports pagination, filtering, and sorting.\nAvailable at both /api/v2/ and /api/vue/ endpoints.\n\nArgs:\n    field_filter: Optional field name to filter by (e.g., \"finding_enrichment_settings\").\n                Only entries with changes to this field will be returned.","parameters":[{"in":"query","name":"active","schema":{"type":"boolean"}},{"in":"query","name":"component_name","schema":{"type":"string"}},{"in":"query","name":"component_version","schema":{"type":"string"}},{"in":"query","name":"created","schema":{"type":"string","format":"date-time","nullable":true,"enum":[1,2,3,4,5,6,7,null]},"description":"Time that the object was initially created, and saved to the database\n\n* `None` - Any date\n* `1` - Today\n* `2` - Past 7 days\n* `3` - Past 30 days\n* `4` - Past 90 days\n* `5` - Current month\n* `6` - Current year\n* `7` - Past year"},{"in":"query","name":"cvssv3","schema":{"type":"string"}},{"in":"query","name":"cvssv3_score","schema":{"type":"number","format":"float"}},{"in":"query","name":"cvssv4","schema":{"type":"string"}},{"in":"query","name":"cvssv4_score","schema":{"type":"number","format":"float"}},{"in":"query","name":"cwe","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"date","schema":{"type":"string","format":"date","enum":[1,2,3,4,5,6,7,null]},"description":"The date the flaw was discovered.\n\n* `None` - Any date\n* `1` - Today\n* `2` - Past 7 days\n* `3` - Past 30 days\n* `4` - Past 90 days\n* `5` - Current month\n* `6` - Current year\n* `7` - Past year"},{"in":"query","name":"defect_review_requested_by","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"description","schema":{"type":"string"}},{"in":"query","name":"discovered_after","schema":{"type":"string","format":"date"}},{"in":"query","name":"discovered_before","schema":{"type":"string","format":"date"}},{"in":"query","name":"discovered_on","schema":{"type":"string","format":"date"}},{"in":"query","name":"duplicate","schema":{"type":"boolean"}},{"in":"query","name":"duplicate_finding","schema":{"type":"integer"}},{"in":"query","name":"dynamic_finding","schema":{"type":"boolean"}},{"in":"query","name":"effort_for_fixing","schema":{"type":"string"}},{"in":"query","name":"endpoints","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"epss_percentile_max","schema":{"type":"number","format":"double","maximum":1.0,"minimum":0.0,"nullable":true},"description":"The range of EPSS percentiles to filter on; the min input is a lower bound, the max is an upper bound. Leaving one empty will skip that bound (e.g., leaving the min bound input empty will filter only on the max bound -- filtering on \"less than or equal\"). Leading 0 required."},{"in":"query","name":"epss_percentile_min","schema":{"type":"number","format":"double","maximum":1.0,"minimum":0.0,"nullable":true},"description":"The range of EPSS percentiles to filter on; the min input is a lower bound, the max is an upper bound. Leaving one empty will skip that bound (e.g., leaving the min bound input empty will filter only on the max bound -- filtering on \"less than or equal\"). Leading 0 required."},{"in":"query","name":"epss_score_max","schema":{"type":"number","format":"double","maximum":1.0,"minimum":0.0,"nullable":true},"description":"The range of EPSS score percentages to filter on; the min input is a lower bound, the max is an upper bound. Leaving one empty will skip that bound (e.g., leaving the min bound input empty will filter only on the max bound -- filtering on \"less than or equal\"). Leading 0 required."},{"in":"query","name":"epss_score_min","schema":{"type":"number","format":"double","maximum":1.0,"minimum":0.0,"nullable":true},"description":"The range of EPSS score percentages to filter on; the min input is a lower bound, the max is an upper bound. Leaving one empty will skip that bound (e.g., leaving the min bound input empty will filter only on the max bound -- filtering on \"less than or equal\"). Leading 0 required."},{"in":"query","name":"exact_title","schema":{"type":"string"},"description":"Finding title exact match (case-insensitive)"},{"in":"query","name":"false_p","schema":{"type":"boolean"}},{"in":"query","name":"file_path","schema":{"type":"string"}},{"in":"query","name":"finding_group","schema":{"type":"array","items":{"type":"number"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"fix_available","schema":{"type":"boolean"}},{"in":"query","name":"fix_version","schema":{"type":"string"}},{"in":"query","name":"found_by","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"has_jira","schema":{"type":"boolean"}},{"in":"query","name":"has_tags","schema":{"type":"boolean"},"description":"Has tags"},{"in":"query","name":"hash_code","schema":{"type":"string"}},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this finding.","required":true},{"in":"query","name":"id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"impact","schema":{"type":"string"}},{"in":"query","name":"inherited_tags","schema":{"type":"array","items":{"type":"array","items":{"type":"integer"}}},"description":"Internal use tags sepcifically for maintaining parity with product. This field will be present as a subset in the tags field","explode":true,"style":"form"},{"in":"query","name":"is_mitigated","schema":{"type":"boolean"}},{"in":"query","name":"jira_change","schema":{"type":"string","format":"date-time","nullable":true,"title":"Jira last update","enum":[1,2,3,4,5,6,7,null]},"description":"The date the linked Jira issue was last modified.\n\n* `None` - Any date\n* `1` - Today\n* `2` - Past 7 days\n* `3` - Past 30 days\n* `4` - Past 90 days\n* `5` - Current month\n* `6` - Current year\n* `7` - Past year"},{"in":"query","name":"jira_creation","schema":{"type":"string","format":"date-time","nullable":true,"enum":[1,2,3,4,5,6,7,null]},"description":"The date a Jira issue was created from this finding.\n\n* `None` - Any date\n* `1` - Today\n* `2` - Past 7 days\n* `3` - Past 30 days\n* `4` - Past 90 days\n* `5` - Current month\n* `6` - Current year\n* `7` - Past year"},{"in":"query","name":"kev_date","schema":{"type":"string","format":"date"}},{"in":"query","name":"known_exploited","schema":{"type":"boolean"}},{"in":"query","name":"last_reviewed","schema":{"type":"string","format":"date-time","nullable":true,"enum":[1,2,3,4,5,6,7,null]},"description":"Provides the date the flaw was last 'touched' by a tester.\n\n* `None` - Any date\n* `1` - Today\n* `2` - Past 7 days\n* `3` - Past 30 days\n* `4` - Past 90 days\n* `5` - Current month\n* `6` - Current year\n* `7` - Past year"},{"in":"query","name":"last_reviewed_by","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"last_status_update","schema":{"type":"string","format":"date-time"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"mitigated","schema":{"type":"string","format":"date-time","nullable":true,"enum":[1,2,3,4,5,6,7,null]},"description":"Denotes if this flaw has been fixed by storing the date it was fixed.\n\n* `None` - Any date\n* `1` - Today\n* `2` - Past 7 days\n* `3` - Past 30 days\n* `4` - Past 90 days\n* `5` - Current month\n* `6` - Current year\n* `7` - Past year"},{"in":"query","name":"mitigated_after","schema":{"type":"string","format":"date-time"},"description":"Mitigated After"},{"in":"query","name":"mitigated_before","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"mitigated_by","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"mitigated_on","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"mitigation","schema":{"type":"string"}},{"in":"query","name":"mitigation_available","schema":{"type":"boolean"},"description":"Mitigation Available"},{"in":"query","name":"mitigation_policy","schema":{"type":"array","items":{"type":"number"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"nb_occurences","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"not_tag","schema":{"type":"string"},"description":"Not Tag name contains"},{"in":"query","name":"not_tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags not present on model","explode":false,"style":"form"},{"in":"query","name":"not_test__engagement__product__tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags not present on Asset","explode":false,"style":"form"},{"in":"query","name":"not_test__engagement__tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags not present on engagement","explode":false,"style":"form"},{"in":"query","name":"not_test__tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags present on test","explode":false,"style":"form"},{"in":"query","name":"numerical_severity","schema":{"type":"string"}},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-active","-component_name","-component_version","-created","-cwe","-date","-duplicate","-dynamic_finding","-false_p","-found_by","-id","-is_mitigated","-last_reviewed","-last_status_update","-numerical_severity","-out_of_scope","-planned_remediation_date","-reviewers","-severity","-sla_expiration_date","-static_finding","-test__engagement__product__name","-title","-under_defect_review","-under_review","-verified","active","component_name","component_version","created","cwe","date","duplicate","dynamic_finding","false_p","found_by","id","is_mitigated","last_reviewed","last_status_update","numerical_severity","out_of_scope","planned_remediation_date","reviewers","severity","sla_expiration_date","static_finding","test__engagement__product__name","title","under_defect_review","under_review","verified"]}},"description":"Ordering\n\n* `active` - Active\n* `-active` - Active (descending)\n* `component_name` - Component name\n* `-component_name` - Component name (descending)\n* `component_version` - Component version\n* `-component_version` - Component version (descending)\n* `created` - Created\n* `-created` - Created (descending)\n* `last_status_update` - Last status update\n* `-last_status_update` - Last status update (descending)\n* `last_reviewed` - Last reviewed\n* `-last_reviewed` - Last reviewed (descending)\n* `cwe` - Cwe\n* `-cwe` - Cwe (descending)\n* `date` - Date\n* `-date` - Date (descending)\n* `duplicate` - Duplicate\n* `-duplicate` - Duplicate (descending)\n* `dynamic_finding` - Dynamic finding\n* `-dynamic_finding` - Dynamic finding (descending)\n* `false_p` - False p\n* `-false_p` - False p (descending)\n* `found_by` - Found by\n* `-found_by` - Found by (descending)\n* `id` - Id\n* `-id` - Id (descending)\n* `is_mitigated` - Is mitigated\n* `-is_mitigated` - Is mitigated (descending)\n* `numerical_severity` - Numerical severity\n* `-numerical_severity` - Numerical severity (descending)\n* `out_of_scope` - Out of scope\n* `-out_of_scope` - Out of scope (descending)\n* `planned_remediation_date` - Planned remediation date\n* `-planned_remediation_date` - Planned remediation date (descending)\n* `severity` - Severity\n* `-severity` - Severity (descending)\n* `sla_expiration_date` - Sla expiration date\n* `-sla_expiration_date` - Sla expiration date (descending)\n* `reviewers` - Reviewers\n* `-reviewers` - Reviewers (descending)\n* `static_finding` - Static finding\n* `-static_finding` - Static finding (descending)\n* `test__engagement__product__name` - Test  engagement  product  name\n* `-test__engagement__product__name` - Test  engagement  product  name (descending)\n* `title` - Title\n* `-title` - Title (descending)\n* `under_defect_review` - Under defect review\n* `-under_defect_review` - Under defect review (descending)\n* `under_review` - Under review\n* `-under_review` - Under review (descending)\n* `verified` - Verified\n* `-verified` - Verified (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"out_of_scope","schema":{"type":"boolean"}},{"in":"query","name":"outside_of_sla","schema":{"type":"number"}},{"in":"query","name":"owners","schema":{"type":"array","items":{"type":"string"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"owners_email","schema":{"type":"string"},"description":"owners_email"},{"in":"query","name":"owners_email_contains","schema":{"type":"string"},"description":"owners_email_contains"},{"in":"query","name":"param","schema":{"type":"string"}},{"in":"query","name":"payload","schema":{"type":"string"}},{"in":"query","name":"planned_remediation_date","schema":{"type":"string","format":"date"}},{"in":"query","name":"planned_remediation_version","schema":{"type":"string"}},{"in":"query","name":"priority_max","schema":{"type":"number"},"description":"Return findings with a priority value less than the supplied value"},{"in":"query","name":"priority_min","schema":{"type":"number"},"description":"Return findings with a priority value greater than the supplied value"},{"in":"query","name":"product_lifecycle","schema":{"type":"string"},"description":"Comma separated list of exact Asset lifecycles"},{"in":"query","name":"product_name","schema":{"type":"string"},"description":"Exact Asset Name"},{"in":"query","name":"product_name_contains","schema":{"type":"string"},"description":"Asset Name Contains"},{"in":"query","name":"publish_date","schema":{"type":"string","format":"date"}},{"in":"query","name":"ransomware_used","schema":{"type":"boolean"}},{"in":"query","name":"references","schema":{"type":"string"}},{"in":"query","name":"reporter","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"review_requested_by","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"reviewers","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"risk","schema":{"type":"string","enum":["Low","Medium","Needs Action","Urgent"]},"description":"The risk score in which a finding poses to the system it was discovered on\n\n* `Low` - Low\n* `Medium` - Medium\n* `Needs Action` - Needs Action\n* `Urgent` - Urgent"},{"in":"query","name":"risk_acceptance","schema":{"type":"number"}},{"in":"query","name":"risk_accepted","schema":{"type":"boolean"}},{"in":"query","name":"sast_sink_object","schema":{"type":"string"}},{"in":"query","name":"sast_source_file_path","schema":{"type":"string"}},{"in":"query","name":"sast_source_line","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"sast_source_object","schema":{"type":"string"}},{"in":"query","name":"scanner_confidence","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"service","schema":{"type":"string"}},{"in":"query","name":"severity","schema":{"type":"string"}},{"in":"query","name":"severity_justification","schema":{"type":"string"}},{"in":"query","name":"sla_expiration_date","schema":{"type":"string","format":"date"}},{"in":"query","name":"sla_start_date","schema":{"type":"string","format":"date"}},{"in":"query","name":"sonarqube_issue","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"static_finding","schema":{"type":"boolean"}},{"in":"query","name":"steps_to_reproduce","schema":{"type":"string"}},{"in":"query","name":"tag","schema":{"type":"string"},"description":"Tag name contains"},{"in":"query","name":"tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags (uses OR for multiple values)","explode":false,"style":"form"},{"in":"query","name":"tags__and","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags to match with an AND expression","explode":false,"style":"form"},{"in":"query","name":"test","schema":{"type":"integer"}},{"in":"query","name":"test__engagement","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"test__engagement__product","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"test__engagement__product__prod_type","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"test__engagement__product__tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags present on Asset (uses OR for multiple values)","explode":false,"style":"form"},{"in":"query","name":"test__engagement__product__tags__and","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags to match with an AND expression present on Asset","explode":false,"style":"form"},{"in":"query","name":"test__engagement__tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags present on engagement (uses OR for multiple values)","explode":false,"style":"form"},{"in":"query","name":"test__engagement__tags__and","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags to match with an AND expression present on engagement","explode":false,"style":"form"},{"in":"query","name":"test__tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags present on test (uses OR for multiple values)","explode":false,"style":"form"},{"in":"query","name":"test__tags__and","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags to match with an AND expression present on test","explode":false,"style":"form"},{"in":"query","name":"test__test_type","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"title","schema":{"type":"string"}},{"in":"query","name":"under_defect_review","schema":{"type":"boolean"}},{"in":"query","name":"under_review","schema":{"type":"boolean"}},{"in":"query","name":"unique_id_from_tool","schema":{"type":"string"}},{"in":"query","name":"updated","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"verified","schema":{"type":"boolean"}},{"in":"query","name":"vuln_id_from_tool","schema":{"type":"string"}},{"in":"query","name":"vulnerability_id","schema":{"type":"string"}}],"tags":["findings"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedAuditLogList"}}},"description":""}}}},"/api/v2/findings/{id}/history/legacy/":{"get":{"operationId":"findings_history_legacy_list","description":"Get legacy audit log for an object (django-auditlog entries) with pagination.\n\nSupports pagination, filtering, and sorting.\nAvailable at both /api/v2/ and /api/vue/ endpoints.","parameters":[{"in":"query","name":"active","schema":{"type":"boolean"}},{"in":"query","name":"component_name","schema":{"type":"string"}},{"in":"query","name":"component_version","schema":{"type":"string"}},{"in":"query","name":"created","schema":{"type":"string","format":"date-time","nullable":true,"enum":[1,2,3,4,5,6,7,null]},"description":"Time that the object was initially created, and saved to the database\n\n* `None` - Any date\n* `1` - Today\n* `2` - Past 7 days\n* `3` - Past 30 days\n* `4` - Past 90 days\n* `5` - Current month\n* `6` - Current year\n* `7` - Past year"},{"in":"query","name":"cvssv3","schema":{"type":"string"}},{"in":"query","name":"cvssv3_score","schema":{"type":"number","format":"float"}},{"in":"query","name":"cvssv4","schema":{"type":"string"}},{"in":"query","name":"cvssv4_score","schema":{"type":"number","format":"float"}},{"in":"query","name":"cwe","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"date","schema":{"type":"string","format":"date","enum":[1,2,3,4,5,6,7,null]},"description":"The date the flaw was discovered.\n\n* `None` - Any date\n* `1` - Today\n* `2` - Past 7 days\n* `3` - Past 30 days\n* `4` - Past 90 days\n* `5` - Current month\n* `6` - Current year\n* `7` - Past year"},{"in":"query","name":"defect_review_requested_by","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"description","schema":{"type":"string"}},{"in":"query","name":"discovered_after","schema":{"type":"string","format":"date"}},{"in":"query","name":"discovered_before","schema":{"type":"string","format":"date"}},{"in":"query","name":"discovered_on","schema":{"type":"string","format":"date"}},{"in":"query","name":"duplicate","schema":{"type":"boolean"}},{"in":"query","name":"duplicate_finding","schema":{"type":"integer"}},{"in":"query","name":"dynamic_finding","schema":{"type":"boolean"}},{"in":"query","name":"effort_for_fixing","schema":{"type":"string"}},{"in":"query","name":"endpoints","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"epss_percentile_max","schema":{"type":"number","format":"double","maximum":1.0,"minimum":0.0,"nullable":true},"description":"The range of EPSS percentiles to filter on; the min input is a lower bound, the max is an upper bound. Leaving one empty will skip that bound (e.g., leaving the min bound input empty will filter only on the max bound -- filtering on \"less than or equal\"). Leading 0 required."},{"in":"query","name":"epss_percentile_min","schema":{"type":"number","format":"double","maximum":1.0,"minimum":0.0,"nullable":true},"description":"The range of EPSS percentiles to filter on; the min input is a lower bound, the max is an upper bound. Leaving one empty will skip that bound (e.g., leaving the min bound input empty will filter only on the max bound -- filtering on \"less than or equal\"). Leading 0 required."},{"in":"query","name":"epss_score_max","schema":{"type":"number","format":"double","maximum":1.0,"minimum":0.0,"nullable":true},"description":"The range of EPSS score percentages to filter on; the min input is a lower bound, the max is an upper bound. Leaving one empty will skip that bound (e.g., leaving the min bound input empty will filter only on the max bound -- filtering on \"less than or equal\"). Leading 0 required."},{"in":"query","name":"epss_score_min","schema":{"type":"number","format":"double","maximum":1.0,"minimum":0.0,"nullable":true},"description":"The range of EPSS score percentages to filter on; the min input is a lower bound, the max is an upper bound. Leaving one empty will skip that bound (e.g., leaving the min bound input empty will filter only on the max bound -- filtering on \"less than or equal\"). Leading 0 required."},{"in":"query","name":"exact_title","schema":{"type":"string"},"description":"Finding title exact match (case-insensitive)"},{"in":"query","name":"false_p","schema":{"type":"boolean"}},{"in":"query","name":"file_path","schema":{"type":"string"}},{"in":"query","name":"finding_group","schema":{"type":"array","items":{"type":"number"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"fix_available","schema":{"type":"boolean"}},{"in":"query","name":"fix_version","schema":{"type":"string"}},{"in":"query","name":"found_by","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"has_jira","schema":{"type":"boolean"}},{"in":"query","name":"has_tags","schema":{"type":"boolean"},"description":"Has tags"},{"in":"query","name":"hash_code","schema":{"type":"string"}},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this finding.","required":true},{"in":"query","name":"id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"impact","schema":{"type":"string"}},{"in":"query","name":"inherited_tags","schema":{"type":"array","items":{"type":"array","items":{"type":"integer"}}},"description":"Internal use tags sepcifically for maintaining parity with product. This field will be present as a subset in the tags field","explode":true,"style":"form"},{"in":"query","name":"is_mitigated","schema":{"type":"boolean"}},{"in":"query","name":"jira_change","schema":{"type":"string","format":"date-time","nullable":true,"title":"Jira last update","enum":[1,2,3,4,5,6,7,null]},"description":"The date the linked Jira issue was last modified.\n\n* `None` - Any date\n* `1` - Today\n* `2` - Past 7 days\n* `3` - Past 30 days\n* `4` - Past 90 days\n* `5` - Current month\n* `6` - Current year\n* `7` - Past year"},{"in":"query","name":"jira_creation","schema":{"type":"string","format":"date-time","nullable":true,"enum":[1,2,3,4,5,6,7,null]},"description":"The date a Jira issue was created from this finding.\n\n* `None` - Any date\n* `1` - Today\n* `2` - Past 7 days\n* `3` - Past 30 days\n* `4` - Past 90 days\n* `5` - Current month\n* `6` - Current year\n* `7` - Past year"},{"in":"query","name":"kev_date","schema":{"type":"string","format":"date"}},{"in":"query","name":"known_exploited","schema":{"type":"boolean"}},{"in":"query","name":"last_reviewed","schema":{"type":"string","format":"date-time","nullable":true,"enum":[1,2,3,4,5,6,7,null]},"description":"Provides the date the flaw was last 'touched' by a tester.\n\n* `None` - Any date\n* `1` - Today\n* `2` - Past 7 days\n* `3` - Past 30 days\n* `4` - Past 90 days\n* `5` - Current month\n* `6` - Current year\n* `7` - Past year"},{"in":"query","name":"last_reviewed_by","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"last_status_update","schema":{"type":"string","format":"date-time"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"mitigated","schema":{"type":"string","format":"date-time","nullable":true,"enum":[1,2,3,4,5,6,7,null]},"description":"Denotes if this flaw has been fixed by storing the date it was fixed.\n\n* `None` - Any date\n* `1` - Today\n* `2` - Past 7 days\n* `3` - Past 30 days\n* `4` - Past 90 days\n* `5` - Current month\n* `6` - Current year\n* `7` - Past year"},{"in":"query","name":"mitigated_after","schema":{"type":"string","format":"date-time"},"description":"Mitigated After"},{"in":"query","name":"mitigated_before","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"mitigated_by","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"mitigated_on","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"mitigation","schema":{"type":"string"}},{"in":"query","name":"mitigation_available","schema":{"type":"boolean"},"description":"Mitigation Available"},{"in":"query","name":"mitigation_policy","schema":{"type":"array","items":{"type":"number"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"nb_occurences","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"not_tag","schema":{"type":"string"},"description":"Not Tag name contains"},{"in":"query","name":"not_tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags not present on model","explode":false,"style":"form"},{"in":"query","name":"not_test__engagement__product__tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags not present on Asset","explode":false,"style":"form"},{"in":"query","name":"not_test__engagement__tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags not present on engagement","explode":false,"style":"form"},{"in":"query","name":"not_test__tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags present on test","explode":false,"style":"form"},{"in":"query","name":"numerical_severity","schema":{"type":"string"}},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-active","-component_name","-component_version","-created","-cwe","-date","-duplicate","-dynamic_finding","-false_p","-found_by","-id","-is_mitigated","-last_reviewed","-last_status_update","-numerical_severity","-out_of_scope","-planned_remediation_date","-reviewers","-severity","-sla_expiration_date","-static_finding","-test__engagement__product__name","-title","-under_defect_review","-under_review","-verified","active","component_name","component_version","created","cwe","date","duplicate","dynamic_finding","false_p","found_by","id","is_mitigated","last_reviewed","last_status_update","numerical_severity","out_of_scope","planned_remediation_date","reviewers","severity","sla_expiration_date","static_finding","test__engagement__product__name","title","under_defect_review","under_review","verified"]}},"description":"Ordering\n\n* `active` - Active\n* `-active` - Active (descending)\n* `component_name` - Component name\n* `-component_name` - Component name (descending)\n* `component_version` - Component version\n* `-component_version` - Component version (descending)\n* `created` - Created\n* `-created` - Created (descending)\n* `last_status_update` - Last status update\n* `-last_status_update` - Last status update (descending)\n* `last_reviewed` - Last reviewed\n* `-last_reviewed` - Last reviewed (descending)\n* `cwe` - Cwe\n* `-cwe` - Cwe (descending)\n* `date` - Date\n* `-date` - Date (descending)\n* `duplicate` - Duplicate\n* `-duplicate` - Duplicate (descending)\n* `dynamic_finding` - Dynamic finding\n* `-dynamic_finding` - Dynamic finding (descending)\n* `false_p` - False p\n* `-false_p` - False p (descending)\n* `found_by` - Found by\n* `-found_by` - Found by (descending)\n* `id` - Id\n* `-id` - Id (descending)\n* `is_mitigated` - Is mitigated\n* `-is_mitigated` - Is mitigated (descending)\n* `numerical_severity` - Numerical severity\n* `-numerical_severity` - Numerical severity (descending)\n* `out_of_scope` - Out of scope\n* `-out_of_scope` - Out of scope (descending)\n* `planned_remediation_date` - Planned remediation date\n* `-planned_remediation_date` - Planned remediation date (descending)\n* `severity` - Severity\n* `-severity` - Severity (descending)\n* `sla_expiration_date` - Sla expiration date\n* `-sla_expiration_date` - Sla expiration date (descending)\n* `reviewers` - Reviewers\n* `-reviewers` - Reviewers (descending)\n* `static_finding` - Static finding\n* `-static_finding` - Static finding (descending)\n* `test__engagement__product__name` - Test  engagement  product  name\n* `-test__engagement__product__name` - Test  engagement  product  name (descending)\n* `title` - Title\n* `-title` - Title (descending)\n* `under_defect_review` - Under defect review\n* `-under_defect_review` - Under defect review (descending)\n* `under_review` - Under review\n* `-under_review` - Under review (descending)\n* `verified` - Verified\n* `-verified` - Verified (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"out_of_scope","schema":{"type":"boolean"}},{"in":"query","name":"outside_of_sla","schema":{"type":"number"}},{"in":"query","name":"owners","schema":{"type":"array","items":{"type":"string"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"owners_email","schema":{"type":"string"},"description":"owners_email"},{"in":"query","name":"owners_email_contains","schema":{"type":"string"},"description":"owners_email_contains"},{"in":"query","name":"param","schema":{"type":"string"}},{"in":"query","name":"payload","schema":{"type":"string"}},{"in":"query","name":"planned_remediation_date","schema":{"type":"string","format":"date"}},{"in":"query","name":"planned_remediation_version","schema":{"type":"string"}},{"in":"query","name":"priority_max","schema":{"type":"number"},"description":"Return findings with a priority value less than the supplied value"},{"in":"query","name":"priority_min","schema":{"type":"number"},"description":"Return findings with a priority value greater than the supplied value"},{"in":"query","name":"product_lifecycle","schema":{"type":"string"},"description":"Comma separated list of exact Asset lifecycles"},{"in":"query","name":"product_name","schema":{"type":"string"},"description":"Exact Asset Name"},{"in":"query","name":"product_name_contains","schema":{"type":"string"},"description":"Asset Name Contains"},{"in":"query","name":"publish_date","schema":{"type":"string","format":"date"}},{"in":"query","name":"ransomware_used","schema":{"type":"boolean"}},{"in":"query","name":"references","schema":{"type":"string"}},{"in":"query","name":"reporter","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"review_requested_by","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"reviewers","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"risk","schema":{"type":"string","enum":["Low","Medium","Needs Action","Urgent"]},"description":"The risk score in which a finding poses to the system it was discovered on\n\n* `Low` - Low\n* `Medium` - Medium\n* `Needs Action` - Needs Action\n* `Urgent` - Urgent"},{"in":"query","name":"risk_acceptance","schema":{"type":"number"}},{"in":"query","name":"risk_accepted","schema":{"type":"boolean"}},{"in":"query","name":"sast_sink_object","schema":{"type":"string"}},{"in":"query","name":"sast_source_file_path","schema":{"type":"string"}},{"in":"query","name":"sast_source_line","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"sast_source_object","schema":{"type":"string"}},{"in":"query","name":"scanner_confidence","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"service","schema":{"type":"string"}},{"in":"query","name":"severity","schema":{"type":"string"}},{"in":"query","name":"severity_justification","schema":{"type":"string"}},{"in":"query","name":"sla_expiration_date","schema":{"type":"string","format":"date"}},{"in":"query","name":"sla_start_date","schema":{"type":"string","format":"date"}},{"in":"query","name":"sonarqube_issue","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"static_finding","schema":{"type":"boolean"}},{"in":"query","name":"steps_to_reproduce","schema":{"type":"string"}},{"in":"query","name":"tag","schema":{"type":"string"},"description":"Tag name contains"},{"in":"query","name":"tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags (uses OR for multiple values)","explode":false,"style":"form"},{"in":"query","name":"tags__and","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags to match with an AND expression","explode":false,"style":"form"},{"in":"query","name":"test","schema":{"type":"integer"}},{"in":"query","name":"test__engagement","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"test__engagement__product","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"test__engagement__product__prod_type","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"test__engagement__product__tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags present on Asset (uses OR for multiple values)","explode":false,"style":"form"},{"in":"query","name":"test__engagement__product__tags__and","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags to match with an AND expression present on Asset","explode":false,"style":"form"},{"in":"query","name":"test__engagement__tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags present on engagement (uses OR for multiple values)","explode":false,"style":"form"},{"in":"query","name":"test__engagement__tags__and","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags to match with an AND expression present on engagement","explode":false,"style":"form"},{"in":"query","name":"test__tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags present on test (uses OR for multiple values)","explode":false,"style":"form"},{"in":"query","name":"test__tags__and","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags to match with an AND expression present on test","explode":false,"style":"form"},{"in":"query","name":"test__test_type","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"title","schema":{"type":"string"}},{"in":"query","name":"under_defect_review","schema":{"type":"boolean"}},{"in":"query","name":"under_review","schema":{"type":"boolean"}},{"in":"query","name":"unique_id_from_tool","schema":{"type":"string"}},{"in":"query","name":"updated","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"verified","schema":{"type":"boolean"}},{"in":"query","name":"vuln_id_from_tool","schema":{"type":"string"}},{"in":"query","name":"vulnerability_id","schema":{"type":"string"}}],"tags":["findings"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedLegacyAuditLogList"}}},"description":""}}}},"/api/v2/findings/{id}/history/legacy/count/":{"get":{"operationId":"findings_history_legacy_count_retrieve","description":"Get the total count of legacy audit log entries for an object.\n\nApplies the same filters as history_legacy (date filter, LegacyAuditLogFilter)\nto ensure the count matches what users will see when viewing the legacy history page.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this finding.","required":true}],"tags":["findings"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"integer"}}}}},"description":""}}}},"/api/v2/findings/{id}/metadata/":{"get":{"operationId":"findings_metadata_list","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this finding.","required":true}],"tags":["findings"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FindingMeta"}}}},"description":""},"404":{"description":"Returned if finding does not exist"}}},"post":{"operationId":"findings_metadata_create","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this finding.","required":true}],"tags":["findings"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindingMetaRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/FindingMetaRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/FindingMetaRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindingMeta"}}},"description":""},"404":{"description":"Returned if finding does not exist"},"400":{"description":"Returned if there was a problem with the metadata information"}}},"put":{"operationId":"findings_metadata_update","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this finding.","required":true}],"tags":["findings"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindingMetaRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/FindingMetaRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/FindingMetaRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindingMeta"}}},"description":""},"404":{"description":"Returned if finding does not exist"},"400":{"description":"Returned if there was a problem with the metadata information"}}},"delete":{"operationId":"findings_metadata_destroy","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this finding.","required":true},{"in":"query","name":"name","schema":{"type":"integer"},"description":"name of the metadata to retrieve. If name is empty, return all the                                     metadata associated with the finding","required":true}],"tags":["findings"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"description":"Returned if the metadata was correctly deleted"},"404":{"description":"Returned if finding does not exist"},"400":{"description":"Returned if there was a problem with the metadata information"}}}},"/api/v2/findings/{id}/notes/":{"get":{"operationId":"findings_notes_retrieve","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this finding.","required":true}],"tags":["findings"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindingToNotes"}}},"description":""}}},"post":{"operationId":"findings_notes_create","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this finding.","required":true}],"tags":["findings"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddNewNoteOptionRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/AddNewNoteOptionRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/AddNewNoteOptionRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Note"}}},"description":""}}}},"/api/v2/findings/{id}/original/{new_fid}/":{"post":{"operationId":"findings_original_create","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this finding.","required":true},{"in":"path","name":"new_fid","schema":{"type":"integer"},"required":true}],"tags":["findings"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/findings/{id}/remove_note/":{"patch":{"operationId":"findings_remove_note_partial_update","description":"Remove Note From Finding Note","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this finding.","required":true}],"tags":["findings"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedFindingNoteRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedFindingNoteRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedFindingNoteRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/findings/{id}/remove_tags/":{"put":{"operationId":"findings_remove_tags_update","description":"Remove Tag(s) from finding list of tags","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this finding.","required":true}],"tags":["findings"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/TagRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/TagRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}},"patch":{"operationId":"findings_remove_tags_partial_update","description":"Remove Tag(s) from finding list of tags","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this finding.","required":true}],"tags":["findings"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedTagRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedTagRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedTagRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/findings/{id}/request_response/":{"get":{"operationId":"findings_request_response_retrieve","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this finding.","required":true}],"tags":["findings"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BurpRawRequestResponse"}}},"description":""}}},"post":{"operationId":"findings_request_response_create","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this finding.","required":true}],"tags":["findings"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BurpRawRequestResponseRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/BurpRawRequestResponseRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/BurpRawRequestResponseRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BurpRawRequestResponse"}}},"description":""}}}},"/api/v2/findings/{id}/tags/":{"get":{"operationId":"findings_tags_retrieve","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this finding.","required":true}],"tags":["findings"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tag"}}},"description":""}}},"post":{"operationId":"findings_tags_create","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this finding.","required":true}],"tags":["findings"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/TagRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/TagRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tag"}}},"description":""}}}},"/api/v2/findings/{id}/verify/":{"post":{"operationId":"findings_verify_create","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this finding.","required":true}],"tags":["findings"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindingVerifyRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/FindingVerifyRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/FindingVerifyRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Finding"}}},"description":""}}}},"/api/v2/findings/accept_risks/":{"post":{"operationId":"findings_accept_risks_create","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"query","name":"active","schema":{"type":"boolean"}},{"in":"query","name":"component_name","schema":{"type":"string"}},{"in":"query","name":"component_version","schema":{"type":"string"}},{"in":"query","name":"created","schema":{"type":"string","format":"date-time","nullable":true,"enum":[1,2,3,4,5,6,7,null]},"description":"Time that the object was initially created, and saved to the database\n\n* `None` - Any date\n* `1` - Today\n* `2` - Past 7 days\n* `3` - Past 30 days\n* `4` - Past 90 days\n* `5` - Current month\n* `6` - Current year\n* `7` - Past year"},{"in":"query","name":"cvssv3","schema":{"type":"string"}},{"in":"query","name":"cvssv3_score","schema":{"type":"number","format":"float"}},{"in":"query","name":"cvssv4","schema":{"type":"string"}},{"in":"query","name":"cvssv4_score","schema":{"type":"number","format":"float"}},{"in":"query","name":"cwe","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"date","schema":{"type":"string","format":"date","enum":[1,2,3,4,5,6,7,null]},"description":"The date the flaw was discovered.\n\n* `None` - Any date\n* `1` - Today\n* `2` - Past 7 days\n* `3` - Past 30 days\n* `4` - Past 90 days\n* `5` - Current month\n* `6` - Current year\n* `7` - Past year"},{"in":"query","name":"defect_review_requested_by","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"description","schema":{"type":"string"}},{"in":"query","name":"discovered_after","schema":{"type":"string","format":"date"}},{"in":"query","name":"discovered_before","schema":{"type":"string","format":"date"}},{"in":"query","name":"discovered_on","schema":{"type":"string","format":"date"}},{"in":"query","name":"duplicate","schema":{"type":"boolean"}},{"in":"query","name":"duplicate_finding","schema":{"type":"integer"}},{"in":"query","name":"dynamic_finding","schema":{"type":"boolean"}},{"in":"query","name":"effort_for_fixing","schema":{"type":"string"}},{"in":"query","name":"endpoints","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"epss_percentile_max","schema":{"type":"number","format":"double","maximum":1.0,"minimum":0.0,"nullable":true},"description":"The range of EPSS percentiles to filter on; the min input is a lower bound, the max is an upper bound. Leaving one empty will skip that bound (e.g., leaving the min bound input empty will filter only on the max bound -- filtering on \"less than or equal\"). Leading 0 required."},{"in":"query","name":"epss_percentile_min","schema":{"type":"number","format":"double","maximum":1.0,"minimum":0.0,"nullable":true},"description":"The range of EPSS percentiles to filter on; the min input is a lower bound, the max is an upper bound. Leaving one empty will skip that bound (e.g., leaving the min bound input empty will filter only on the max bound -- filtering on \"less than or equal\"). Leading 0 required."},{"in":"query","name":"epss_score_max","schema":{"type":"number","format":"double","maximum":1.0,"minimum":0.0,"nullable":true},"description":"The range of EPSS score percentages to filter on; the min input is a lower bound, the max is an upper bound. Leaving one empty will skip that bound (e.g., leaving the min bound input empty will filter only on the max bound -- filtering on \"less than or equal\"). Leading 0 required."},{"in":"query","name":"epss_score_min","schema":{"type":"number","format":"double","maximum":1.0,"minimum":0.0,"nullable":true},"description":"The range of EPSS score percentages to filter on; the min input is a lower bound, the max is an upper bound. Leaving one empty will skip that bound (e.g., leaving the min bound input empty will filter only on the max bound -- filtering on \"less than or equal\"). Leading 0 required."},{"in":"query","name":"exact_title","schema":{"type":"string"},"description":"Finding title exact match (case-insensitive)"},{"in":"query","name":"false_p","schema":{"type":"boolean"}},{"in":"query","name":"file_path","schema":{"type":"string"}},{"in":"query","name":"finding_group","schema":{"type":"array","items":{"type":"number"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"fix_available","schema":{"type":"boolean"}},{"in":"query","name":"fix_version","schema":{"type":"string"}},{"in":"query","name":"found_by","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"has_jira","schema":{"type":"boolean"}},{"in":"query","name":"has_tags","schema":{"type":"boolean"},"description":"Has tags"},{"in":"query","name":"hash_code","schema":{"type":"string"}},{"in":"query","name":"id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"impact","schema":{"type":"string"}},{"in":"query","name":"inherited_tags","schema":{"type":"array","items":{"type":"array","items":{"type":"integer"}}},"description":"Internal use tags sepcifically for maintaining parity with product. This field will be present as a subset in the tags field","explode":true,"style":"form"},{"in":"query","name":"is_mitigated","schema":{"type":"boolean"}},{"in":"query","name":"jira_change","schema":{"type":"string","format":"date-time","nullable":true,"title":"Jira last update","enum":[1,2,3,4,5,6,7,null]},"description":"The date the linked Jira issue was last modified.\n\n* `None` - Any date\n* `1` - Today\n* `2` - Past 7 days\n* `3` - Past 30 days\n* `4` - Past 90 days\n* `5` - Current month\n* `6` - Current year\n* `7` - Past year"},{"in":"query","name":"jira_creation","schema":{"type":"string","format":"date-time","nullable":true,"enum":[1,2,3,4,5,6,7,null]},"description":"The date a Jira issue was created from this finding.\n\n* `None` - Any date\n* `1` - Today\n* `2` - Past 7 days\n* `3` - Past 30 days\n* `4` - Past 90 days\n* `5` - Current month\n* `6` - Current year\n* `7` - Past year"},{"in":"query","name":"kev_date","schema":{"type":"string","format":"date"}},{"in":"query","name":"known_exploited","schema":{"type":"boolean"}},{"in":"query","name":"last_reviewed","schema":{"type":"string","format":"date-time","nullable":true,"enum":[1,2,3,4,5,6,7,null]},"description":"Provides the date the flaw was last 'touched' by a tester.\n\n* `None` - Any date\n* `1` - Today\n* `2` - Past 7 days\n* `3` - Past 30 days\n* `4` - Past 90 days\n* `5` - Current month\n* `6` - Current year\n* `7` - Past year"},{"in":"query","name":"last_reviewed_by","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"last_status_update","schema":{"type":"string","format":"date-time"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"mitigated","schema":{"type":"string","format":"date-time","nullable":true,"enum":[1,2,3,4,5,6,7,null]},"description":"Denotes if this flaw has been fixed by storing the date it was fixed.\n\n* `None` - Any date\n* `1` - Today\n* `2` - Past 7 days\n* `3` - Past 30 days\n* `4` - Past 90 days\n* `5` - Current month\n* `6` - Current year\n* `7` - Past year"},{"in":"query","name":"mitigated_after","schema":{"type":"string","format":"date-time"},"description":"Mitigated After"},{"in":"query","name":"mitigated_before","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"mitigated_by","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"mitigated_on","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"mitigation","schema":{"type":"string"}},{"in":"query","name":"mitigation_available","schema":{"type":"boolean"},"description":"Mitigation Available"},{"in":"query","name":"mitigation_policy","schema":{"type":"array","items":{"type":"number"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"nb_occurences","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"not_tag","schema":{"type":"string"},"description":"Not Tag name contains"},{"in":"query","name":"not_tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags not present on model","explode":false,"style":"form"},{"in":"query","name":"not_test__engagement__product__tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags not present on Asset","explode":false,"style":"form"},{"in":"query","name":"not_test__engagement__tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags not present on engagement","explode":false,"style":"form"},{"in":"query","name":"not_test__tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags present on test","explode":false,"style":"form"},{"in":"query","name":"numerical_severity","schema":{"type":"string"}},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-active","-component_name","-component_version","-created","-cwe","-date","-duplicate","-dynamic_finding","-false_p","-found_by","-id","-is_mitigated","-last_reviewed","-last_status_update","-numerical_severity","-out_of_scope","-planned_remediation_date","-reviewers","-severity","-sla_expiration_date","-static_finding","-test__engagement__product__name","-title","-under_defect_review","-under_review","-verified","active","component_name","component_version","created","cwe","date","duplicate","dynamic_finding","false_p","found_by","id","is_mitigated","last_reviewed","last_status_update","numerical_severity","out_of_scope","planned_remediation_date","reviewers","severity","sla_expiration_date","static_finding","test__engagement__product__name","title","under_defect_review","under_review","verified"]}},"description":"Ordering\n\n* `active` - Active\n* `-active` - Active (descending)\n* `component_name` - Component name\n* `-component_name` - Component name (descending)\n* `component_version` - Component version\n* `-component_version` - Component version (descending)\n* `created` - Created\n* `-created` - Created (descending)\n* `last_status_update` - Last status update\n* `-last_status_update` - Last status update (descending)\n* `last_reviewed` - Last reviewed\n* `-last_reviewed` - Last reviewed (descending)\n* `cwe` - Cwe\n* `-cwe` - Cwe (descending)\n* `date` - Date\n* `-date` - Date (descending)\n* `duplicate` - Duplicate\n* `-duplicate` - Duplicate (descending)\n* `dynamic_finding` - Dynamic finding\n* `-dynamic_finding` - Dynamic finding (descending)\n* `false_p` - False p\n* `-false_p` - False p (descending)\n* `found_by` - Found by\n* `-found_by` - Found by (descending)\n* `id` - Id\n* `-id` - Id (descending)\n* `is_mitigated` - Is mitigated\n* `-is_mitigated` - Is mitigated (descending)\n* `numerical_severity` - Numerical severity\n* `-numerical_severity` - Numerical severity (descending)\n* `out_of_scope` - Out of scope\n* `-out_of_scope` - Out of scope (descending)\n* `planned_remediation_date` - Planned remediation date\n* `-planned_remediation_date` - Planned remediation date (descending)\n* `severity` - Severity\n* `-severity` - Severity (descending)\n* `sla_expiration_date` - Sla expiration date\n* `-sla_expiration_date` - Sla expiration date (descending)\n* `reviewers` - Reviewers\n* `-reviewers` - Reviewers (descending)\n* `static_finding` - Static finding\n* `-static_finding` - Static finding (descending)\n* `test__engagement__product__name` - Test  engagement  product  name\n* `-test__engagement__product__name` - Test  engagement  product  name (descending)\n* `title` - Title\n* `-title` - Title (descending)\n* `under_defect_review` - Under defect review\n* `-under_defect_review` - Under defect review (descending)\n* `under_review` - Under review\n* `-under_review` - Under review (descending)\n* `verified` - Verified\n* `-verified` - Verified (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"out_of_scope","schema":{"type":"boolean"}},{"in":"query","name":"outside_of_sla","schema":{"type":"number"}},{"in":"query","name":"owners","schema":{"type":"array","items":{"type":"string"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"owners_email","schema":{"type":"string"},"description":"owners_email"},{"in":"query","name":"owners_email_contains","schema":{"type":"string"},"description":"owners_email_contains"},{"in":"query","name":"param","schema":{"type":"string"}},{"in":"query","name":"payload","schema":{"type":"string"}},{"in":"query","name":"planned_remediation_date","schema":{"type":"string","format":"date"}},{"in":"query","name":"planned_remediation_version","schema":{"type":"string"}},{"in":"query","name":"priority_max","schema":{"type":"number"},"description":"Return findings with a priority value less than the supplied value"},{"in":"query","name":"priority_min","schema":{"type":"number"},"description":"Return findings with a priority value greater than the supplied value"},{"in":"query","name":"product_lifecycle","schema":{"type":"string"},"description":"Comma separated list of exact Asset lifecycles"},{"in":"query","name":"product_name","schema":{"type":"string"},"description":"Exact Asset Name"},{"in":"query","name":"product_name_contains","schema":{"type":"string"},"description":"Asset Name Contains"},{"in":"query","name":"publish_date","schema":{"type":"string","format":"date"}},{"in":"query","name":"ransomware_used","schema":{"type":"boolean"}},{"in":"query","name":"references","schema":{"type":"string"}},{"in":"query","name":"reporter","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"review_requested_by","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"reviewers","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"risk","schema":{"type":"string","enum":["Low","Medium","Needs Action","Urgent"]},"description":"The risk score in which a finding poses to the system it was discovered on\n\n* `Low` - Low\n* `Medium` - Medium\n* `Needs Action` - Needs Action\n* `Urgent` - Urgent"},{"in":"query","name":"risk_acceptance","schema":{"type":"number"}},{"in":"query","name":"risk_accepted","schema":{"type":"boolean"}},{"in":"query","name":"sast_sink_object","schema":{"type":"string"}},{"in":"query","name":"sast_source_file_path","schema":{"type":"string"}},{"in":"query","name":"sast_source_line","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"sast_source_object","schema":{"type":"string"}},{"in":"query","name":"scanner_confidence","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"service","schema":{"type":"string"}},{"in":"query","name":"severity","schema":{"type":"string"}},{"in":"query","name":"severity_justification","schema":{"type":"string"}},{"in":"query","name":"sla_expiration_date","schema":{"type":"string","format":"date"}},{"in":"query","name":"sla_start_date","schema":{"type":"string","format":"date"}},{"in":"query","name":"sonarqube_issue","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"static_finding","schema":{"type":"boolean"}},{"in":"query","name":"steps_to_reproduce","schema":{"type":"string"}},{"in":"query","name":"tag","schema":{"type":"string"},"description":"Tag name contains"},{"in":"query","name":"tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags (uses OR for multiple values)","explode":false,"style":"form"},{"in":"query","name":"tags__and","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags to match with an AND expression","explode":false,"style":"form"},{"in":"query","name":"test","schema":{"type":"integer"}},{"in":"query","name":"test__engagement","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"test__engagement__product","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"test__engagement__product__prod_type","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"test__engagement__product__tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags present on Asset (uses OR for multiple values)","explode":false,"style":"form"},{"in":"query","name":"test__engagement__product__tags__and","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags to match with an AND expression present on Asset","explode":false,"style":"form"},{"in":"query","name":"test__engagement__tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags present on engagement (uses OR for multiple values)","explode":false,"style":"form"},{"in":"query","name":"test__engagement__tags__and","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags to match with an AND expression present on engagement","explode":false,"style":"form"},{"in":"query","name":"test__tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags present on test (uses OR for multiple values)","explode":false,"style":"form"},{"in":"query","name":"test__tags__and","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags to match with an AND expression present on test","explode":false,"style":"form"},{"in":"query","name":"test__test_type","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"title","schema":{"type":"string"}},{"in":"query","name":"under_defect_review","schema":{"type":"boolean"}},{"in":"query","name":"under_review","schema":{"type":"boolean"}},{"in":"query","name":"unique_id_from_tool","schema":{"type":"string"}},{"in":"query","name":"updated","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"verified","schema":{"type":"boolean"}},{"in":"query","name":"vuln_id_from_tool","schema":{"type":"string"}},{"in":"query","name":"vulnerability_id","schema":{"type":"string"}}],"tags":["findings"],"requestBody":{"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AcceptedRiskRequest"}}},"application/x-www-form-urlencoded":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AcceptedRiskRequest"}}},"multipart/form-data":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AcceptedRiskRequest"}}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedRiskAcceptanceList"}}},"description":""}}}},"/api/v2/findings/generate_report/":{"post":{"operationId":"findings_generate_report_create","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","tags":["findings"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportGenerateOptionRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ReportGenerateOptionRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ReportGenerateOptionRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportGenerate"}}},"description":""}}}},"/api/v2/findings/merge/":{"post":{"operationId":"findings_merge_create","description":"Merge two or more findings that belong to the same product into a single destination finding. Selected data from the source findings (endpoints, descriptions, references, dynamic-scanner raw requests, vulnerability IDs and/or tags) is copied onto the destination finding, and the source findings are then either marked inactive or deleted depending on post_merge_action. Requires edit permission on every finding involved.","tags":["findings"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindingMergeRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/FindingMergeRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/FindingMergeRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindingMergeResponse"}}},"description":""}}}},"/api/v2/generated_reports/":{"get":{"operationId":"generated_reports_list","parameters":[{"in":"query","name":"completed_at","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"completed_at_after","schema":{"type":"string","format":"date"}},{"in":"query","name":"completed_at_before","schema":{"type":"string","format":"date"}},{"in":"query","name":"completed_at_during","schema":{"type":"string"}},{"in":"query","name":"completed_at_on","schema":{"type":"string"}},{"in":"query","name":"completed_at_past_days","schema":{"type":"number"}},{"in":"query","name":"created","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"created_after","schema":{"type":"string","format":"date"}},{"in":"query","name":"created_before","schema":{"type":"string","format":"date"}},{"in":"query","name":"created_during","schema":{"type":"string"}},{"in":"query","name":"created_on","schema":{"type":"string"}},{"in":"query","name":"created_past_days","schema":{"type":"number"}},{"in":"query","name":"error_message","schema":{"type":"string"}},{"in":"query","name":"exclude_id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"file_format","schema":{"type":"string"}},{"in":"query","name":"file_path","schema":{"type":"string"}},{"in":"query","name":"id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"id_equals","schema":{"type":"integer"}},{"in":"query","name":"id_greater_than","schema":{"type":"integer"}},{"in":"query","name":"id_greater_than_equal_to","schema":{"type":"integer"}},{"in":"query","name":"id_in","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"id_less_than","schema":{"type":"integer"}},{"in":"query","name":"id_less_than_equal_to","schema":{"type":"integer"}},{"in":"query","name":"id_not_equals","schema":{"type":"integer"}},{"in":"query","name":"id_not_in","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-completed_at","-created","-id","-requested_at","-requested_by","-template_description","-template_name","-updated","completed_at","created","id","requested_at","requested_by","template_description","template_name","updated"]}},"description":"Ordering\n\n* `id` - Id\n* `-id` - Id (descending)\n* `template_name` - Template name\n* `-template_name` - Template name (descending)\n* `template_description` - Template description\n* `-template_description` - Template description (descending)\n* `requested_at` - Requested at\n* `-requested_at` - Requested at (descending)\n* `completed_at` - Completed at\n* `-completed_at` - Completed at (descending)\n* `requested_by` - Requested by\n* `-requested_by` - Requested by (descending)\n* `created` - Created\n* `-created` - Created (descending)\n* `updated` - Updated\n* `-updated` - Updated (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"requested_at","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"requested_at_after","schema":{"type":"string","format":"date"}},{"in":"query","name":"requested_at_before","schema":{"type":"string","format":"date"}},{"in":"query","name":"requested_at_during","schema":{"type":"string"}},{"in":"query","name":"requested_at_on","schema":{"type":"string"}},{"in":"query","name":"requested_at_past_days","schema":{"type":"number"}},{"in":"query","name":"requested_by","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"search","schema":{"type":"string"},"description":"Search Across: template__name"},{"in":"query","name":"status","schema":{"type":"string"}},{"in":"query","name":"template","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"template_created_by","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"template_description_contains","schema":{"type":"string"}},{"in":"query","name":"template_description_ends_with","schema":{"type":"string"}},{"in":"query","name":"template_description_exact","schema":{"type":"string"}},{"in":"query","name":"template_description_not_contains","schema":{"type":"string"}},{"in":"query","name":"template_description_not_exact","schema":{"type":"string"}},{"in":"query","name":"template_description_not_regex","schema":{"type":"string"}},{"in":"query","name":"template_description_regex","schema":{"type":"string"}},{"in":"query","name":"template_description_starts_with","schema":{"type":"string"}},{"in":"query","name":"template_name_contains","schema":{"type":"string"}},{"in":"query","name":"template_name_ends_with","schema":{"type":"string"}},{"in":"query","name":"template_name_exact","schema":{"type":"string"}},{"in":"query","name":"template_name_not_contains","schema":{"type":"string"}},{"in":"query","name":"template_name_not_exact","schema":{"type":"string"}},{"in":"query","name":"template_name_not_regex","schema":{"type":"string"}},{"in":"query","name":"template_name_regex","schema":{"type":"string"}},{"in":"query","name":"template_name_starts_with","schema":{"type":"string"}},{"in":"query","name":"updated","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"updated_after","schema":{"type":"string","format":"date"}},{"in":"query","name":"updated_before","schema":{"type":"string","format":"date"}},{"in":"query","name":"updated_during","schema":{"type":"string"}},{"in":"query","name":"updated_on","schema":{"type":"string"}},{"in":"query","name":"updated_past_days","schema":{"type":"number"}}],"tags":["generated_reports"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedProGeneratedReportListList"}}},"description":""}}},"post":{"operationId":"generated_reports_create","tags":["generated_reports"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProGeneratedReportRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ProGeneratedReportRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ProGeneratedReportRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProGeneratedReport"}}},"description":""}}}},"/api/v2/generated_reports/{id}/":{"get":{"operationId":"generated_reports_retrieve","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Generated Report.","required":true}],"tags":["generated_reports"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProGeneratedReport"}}},"description":""}}},"delete":{"operationId":"generated_reports_destroy","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Generated Report.","required":true}],"tags":["generated_reports"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/generated_reports/{id}/download/":{"get":{"operationId":"generated_reports_download_retrieve","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Generated Report.","required":true}],"tags":["generated_reports"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProGeneratedReport"}}},"description":""}}}},"/api/v2/generated_reports/quick_report/":{"post":{"operationId":"generated_reports_quick_report_create","description":"Generate the built-in Findings Quick Report, scoped to the request's filters.\n\nBacked by the hidden system \"Quick Report Template\" (a detail/finding block);\nthe current findings filters are applied at render time via runtime_filters\nrather than being stored on the shared block.","tags":["generated_reports"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProGeneratedReportRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ProGeneratedReportRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ProGeneratedReportRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProGeneratedReport"}}},"description":""}}}},"/api/v2/global_roles/":{"get":{"operationId":"global_roles_list","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"query","name":"group","schema":{"type":"integer"}},{"in":"query","name":"id","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["user"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"},{"in":"query","name":"role","schema":{"type":"integer"}},{"in":"query","name":"user","schema":{"type":"integer"}}],"tags":["global_roles"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedGlobalRoleList"}}},"description":""}}},"post":{"operationId":"global_roles_create","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","tags":["global_roles"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GlobalRoleRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/GlobalRoleRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/GlobalRoleRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GlobalRole"}}},"description":""}}}},"/api/v2/global_roles/{id}/":{"get":{"operationId":"global_roles_retrieve","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this global_ role.","required":true},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["user"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"}],"tags":["global_roles"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GlobalRole"}}},"description":""}}},"put":{"operationId":"global_roles_update","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this global_ role.","required":true}],"tags":["global_roles"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GlobalRoleRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/GlobalRoleRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/GlobalRoleRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GlobalRole"}}},"description":""}}},"patch":{"operationId":"global_roles_partial_update","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this global_ role.","required":true}],"tags":["global_roles"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedGlobalRoleRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedGlobalRoleRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedGlobalRoleRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GlobalRole"}}},"description":""}}},"delete":{"operationId":"global_roles_destroy","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this global_ role.","required":true}],"tags":["global_roles"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/global_roles/{id}/delete_preview/":{"get":{"operationId":"global_roles_delete_preview_list","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this global_ role.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["global_roles"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/global_roles/{id}/history/":{"get":{"operationId":"global_roles_history_list","description":"Get audit log entries for an object with pagination.\n\nUses DojoEvents.objects.tracks(obj) to get events for the object itself,\nand DojoEvents.objects.references(obj) to get events for related objects\n(objects with foreign keys pointing to this object). Supports pagination, filtering, and sorting.\nAvailable at both /api/v2/ and /api/vue/ endpoints.\n\nArgs:\n    field_filter: Optional field name to filter by (e.g., \"finding_enrichment_settings\").\n                Only entries with changes to this field will be returned.","parameters":[{"in":"query","name":"group","schema":{"type":"integer"}},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this global_ role.","required":true},{"in":"query","name":"id","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"role","schema":{"type":"integer"}},{"in":"query","name":"user","schema":{"type":"integer"}}],"tags":["global_roles"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedAuditLogList"}}},"description":""}}}},"/api/v2/global_roles/{id}/history/legacy/":{"get":{"operationId":"global_roles_history_legacy_list","description":"Get legacy audit log for an object (django-auditlog entries) with pagination.\n\nSupports pagination, filtering, and sorting.\nAvailable at both /api/v2/ and /api/vue/ endpoints.","parameters":[{"in":"query","name":"group","schema":{"type":"integer"}},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this global_ role.","required":true},{"in":"query","name":"id","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"role","schema":{"type":"integer"}},{"in":"query","name":"user","schema":{"type":"integer"}}],"tags":["global_roles"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedLegacyAuditLogList"}}},"description":""}}}},"/api/v2/global_roles/{id}/history/legacy/count/":{"get":{"operationId":"global_roles_history_legacy_count_retrieve","description":"Get the total count of legacy audit log entries for an object.\n\nApplies the same filters as history_legacy (date filter, LegacyAuditLogFilter)\nto ensure the count matches what users will see when viewing the legacy history page.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this global_ role.","required":true}],"tags":["global_roles"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"integer"}}}}},"description":""}}}},"/api/v2/health_check/light/":{"get":{"operationId":"health_check_light_retrieve","description":"Accepts unauthenticated requests to determine if the DefectDojo is reachable. Performs a very lightweight\ndatabase connection to check connectivity.","tags":["health_check"],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SecretOnly"}}},"description":""}}}},"/api/v2/import-languages/":{"post":{"operationId":"import_languages_create","tags":["import-languages"],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ImportLanguagesRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportLanguages"}}},"description":""}}}},"/api/v2/import-scan/":{"post":{"operationId":"import_scan_create","description":"Imports a scan report into an engagement or product.\n\nBy ID:\n- Create a Product (or use an existing product)\n- Create an Engagement inside the product\n- Provide the id of the engagement in the `engagement` parameter\n\nIn this scenario a new Test will be created inside the engagement.\n\nBy Names:\n- Create a Product (or use an existing product)\n- Create an Engagement inside the product\n- Provide `product_name`\n- Provide `engagement_name`\n- Optionally provide `product_type_name`\n\nIn this scenario Defect Dojo will look up the Engagement by the provided details.\n\nWhen using names you can let the importer automatically create Engagements, Products and Product_Types\nby using `auto_create_context=True`.\n\nWhen `auto_create_context` is set to `True` you can use `deduplication_on_engagement` to restrict deduplication for\nimported Findings to the newly created Engagement.","tags":["import-scan"],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/AsyncImportScanRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AsyncImportScan"}}},"description":""}}}},"/api/v2/import-scan/preview/":{"post":{"operationId":"import_scan_preview_create","description":"Parse a scan file and return top-level counts (parsed / new / duplicate / findings_to_close) without creating tests or findings.","summary":"Preview import scan","tags":["import-scan"],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ImportPreviewRequestRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportPreviewResponse"}}},"description":""},"400":{"description":"Invalid payload, product not found, or engagement criteria could not be resolved."},"401":{"description":"Not authenticated."},"403":{"description":"Import preview is disabled for this site or the user lacks access."}}}},"/api/v2/jira_configurations/":{"get":{"operationId":"jira_configurations_list","parameters":[{"in":"query","name":"id","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"url","schema":{"type":"string"}}],"tags":["jira_configurations"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedJIRAInstanceList"}}},"description":""}}},"post":{"operationId":"jira_configurations_create","tags":["jira_configurations"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JIRAInstanceRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/JIRAInstanceRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/JIRAInstanceRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JIRAInstance"}}},"description":""}}}},"/api/v2/jira_configurations/{id}/":{"get":{"operationId":"jira_configurations_retrieve","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this jir a_ instance.","required":true}],"tags":["jira_configurations"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JIRAInstance"}}},"description":""}}},"put":{"operationId":"jira_configurations_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this jir a_ instance.","required":true}],"tags":["jira_configurations"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JIRAInstanceRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/JIRAInstanceRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/JIRAInstanceRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JIRAInstance"}}},"description":""}}},"patch":{"operationId":"jira_configurations_partial_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this jir a_ instance.","required":true}],"tags":["jira_configurations"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedJIRAInstanceRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedJIRAInstanceRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedJIRAInstanceRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JIRAInstance"}}},"description":""}}},"delete":{"operationId":"jira_configurations_destroy","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this jir a_ instance.","required":true}],"tags":["jira_configurations"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/jira_configurations/{id}/delete_preview/":{"get":{"operationId":"jira_configurations_delete_preview_list","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this jir a_ instance.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["jira_configurations"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/jira_finding_mappings/":{"get":{"operationId":"jira_finding_mappings_list","parameters":[{"in":"query","name":"engagement","schema":{"type":"integer"}},{"in":"query","name":"finding","schema":{"type":"integer"}},{"in":"query","name":"finding_group","schema":{"type":"integer"}},{"in":"query","name":"id","schema":{"type":"integer"}},{"in":"query","name":"jira_id","schema":{"type":"string"}},{"in":"query","name":"jira_key","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["jira_finding_mappings"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedJIRAIssueList"}}},"description":""}}},"post":{"operationId":"jira_finding_mappings_create","tags":["jira_finding_mappings"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JIRAIssueRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/JIRAIssueRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/JIRAIssueRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JIRAIssue"}}},"description":""}}}},"/api/v2/jira_finding_mappings/{id}/":{"get":{"operationId":"jira_finding_mappings_retrieve","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this jir a_ issue.","required":true}],"tags":["jira_finding_mappings"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JIRAIssue"}}},"description":""}}},"put":{"operationId":"jira_finding_mappings_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this jir a_ issue.","required":true}],"tags":["jira_finding_mappings"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JIRAIssueRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/JIRAIssueRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/JIRAIssueRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JIRAIssue"}}},"description":""}}},"patch":{"operationId":"jira_finding_mappings_partial_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this jir a_ issue.","required":true}],"tags":["jira_finding_mappings"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedJIRAIssueRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedJIRAIssueRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedJIRAIssueRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JIRAIssue"}}},"description":""}}},"delete":{"operationId":"jira_finding_mappings_destroy","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this jir a_ issue.","required":true}],"tags":["jira_finding_mappings"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/jira_finding_mappings/{id}/delete_preview/":{"get":{"operationId":"jira_finding_mappings_delete_preview_list","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this jir a_ issue.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["jira_finding_mappings"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/jira_instances/":{"get":{"operationId":"jira_instances_list","parameters":[{"in":"query","name":"id","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"url","schema":{"type":"string"}}],"tags":["jira_instances"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedJIRAInstanceList"}}},"description":""}}},"post":{"operationId":"jira_instances_create","tags":["jira_instances"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JIRAInstanceRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/JIRAInstanceRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/JIRAInstanceRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JIRAInstance"}}},"description":""}}}},"/api/v2/jira_instances/{id}/":{"get":{"operationId":"jira_instances_retrieve","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this jir a_ instance.","required":true}],"tags":["jira_instances"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JIRAInstance"}}},"description":""}}},"put":{"operationId":"jira_instances_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this jir a_ instance.","required":true}],"tags":["jira_instances"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JIRAInstanceRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/JIRAInstanceRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/JIRAInstanceRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JIRAInstance"}}},"description":""}}},"patch":{"operationId":"jira_instances_partial_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this jir a_ instance.","required":true}],"tags":["jira_instances"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedJIRAInstanceRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedJIRAInstanceRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedJIRAInstanceRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JIRAInstance"}}},"description":""}}},"delete":{"operationId":"jira_instances_destroy","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this jir a_ instance.","required":true}],"tags":["jira_instances"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/jira_instances/{id}/delete_preview/":{"get":{"operationId":"jira_instances_delete_preview_list","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this jir a_ instance.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["jira_instances"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/jira_product_configurations/":{"get":{"operationId":"jira_product_configurations_list","parameters":[{"in":"query","name":"component","schema":{"type":"string"}},{"in":"query","name":"enable_engagement_epic_mapping","schema":{"type":"boolean"}},{"in":"query","name":"enabled","schema":{"type":"boolean"}},{"in":"query","name":"engagement","schema":{"type":"integer"}},{"in":"query","name":"id","schema":{"type":"integer"}},{"in":"query","name":"jira_instance","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["engagement","jira_instance","product"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"product","schema":{"type":"integer"}},{"in":"query","name":"project_key","schema":{"type":"string"}},{"in":"query","name":"push_all_issues","schema":{"type":"boolean"}},{"in":"query","name":"push_notes","schema":{"type":"boolean"}}],"tags":["jira_product_configurations"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedJIRAProjectList"}}},"description":""}}},"post":{"operationId":"jira_product_configurations_create","tags":["jira_product_configurations"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JIRAProjectRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/JIRAProjectRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/JIRAProjectRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JIRAProject"}}},"description":""}}}},"/api/v2/jira_product_configurations/{id}/":{"get":{"operationId":"jira_product_configurations_retrieve","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this jir a_ project.","required":true},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["engagement","jira_instance","product"]}},"description":"List of fields for which to prefetch model instances and add those to the response"}],"tags":["jira_product_configurations"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JIRAProject"}}},"description":""}}},"put":{"operationId":"jira_product_configurations_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this jir a_ project.","required":true}],"tags":["jira_product_configurations"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JIRAProjectRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/JIRAProjectRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/JIRAProjectRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JIRAProject"}}},"description":""}}},"patch":{"operationId":"jira_product_configurations_partial_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this jir a_ project.","required":true}],"tags":["jira_product_configurations"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedJIRAProjectRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedJIRAProjectRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedJIRAProjectRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JIRAProject"}}},"description":""}}},"delete":{"operationId":"jira_product_configurations_destroy","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this jir a_ project.","required":true}],"tags":["jira_product_configurations"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/jira_product_configurations/{id}/delete_preview/":{"get":{"operationId":"jira_product_configurations_delete_preview_list","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this jir a_ project.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["jira_product_configurations"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/jira_projects/":{"get":{"operationId":"jira_projects_list","parameters":[{"in":"query","name":"component","schema":{"type":"string"}},{"in":"query","name":"enable_engagement_epic_mapping","schema":{"type":"boolean"}},{"in":"query","name":"enabled","schema":{"type":"boolean"}},{"in":"query","name":"engagement","schema":{"type":"integer"}},{"in":"query","name":"id","schema":{"type":"integer"}},{"in":"query","name":"jira_instance","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["engagement","jira_instance","product"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"product","schema":{"type":"integer"}},{"in":"query","name":"project_key","schema":{"type":"string"}},{"in":"query","name":"push_all_issues","schema":{"type":"boolean"}},{"in":"query","name":"push_notes","schema":{"type":"boolean"}}],"tags":["jira_projects"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedJIRAProjectList"}}},"description":""}}},"post":{"operationId":"jira_projects_create","tags":["jira_projects"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JIRAProjectRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/JIRAProjectRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/JIRAProjectRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JIRAProject"}}},"description":""}}}},"/api/v2/jira_projects/{id}/":{"get":{"operationId":"jira_projects_retrieve","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this jir a_ project.","required":true},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["engagement","jira_instance","product"]}},"description":"List of fields for which to prefetch model instances and add those to the response"}],"tags":["jira_projects"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JIRAProject"}}},"description":""}}},"put":{"operationId":"jira_projects_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this jir a_ project.","required":true}],"tags":["jira_projects"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JIRAProjectRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/JIRAProjectRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/JIRAProjectRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JIRAProject"}}},"description":""}}},"patch":{"operationId":"jira_projects_partial_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this jir a_ project.","required":true}],"tags":["jira_projects"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedJIRAProjectRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedJIRAProjectRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedJIRAProjectRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JIRAProject"}}},"description":""}}},"delete":{"operationId":"jira_projects_destroy","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this jir a_ project.","required":true}],"tags":["jira_projects"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/jira_projects/{id}/delete_preview/":{"get":{"operationId":"jira_projects_delete_preview_list","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this jir a_ project.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["jira_projects"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/language_types/":{"get":{"operationId":"language_types_list","parameters":[{"in":"query","name":"color","schema":{"type":"string"}},{"in":"query","name":"id","schema":{"type":"integer"}},{"in":"query","name":"language","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["language_types"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedLanguageTypeList"}}},"description":""}}},"post":{"operationId":"language_types_create","tags":["language_types"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LanguageTypeRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/LanguageTypeRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/LanguageTypeRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LanguageType"}}},"description":""}}}},"/api/v2/language_types/{id}/":{"get":{"operationId":"language_types_retrieve","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this language_ type.","required":true}],"tags":["language_types"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LanguageType"}}},"description":""}}},"put":{"operationId":"language_types_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this language_ type.","required":true}],"tags":["language_types"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LanguageTypeRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/LanguageTypeRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/LanguageTypeRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LanguageType"}}},"description":""}}},"patch":{"operationId":"language_types_partial_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this language_ type.","required":true}],"tags":["language_types"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedLanguageTypeRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedLanguageTypeRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedLanguageTypeRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LanguageType"}}},"description":""}}},"delete":{"operationId":"language_types_destroy","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this language_ type.","required":true}],"tags":["language_types"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/language_types/{id}/delete_preview/":{"get":{"operationId":"language_types_delete_preview_list","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this language_ type.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["language_types"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/languages/":{"get":{"operationId":"languages_list","parameters":[{"in":"query","name":"id","schema":{"type":"integer"}},{"in":"query","name":"language","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["language","product","user"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"product","schema":{"type":"integer"}}],"tags":["languages"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedLanguageList"}}},"description":""}}},"post":{"operationId":"languages_create","tags":["languages"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LanguageRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/LanguageRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/LanguageRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Language"}}},"description":""}}}},"/api/v2/languages/{id}/":{"get":{"operationId":"languages_retrieve","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this languages.","required":true},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["language","product","user"]}},"description":"List of fields for which to prefetch model instances and add those to the response"}],"tags":["languages"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Language"}}},"description":""}}},"put":{"operationId":"languages_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this languages.","required":true}],"tags":["languages"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LanguageRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/LanguageRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/LanguageRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Language"}}},"description":""}}},"patch":{"operationId":"languages_partial_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this languages.","required":true}],"tags":["languages"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedLanguageRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedLanguageRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedLanguageRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Language"}}},"description":""}}},"delete":{"operationId":"languages_destroy","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this languages.","required":true}],"tags":["languages"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/languages/{id}/delete_preview/":{"get":{"operationId":"languages_delete_preview_list","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this languages.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["languages"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/license/{id}/":{"get":{"operationId":"license_retrieve","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this license_ manager.","required":true}],"tags":["license"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LicenseManager"}}},"description":""}}},"patch":{"operationId":"license_partial_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this license_ manager.","required":true}],"tags":["license"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedLicenseManagerRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedLicenseManagerRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedLicenseManagerRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LicenseManager"}}},"description":""}}}},"/api/v2/license/license_days_until_expiration/":{"get":{"operationId":"license_license_days_until_expiration_retrieve","tags":["license"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LicenseManager"}}},"description":""}}}},"/api/v2/license/license_expiration/":{"get":{"operationId":"license_license_expiration_retrieve","tags":["license"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LicenseManager"}}},"description":""}}}},"/api/v2/license/license_initialization/":{"get":{"operationId":"license_license_initialization_retrieve","tags":["license"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LicenseManager"}}},"description":""}}}},"/api/v2/license/license_is_valid/":{"get":{"operationId":"license_license_is_valid_retrieve","tags":["license"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LicenseManager"}}},"description":""}}}},"/api/v2/license/license_package/":{"get":{"operationId":"license_license_package_retrieve","tags":["license"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LicenseManager"}}},"description":""}}}},"/api/v2/license/license_status/":{"get":{"operationId":"license_license_status_retrieve","tags":["license"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LicenseManager"}}},"description":""}}}},"/api/v2/license/license_subscriber/":{"get":{"operationId":"license_license_subscriber_retrieve","tags":["license"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LicenseManager"}}},"description":""}}}},"/api/v2/license/remind_later/":{"post":{"operationId":"license_remind_later_create","tags":["license"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"description":"No response body"}}}},"/api/v2/license/view_license/":{"get":{"operationId":"license_view_license_retrieve","tags":["license"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LicenseManager"}}},"description":""}}}},"/api/v2/location/":{"get":{"operationId":"location_list","description":"A simple ViewSet for viewing and editing Locations.","parameters":[{"in":"query","name":"created_at_after","schema":{"type":"string","format":"date-time"},"description":"Created At: DateTime Range Filter"},{"in":"query","name":"created_at_before","schema":{"type":"string","format":"date-time"},"description":"Created At: DateTime Range Filter"},{"in":"query","name":"findings__finding_equals","schema":{"type":"integer"},"description":"Finding ID: Equals"},{"in":"query","name":"findings__finding_greater_than_or_equal_to","schema":{"type":"integer"},"description":"Finding ID: Greater Than or Equal To"},{"in":"query","name":"findings__finding_includes","schema":{"type":"array","items":{"type":"integer"}},"description":"Finding ID: Included in List","explode":false,"style":"form"},{"in":"query","name":"findings__finding_less_than_or_equal_to","schema":{"type":"integer"},"description":"Finding ID: Less Than or Equal To"},{"in":"query","name":"findings__finding_not_equals","schema":{"type":"integer"},"description":"Finding ID: Not Equals"},{"in":"query","name":"findings__finding_not_includes","schema":{"type":"array","items":{"type":"integer"}},"description":"Finding ID: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"id_equals","schema":{"type":"integer"},"description":"ID: Equals"},{"in":"query","name":"id_greater_than_or_equal_to","schema":{"type":"integer"},"description":"ID: Greater Than or Equal To"},{"in":"query","name":"id_includes","schema":{"type":"array","items":{"type":"integer"}},"description":"ID: Included in List","explode":false,"style":"form"},{"in":"query","name":"id_less_than_or_equal_to","schema":{"type":"integer"},"description":"ID: Less Than or Equal To"},{"in":"query","name":"id_not_equals","schema":{"type":"integer"},"description":"ID: Not Equals"},{"in":"query","name":"id_not_includes","schema":{"type":"array","items":{"type":"integer"}},"description":"ID: Not Included in List","explode":false,"style":"form"},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"location_type_contains","schema":{"type":"string"},"description":"Location Type: Contains"},{"in":"query","name":"location_type_ends_with","schema":{"type":"string"},"description":"Location Type: Ends With"},{"in":"query","name":"location_type_exact","schema":{"type":"string"},"description":"Location Type: Exact Match"},{"in":"query","name":"location_type_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Location Type: Included in List","explode":false,"style":"form"},{"in":"query","name":"location_type_not_contains","schema":{"type":"string"},"description":"Location Type: Not Contains"},{"in":"query","name":"location_type_not_exact","schema":{"type":"string"},"description":"Location Type: Not Exact Match"},{"in":"query","name":"location_type_not_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Location Type: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"location_type_starts_with","schema":{"type":"string"},"description":"Location Type: Starts With"},{"in":"query","name":"location_value_contains","schema":{"type":"string"},"description":"Location Value: Contains"},{"in":"query","name":"location_value_ends_with","schema":{"type":"string"},"description":"Location Value: Ends With"},{"in":"query","name":"location_value_exact","schema":{"type":"string"},"description":"Location Value: Exact Match"},{"in":"query","name":"location_value_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Location Value: Included in List","explode":false,"style":"form"},{"in":"query","name":"location_value_not_contains","schema":{"type":"string"},"description":"Location Value: Not Contains"},{"in":"query","name":"location_value_not_exact","schema":{"type":"string"},"description":"Location Value: Not Exact Match"},{"in":"query","name":"location_value_not_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Location Value: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"location_value_starts_with","schema":{"type":"string"},"description":"Location Value: Starts With"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"ordering","schema":{"type":"array","items":{"type":"string","enum":["-created_at","-id","-location_type","-location_value","-updated_at","created_at","id","location_type","location_value","updated_at"]}},"description":"Ordering\n\n* `id` - Id\n* `-id` - Id (descending)\n* `location_type` - Location type\n* `-location_type` - Location type (descending)\n* `location_value` - Location value\n* `-location_value` - Location value (descending)\n* `created_at` - Created at\n* `-created_at` - Created at (descending)\n* `updated_at` - Updated at\n* `-updated_at` - Updated at (descending)","explode":false,"style":"form"},{"in":"query","name":"products__product_equals","schema":{"type":"integer"},"description":"Product ID: Equals"},{"in":"query","name":"products__product_greater_than_or_equal_to","schema":{"type":"integer"},"description":"Product ID: Greater Than or Equal To"},{"in":"query","name":"products__product_includes","schema":{"type":"array","items":{"type":"integer"}},"description":"Product ID: Included in List","explode":false,"style":"form"},{"in":"query","name":"products__product_less_than_or_equal_to","schema":{"type":"integer"},"description":"Product ID: Less Than or Equal To"},{"in":"query","name":"products__product_not_equals","schema":{"type":"integer"},"description":"Product ID: Not Equals"},{"in":"query","name":"products__product_not_includes","schema":{"type":"array","items":{"type":"integer"}},"description":"Product ID: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"tags__name_contains","schema":{"type":"string"},"description":"Tags: Contains"},{"in":"query","name":"tags__name_ends_with","schema":{"type":"string"},"description":"Tags: Ends With"},{"in":"query","name":"tags__name_exact","schema":{"type":"string"},"description":"Tags: Exact Match"},{"in":"query","name":"tags__name_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Tags: Included in List","explode":false,"style":"form"},{"in":"query","name":"tags__name_not_contains","schema":{"type":"string"},"description":"Tags: Not Contains"},{"in":"query","name":"tags__name_not_exact","schema":{"type":"string"},"description":"Tags: Not Exact Match"},{"in":"query","name":"tags__name_not_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Tags: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"tags__name_starts_with","schema":{"type":"string"},"description":"Tags: Starts With"},{"in":"query","name":"updated_at_after","schema":{"type":"string","format":"date-time"},"description":"Updated At: DateTime Range Filter"},{"in":"query","name":"updated_at_before","schema":{"type":"string","format":"date-time"},"description":"Updated At: DateTime Range Filter"}],"tags":["location"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedLocationList"}}},"description":""}}}},"/api/v2/location/{id}/":{"get":{"operationId":"location_retrieve","description":"A simple ViewSet for viewing and editing Locations.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Locations - Location.","required":true}],"tags":["location"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Location"}}},"description":""}}}},"/api/v2/location_findings/":{"get":{"operationId":"location_findings_list","description":"A simple ViewSet for viewing and editing LocationFindingReference.","parameters":[{"in":"query","name":"created_at_after","schema":{"type":"string","format":"date-time"},"description":"Created At: DateTime Range Filter"},{"in":"query","name":"created_at_before","schema":{"type":"string","format":"date-time"},"description":"Created At: DateTime Range Filter"},{"in":"query","name":"finding__severity_contains","schema":{"type":"string"},"description":"Finding Severity: Contains"},{"in":"query","name":"finding__severity_ends_with","schema":{"type":"string"},"description":"Finding Severity: Ends With"},{"in":"query","name":"finding__severity_exact","schema":{"type":"string"},"description":"Finding Severity: Exact Match"},{"in":"query","name":"finding__severity_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Finding Severity: Included in List","explode":false,"style":"form"},{"in":"query","name":"finding__severity_not_contains","schema":{"type":"string"},"description":"Finding Severity: Not Contains"},{"in":"query","name":"finding__severity_not_exact","schema":{"type":"string"},"description":"Finding Severity: Not Exact Match"},{"in":"query","name":"finding__severity_not_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Finding Severity: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"finding__severity_starts_with","schema":{"type":"string"},"description":"Finding Severity: Starts With"},{"in":"query","name":"finding_equals","schema":{"type":"integer"},"description":"Finding: Equals"},{"in":"query","name":"finding_greater_than_or_equal_to","schema":{"type":"integer"},"description":"Finding: Greater Than or Equal To"},{"in":"query","name":"finding_includes","schema":{"type":"array","items":{"type":"integer"}},"description":"Finding: Included in List","explode":false,"style":"form"},{"in":"query","name":"finding_less_than_or_equal_to","schema":{"type":"integer"},"description":"Finding: Less Than or Equal To"},{"in":"query","name":"finding_not_equals","schema":{"type":"integer"},"description":"Finding: Not Equals"},{"in":"query","name":"finding_not_includes","schema":{"type":"array","items":{"type":"integer"}},"description":"Finding: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"id_equals","schema":{"type":"integer"},"description":"ID: Equals"},{"in":"query","name":"id_greater_than_or_equal_to","schema":{"type":"integer"},"description":"ID: Greater Than or Equal To"},{"in":"query","name":"id_includes","schema":{"type":"array","items":{"type":"integer"}},"description":"ID: Included in List","explode":false,"style":"form"},{"in":"query","name":"id_less_than_or_equal_to","schema":{"type":"integer"},"description":"ID: Less Than or Equal To"},{"in":"query","name":"id_not_equals","schema":{"type":"integer"},"description":"ID: Not Equals"},{"in":"query","name":"id_not_includes","schema":{"type":"array","items":{"type":"integer"}},"description":"ID: Not Included in List","explode":false,"style":"form"},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"location_equals","schema":{"type":"integer"},"description":"Location: Equals"},{"in":"query","name":"location_greater_than_or_equal_to","schema":{"type":"integer"},"description":"Location: Greater Than or Equal To"},{"in":"query","name":"location_includes","schema":{"type":"array","items":{"type":"integer"}},"description":"Location: Included in List","explode":false,"style":"form"},{"in":"query","name":"location_less_than_or_equal_to","schema":{"type":"integer"},"description":"Location: Less Than or Equal To"},{"in":"query","name":"location_not_equals","schema":{"type":"integer"},"description":"Location: Not Equals"},{"in":"query","name":"location_not_includes","schema":{"type":"array","items":{"type":"integer"}},"description":"Location: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"location_type_contains","schema":{"type":"string"},"description":"Location Type: Contains"},{"in":"query","name":"location_type_ends_with","schema":{"type":"string"},"description":"Location Type: Ends With"},{"in":"query","name":"location_type_exact","schema":{"type":"string"},"description":"Location Type: Exact Match"},{"in":"query","name":"location_type_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Location Type: Included in List","explode":false,"style":"form"},{"in":"query","name":"location_type_not_contains","schema":{"type":"string"},"description":"Location Type: Not Contains"},{"in":"query","name":"location_type_not_exact","schema":{"type":"string"},"description":"Location Type: Not Exact Match"},{"in":"query","name":"location_type_not_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Location Type: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"location_type_starts_with","schema":{"type":"string"},"description":"Location Type: Starts With"},{"in":"query","name":"location_value_contains","schema":{"type":"string"},"description":"Location Value: Contains"},{"in":"query","name":"location_value_ends_with","schema":{"type":"string"},"description":"Location Value: Ends With"},{"in":"query","name":"location_value_exact","schema":{"type":"string"},"description":"Location Value: Exact Match"},{"in":"query","name":"location_value_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Location Value: Included in List","explode":false,"style":"form"},{"in":"query","name":"location_value_not_contains","schema":{"type":"string"},"description":"Location Value: Not Contains"},{"in":"query","name":"location_value_not_exact","schema":{"type":"string"},"description":"Location Value: Not Exact Match"},{"in":"query","name":"location_value_not_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Location Value: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"location_value_starts_with","schema":{"type":"string"},"description":"Location Value: Starts With"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"ordering","schema":{"type":"array","items":{"type":"string","enum":["-created_at","-finding","-finding__severity","-id","-location_type","-location_value","-status","-updated_at","created_at","finding","finding__severity","id","location_type","location_value","status","updated_at"]}},"description":"Ordering\n\n* `id` - Id\n* `-id` - Id (descending)\n* `location_type` - Location type\n* `-location_type` - Location type (descending)\n* `location_value` - Location value\n* `-location_value` - Location value (descending)\n* `finding` - Finding\n* `-finding` - Finding (descending)\n* `finding__severity` - Finding  severity\n* `-finding__severity` - Finding  severity (descending)\n* `status` - Status\n* `-status` - Status (descending)\n* `created_at` - Created at\n* `-created_at` - Created at (descending)\n* `updated_at` - Updated at\n* `-updated_at` - Updated at (descending)","explode":false,"style":"form"},{"in":"query","name":"status_equals","schema":{"type":"array","items":{"type":"string","x-spec-enum-id":"918ee82ac8d9cac7","enum":["Active","FalsePositive","Mitigated","OutOfScope","RiskAccepted"]}},"description":"Status: Choice Filter\n\n* `Active` - Active\n* `Mitigated` - Mitigated\n* `FalsePositive` - False Positive\n* `RiskAccepted` - Risk Accepted\n* `OutOfScope` - Out Of Scope","explode":true,"style":"form"},{"in":"query","name":"updated_at_after","schema":{"type":"string","format":"date-time"},"description":"Updated At: DateTime Range Filter"},{"in":"query","name":"updated_at_before","schema":{"type":"string","format":"date-time"},"description":"Updated At: DateTime Range Filter"}],"tags":["location_findings"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedLocationFindingReferenceList"}}},"description":""}}},"post":{"operationId":"location_findings_create","description":"A simple ViewSet for viewing and editing LocationFindingReference.","tags":["location_findings"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocationFindingReferenceRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/LocationFindingReferenceRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/LocationFindingReferenceRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocationFindingReference"}}},"description":""}}}},"/api/v2/location_findings/{id}/":{"get":{"operationId":"location_findings_retrieve","description":"A simple ViewSet for viewing and editing LocationFindingReference.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Locations - FindingReference.","required":true}],"tags":["location_findings"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocationFindingReference"}}},"description":""}}},"put":{"operationId":"location_findings_update","description":"A simple ViewSet for viewing and editing LocationFindingReference.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Locations - FindingReference.","required":true}],"tags":["location_findings"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocationFindingReferenceRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/LocationFindingReferenceRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/LocationFindingReferenceRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocationFindingReference"}}},"description":""}}},"patch":{"operationId":"location_findings_partial_update","description":"A simple ViewSet for viewing and editing LocationFindingReference.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Locations - FindingReference.","required":true}],"tags":["location_findings"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedLocationFindingReferenceRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedLocationFindingReferenceRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedLocationFindingReferenceRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocationFindingReference"}}},"description":""}}},"delete":{"operationId":"location_findings_destroy","description":"A simple ViewSet for viewing and editing LocationFindingReference.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Locations - FindingReference.","required":true}],"tags":["location_findings"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/location_findings/{id}/delete_preview/":{"get":{"operationId":"location_findings_delete_preview_list","description":"A simple ViewSet for viewing and editing LocationFindingReference.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Locations - FindingReference.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["location_findings"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/location_products/":{"get":{"operationId":"location_products_list","description":"A simple ViewSet for viewing and editing LocationProductReference.","parameters":[{"in":"query","name":"created_at_after","schema":{"type":"string","format":"date-time"},"description":"Created At: DateTime Range Filter"},{"in":"query","name":"created_at_before","schema":{"type":"string","format":"date-time"},"description":"Created At: DateTime Range Filter"},{"in":"query","name":"id_equals","schema":{"type":"integer"},"description":"ID: Equals"},{"in":"query","name":"id_greater_than_or_equal_to","schema":{"type":"integer"},"description":"ID: Greater Than or Equal To"},{"in":"query","name":"id_includes","schema":{"type":"array","items":{"type":"integer"}},"description":"ID: Included in List","explode":false,"style":"form"},{"in":"query","name":"id_less_than_or_equal_to","schema":{"type":"integer"},"description":"ID: Less Than or Equal To"},{"in":"query","name":"id_not_equals","schema":{"type":"integer"},"description":"ID: Not Equals"},{"in":"query","name":"id_not_includes","schema":{"type":"array","items":{"type":"integer"}},"description":"ID: Not Included in List","explode":false,"style":"form"},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"location_equals","schema":{"type":"integer"},"description":"Location: Equals"},{"in":"query","name":"location_greater_than_or_equal_to","schema":{"type":"integer"},"description":"Location: Greater Than or Equal To"},{"in":"query","name":"location_includes","schema":{"type":"array","items":{"type":"integer"}},"description":"Location: Included in List","explode":false,"style":"form"},{"in":"query","name":"location_less_than_or_equal_to","schema":{"type":"integer"},"description":"Location: Less Than or Equal To"},{"in":"query","name":"location_not_equals","schema":{"type":"integer"},"description":"Location: Not Equals"},{"in":"query","name":"location_not_includes","schema":{"type":"array","items":{"type":"integer"}},"description":"Location: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"location_type_contains","schema":{"type":"string"},"description":"Location Type: Contains"},{"in":"query","name":"location_type_ends_with","schema":{"type":"string"},"description":"Location Type: Ends With"},{"in":"query","name":"location_type_exact","schema":{"type":"string"},"description":"Location Type: Exact Match"},{"in":"query","name":"location_type_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Location Type: Included in List","explode":false,"style":"form"},{"in":"query","name":"location_type_not_contains","schema":{"type":"string"},"description":"Location Type: Not Contains"},{"in":"query","name":"location_type_not_exact","schema":{"type":"string"},"description":"Location Type: Not Exact Match"},{"in":"query","name":"location_type_not_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Location Type: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"location_type_starts_with","schema":{"type":"string"},"description":"Location Type: Starts With"},{"in":"query","name":"location_value_contains","schema":{"type":"string"},"description":"Location Value: Contains"},{"in":"query","name":"location_value_ends_with","schema":{"type":"string"},"description":"Location Value: Ends With"},{"in":"query","name":"location_value_exact","schema":{"type":"string"},"description":"Location Value: Exact Match"},{"in":"query","name":"location_value_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Location Value: Included in List","explode":false,"style":"form"},{"in":"query","name":"location_value_not_contains","schema":{"type":"string"},"description":"Location Value: Not Contains"},{"in":"query","name":"location_value_not_exact","schema":{"type":"string"},"description":"Location Value: Not Exact Match"},{"in":"query","name":"location_value_not_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Location Value: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"location_value_starts_with","schema":{"type":"string"},"description":"Location Value: Starts With"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"ordering","schema":{"type":"array","items":{"type":"string","enum":["-created_at","-id","-location_type","-location_value","-product","-product__name","-status","-updated_at","created_at","id","location_type","location_value","product","product__name","status","updated_at"]}},"description":"Ordering\n\n* `id` - Id\n* `-id` - Id (descending)\n* `location_type` - Location type\n* `-location_type` - Location type (descending)\n* `location_value` - Location value\n* `-location_value` - Location value (descending)\n* `product` - Product\n* `-product` - Product (descending)\n* `product__name` - Product  name\n* `-product__name` - Product  name (descending)\n* `status` - Status\n* `-status` - Status (descending)\n* `created_at` - Created at\n* `-created_at` - Created at (descending)\n* `updated_at` - Updated at\n* `-updated_at` - Updated at (descending)","explode":false,"style":"form"},{"in":"query","name":"product__name_contains","schema":{"type":"string"},"description":"Product Name: Contains"},{"in":"query","name":"product__name_ends_with","schema":{"type":"string"},"description":"Product Name: Ends With"},{"in":"query","name":"product__name_exact","schema":{"type":"string"},"description":"Product Name: Exact Match"},{"in":"query","name":"product__name_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Product Name: Included in List","explode":false,"style":"form"},{"in":"query","name":"product__name_not_contains","schema":{"type":"string"},"description":"Product Name: Not Contains"},{"in":"query","name":"product__name_not_exact","schema":{"type":"string"},"description":"Product Name: Not Exact Match"},{"in":"query","name":"product__name_not_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Product Name: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"product__name_starts_with","schema":{"type":"string"},"description":"Product Name: Starts With"},{"in":"query","name":"product_equals","schema":{"type":"integer"},"description":"Product: Equals"},{"in":"query","name":"product_greater_than_or_equal_to","schema":{"type":"integer"},"description":"Product: Greater Than or Equal To"},{"in":"query","name":"product_includes","schema":{"type":"array","items":{"type":"integer"}},"description":"Product: Included in List","explode":false,"style":"form"},{"in":"query","name":"product_less_than_or_equal_to","schema":{"type":"integer"},"description":"Product: Less Than or Equal To"},{"in":"query","name":"product_not_equals","schema":{"type":"integer"},"description":"Product: Not Equals"},{"in":"query","name":"product_not_includes","schema":{"type":"array","items":{"type":"integer"}},"description":"Product: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"status_equals","schema":{"type":"array","items":{"type":"string","x-spec-enum-id":"bcfb073a62b96b70","enum":["Active","Mitigated"]}},"description":"Status: Choice Filter\n\n* `Active` - Active\n* `Mitigated` - Mitigated","explode":true,"style":"form"},{"in":"query","name":"updated_at_after","schema":{"type":"string","format":"date-time"},"description":"Updated At: DateTime Range Filter"},{"in":"query","name":"updated_at_before","schema":{"type":"string","format":"date-time"},"description":"Updated At: DateTime Range Filter"}],"tags":["location_products"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedLocationProductReferenceList"}}},"description":""}}},"post":{"operationId":"location_products_create","description":"A simple ViewSet for viewing and editing LocationProductReference.","tags":["location_products"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocationProductReferenceRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/LocationProductReferenceRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/LocationProductReferenceRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocationProductReference"}}},"description":""}}}},"/api/v2/location_products/{id}/":{"get":{"operationId":"location_products_retrieve","description":"A simple ViewSet for viewing and editing LocationProductReference.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Locations - ProductReference.","required":true}],"tags":["location_products"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocationProductReference"}}},"description":""}}},"put":{"operationId":"location_products_update","description":"A simple ViewSet for viewing and editing LocationProductReference.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Locations - ProductReference.","required":true}],"tags":["location_products"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocationProductReferenceRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/LocationProductReferenceRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/LocationProductReferenceRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocationProductReference"}}},"description":""}}},"patch":{"operationId":"location_products_partial_update","description":"A simple ViewSet for viewing and editing LocationProductReference.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Locations - ProductReference.","required":true}],"tags":["location_products"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedLocationProductReferenceRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedLocationProductReferenceRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedLocationProductReferenceRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocationProductReference"}}},"description":""}}},"delete":{"operationId":"location_products_destroy","description":"A simple ViewSet for viewing and editing LocationProductReference.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Locations - ProductReference.","required":true}],"tags":["location_products"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/location_products/{id}/delete_preview/":{"get":{"operationId":"location_products_delete_preview_list","description":"A simple ViewSet for viewing and editing LocationProductReference.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Locations - ProductReference.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["location_products"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/login_banner/{id}/":{"get":{"operationId":"login_banner_retrieve","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this banner conf.","required":true}],"tags":["login_banner"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginBanner"}}},"description":""}}},"put":{"operationId":"login_banner_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this banner conf.","required":true}],"tags":["login_banner"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginBannerRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/LoginBannerRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/LoginBannerRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginBanner"}}},"description":""}}},"patch":{"operationId":"login_banner_partial_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this banner conf.","required":true}],"tags":["login_banner"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedLoginBannerRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedLoginBannerRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedLoginBannerRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginBanner"}}},"description":""}}}},"/api/v2/maintenance_window/":{"get":{"operationId":"maintenance_window_list","parameters":[{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["maintenance_window"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedMaintenanceWindowList"}}},"description":""}}}},"/api/v2/maintenance_window/{id}/":{"get":{"operationId":"maintenance_window_retrieve","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this maintenance window.","required":true}],"tags":["maintenance_window"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MaintenanceWindow"}}},"description":""}}},"put":{"operationId":"maintenance_window_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this maintenance window.","required":true}],"tags":["maintenance_window"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MaintenanceWindowRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/MaintenanceWindowRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/MaintenanceWindowRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MaintenanceWindow"}}},"description":""}}},"patch":{"operationId":"maintenance_window_partial_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this maintenance window.","required":true}],"tags":["maintenance_window"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedMaintenanceWindowRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedMaintenanceWindowRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedMaintenanceWindowRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MaintenanceWindow"}}},"description":""}}}},"/api/v2/metadata/":{"get":{"operationId":"metadata_list","parameters":[{"in":"query","name":"endpoint","schema":{"type":"integer"}},{"in":"query","name":"finding","schema":{"type":"integer"}},{"in":"query","name":"id","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"location","schema":{"type":"integer"}},{"in":"query","name":"name","schema":{"type":"string"}},{"in":"query","name":"name_case_insensitive","schema":{"type":"string"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"product","schema":{"type":"integer"}},{"in":"query","name":"value","schema":{"type":"string"}},{"in":"query","name":"value_case_insensitive","schema":{"type":"string"}}],"tags":["metadata"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedMetaList"}}},"description":""}}},"post":{"operationId":"metadata_create","tags":["metadata"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetaRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/MetaRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/MetaRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Meta"}}},"description":""}}}},"/api/v2/metadata/{id}/":{"get":{"operationId":"metadata_retrieve","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this dojo meta.","required":true}],"tags":["metadata"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Meta"}}},"description":""}}},"put":{"operationId":"metadata_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this dojo meta.","required":true}],"tags":["metadata"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetaRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/MetaRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/MetaRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Meta"}}},"description":""}}},"patch":{"operationId":"metadata_partial_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this dojo meta.","required":true}],"tags":["metadata"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedMetaRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedMetaRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedMetaRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Meta"}}},"description":""}}},"delete":{"operationId":"metadata_destroy","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this dojo meta.","required":true}],"tags":["metadata"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/metadata/{id}/delete_preview/":{"get":{"operationId":"metadata_delete_preview_list","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this dojo meta.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["metadata"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/metadata/batch/":{"post":{"operationId":"metadata_batch_create","tags":["metadata"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetaMainRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/MetaMainRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/MetaMainRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetaMain"}}},"description":""}}},"patch":{"operationId":"metadata_batch_partial_update","tags":["metadata"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedMetaMainRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedMetaMainRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedMetaMainRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetaMain"}}},"description":""}}}},"/api/v2/mitigation_policies/":{"get":{"operationId":"mitigation_policies_list","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"query","name":"description_contains","schema":{"type":"string"}},{"in":"query","name":"description_ends_with","schema":{"type":"string"}},{"in":"query","name":"description_exact","schema":{"type":"string"}},{"in":"query","name":"description_not_contains","schema":{"type":"string"}},{"in":"query","name":"description_not_exact","schema":{"type":"string"}},{"in":"query","name":"description_not_regex","schema":{"type":"string"}},{"in":"query","name":"description_regex","schema":{"type":"string"}},{"in":"query","name":"description_starts_with","schema":{"type":"string"}},{"in":"query","name":"exclude_id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"id_equals","schema":{"type":"integer"}},{"in":"query","name":"id_greater_than","schema":{"type":"integer"}},{"in":"query","name":"id_greater_than_equal_to","schema":{"type":"integer"}},{"in":"query","name":"id_in","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"id_less_than","schema":{"type":"integer"}},{"in":"query","name":"id_less_than_equal_to","schema":{"type":"integer"}},{"in":"query","name":"id_not_equals","schema":{"type":"integer"}},{"in":"query","name":"id_not_in","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"is_default","schema":{"type":"boolean"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-id","-is_default","-title","id","is_default","title"]}},"description":"Ordering\n\n* `id` - Id\n* `-id` - Id (descending)\n* `title` - Title\n* `-title` - Title (descending)\n* `is_default` - Is default\n* `-is_default` - Is default (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"},{"in":"query","name":"search","schema":{"type":"string"},"description":"Search Across: title, description"},{"in":"query","name":"title_contains","schema":{"type":"string"}},{"in":"query","name":"title_ends_with","schema":{"type":"string"}},{"in":"query","name":"title_exact","schema":{"type":"string"}},{"in":"query","name":"title_not_contains","schema":{"type":"string"}},{"in":"query","name":"title_not_exact","schema":{"type":"string"}},{"in":"query","name":"title_not_regex","schema":{"type":"string"}},{"in":"query","name":"title_regex","schema":{"type":"string"}},{"in":"query","name":"title_starts_with","schema":{"type":"string"}}],"tags":["mitigation_policies"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedMitigationPolicyList"}}},"description":""}}},"post":{"operationId":"mitigation_policies_create","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","tags":["mitigation_policies"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MitigationPolicyRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/MitigationPolicyRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/MitigationPolicyRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MitigationPolicy"}}},"description":""}}}},"/api/v2/mitigation_policies/{id}/":{"get":{"operationId":"mitigation_policies_retrieve","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Mitigation Policy.","required":true},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"}],"tags":["mitigation_policies"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MitigationPolicy"}}},"description":""}}},"put":{"operationId":"mitigation_policies_update","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Mitigation Policy.","required":true}],"tags":["mitigation_policies"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MitigationPolicyRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/MitigationPolicyRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/MitigationPolicyRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MitigationPolicy"}}},"description":""}}},"patch":{"operationId":"mitigation_policies_partial_update","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Mitigation Policy.","required":true}],"tags":["mitigation_policies"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedMitigationPolicyRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedMitigationPolicyRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedMitigationPolicyRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MitigationPolicy"}}},"description":""}}},"delete":{"operationId":"mitigation_policies_destroy","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Mitigation Policy.","required":true}],"tags":["mitigation_policies"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/mitigation_policies/{id}/history/":{"get":{"operationId":"mitigation_policies_history_list","description":"Get audit log entries for an object with pagination.\n\nUses DojoEvents.objects.tracks(obj) to get events for the object itself,\nand DojoEvents.objects.references(obj) to get events for related objects\n(objects with foreign keys pointing to this object). Supports pagination, filtering, and sorting.\nAvailable at both /api/v2/ and /api/vue/ endpoints.\n\nArgs:\n    field_filter: Optional field name to filter by (e.g., \"finding_enrichment_settings\").\n                Only entries with changes to this field will be returned.","parameters":[{"in":"query","name":"description_contains","schema":{"type":"string"}},{"in":"query","name":"description_ends_with","schema":{"type":"string"}},{"in":"query","name":"description_exact","schema":{"type":"string"}},{"in":"query","name":"description_not_contains","schema":{"type":"string"}},{"in":"query","name":"description_not_exact","schema":{"type":"string"}},{"in":"query","name":"description_not_regex","schema":{"type":"string"}},{"in":"query","name":"description_regex","schema":{"type":"string"}},{"in":"query","name":"description_starts_with","schema":{"type":"string"}},{"in":"query","name":"exclude_id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Mitigation Policy.","required":true},{"in":"query","name":"id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"id_equals","schema":{"type":"integer"}},{"in":"query","name":"id_greater_than","schema":{"type":"integer"}},{"in":"query","name":"id_greater_than_equal_to","schema":{"type":"integer"}},{"in":"query","name":"id_in","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"id_less_than","schema":{"type":"integer"}},{"in":"query","name":"id_less_than_equal_to","schema":{"type":"integer"}},{"in":"query","name":"id_not_equals","schema":{"type":"integer"}},{"in":"query","name":"id_not_in","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"is_default","schema":{"type":"boolean"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-id","-is_default","-title","id","is_default","title"]}},"description":"Ordering\n\n* `id` - Id\n* `-id` - Id (descending)\n* `title` - Title\n* `-title` - Title (descending)\n* `is_default` - Is default\n* `-is_default` - Is default (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"search","schema":{"type":"string"},"description":"Search Across: title, description"},{"in":"query","name":"title_contains","schema":{"type":"string"}},{"in":"query","name":"title_ends_with","schema":{"type":"string"}},{"in":"query","name":"title_exact","schema":{"type":"string"}},{"in":"query","name":"title_not_contains","schema":{"type":"string"}},{"in":"query","name":"title_not_exact","schema":{"type":"string"}},{"in":"query","name":"title_not_regex","schema":{"type":"string"}},{"in":"query","name":"title_regex","schema":{"type":"string"}},{"in":"query","name":"title_starts_with","schema":{"type":"string"}}],"tags":["mitigation_policies"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedAuditLogList"}}},"description":""}}}},"/api/v2/mitigation_policies/{id}/history/legacy/":{"get":{"operationId":"mitigation_policies_history_legacy_list","description":"Get legacy audit log for an object (django-auditlog entries) with pagination.\n\nSupports pagination, filtering, and sorting.\nAvailable at both /api/v2/ and /api/vue/ endpoints.","parameters":[{"in":"query","name":"description_contains","schema":{"type":"string"}},{"in":"query","name":"description_ends_with","schema":{"type":"string"}},{"in":"query","name":"description_exact","schema":{"type":"string"}},{"in":"query","name":"description_not_contains","schema":{"type":"string"}},{"in":"query","name":"description_not_exact","schema":{"type":"string"}},{"in":"query","name":"description_not_regex","schema":{"type":"string"}},{"in":"query","name":"description_regex","schema":{"type":"string"}},{"in":"query","name":"description_starts_with","schema":{"type":"string"}},{"in":"query","name":"exclude_id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Mitigation Policy.","required":true},{"in":"query","name":"id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"id_equals","schema":{"type":"integer"}},{"in":"query","name":"id_greater_than","schema":{"type":"integer"}},{"in":"query","name":"id_greater_than_equal_to","schema":{"type":"integer"}},{"in":"query","name":"id_in","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"id_less_than","schema":{"type":"integer"}},{"in":"query","name":"id_less_than_equal_to","schema":{"type":"integer"}},{"in":"query","name":"id_not_equals","schema":{"type":"integer"}},{"in":"query","name":"id_not_in","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"is_default","schema":{"type":"boolean"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-id","-is_default","-title","id","is_default","title"]}},"description":"Ordering\n\n* `id` - Id\n* `-id` - Id (descending)\n* `title` - Title\n* `-title` - Title (descending)\n* `is_default` - Is default\n* `-is_default` - Is default (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"search","schema":{"type":"string"},"description":"Search Across: title, description"},{"in":"query","name":"title_contains","schema":{"type":"string"}},{"in":"query","name":"title_ends_with","schema":{"type":"string"}},{"in":"query","name":"title_exact","schema":{"type":"string"}},{"in":"query","name":"title_not_contains","schema":{"type":"string"}},{"in":"query","name":"title_not_exact","schema":{"type":"string"}},{"in":"query","name":"title_not_regex","schema":{"type":"string"}},{"in":"query","name":"title_regex","schema":{"type":"string"}},{"in":"query","name":"title_starts_with","schema":{"type":"string"}}],"tags":["mitigation_policies"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedLegacyAuditLogList"}}},"description":""}}}},"/api/v2/mitigation_policies/{id}/history/legacy/count/":{"get":{"operationId":"mitigation_policies_history_legacy_count_retrieve","description":"Get the total count of legacy audit log entries for an object.\n\nApplies the same filters as history_legacy (date filter, LegacyAuditLogFilter)\nto ensure the count matches what users will see when viewing the legacy history page.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Mitigation Policy.","required":true}],"tags":["mitigation_policies"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"integer"}}}}},"description":""}}}},"/api/v2/network_locations/":{"get":{"operationId":"network_locations_list","parameters":[{"in":"query","name":"id","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"location","schema":{"type":"string"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["network_locations"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedNetworkLocationsList"}}},"description":""}}},"post":{"operationId":"network_locations_create","tags":["network_locations"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkLocationsRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/NetworkLocationsRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/NetworkLocationsRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkLocations"}}},"description":""}}}},"/api/v2/network_locations/{id}/":{"get":{"operationId":"network_locations_retrieve","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this network_ locations.","required":true}],"tags":["network_locations"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkLocations"}}},"description":""}}},"put":{"operationId":"network_locations_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this network_ locations.","required":true}],"tags":["network_locations"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkLocationsRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/NetworkLocationsRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/NetworkLocationsRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkLocations"}}},"description":""}}},"patch":{"operationId":"network_locations_partial_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this network_ locations.","required":true}],"tags":["network_locations"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedNetworkLocationsRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedNetworkLocationsRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedNetworkLocationsRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkLocations"}}},"description":""}}},"delete":{"operationId":"network_locations_destroy","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this network_ locations.","required":true}],"tags":["network_locations"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/network_locations/{id}/delete_preview/":{"get":{"operationId":"network_locations_delete_preview_list","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this network_ locations.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["network_locations"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/note_type/":{"get":{"operationId":"note_type_list","parameters":[{"in":"query","name":"description","schema":{"type":"string"}},{"in":"query","name":"id","schema":{"type":"integer"}},{"in":"query","name":"is_active","schema":{"type":"boolean"}},{"in":"query","name":"is_mandatory","schema":{"type":"boolean"}},{"in":"query","name":"is_single","schema":{"type":"boolean"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"name","schema":{"type":"string"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["note_type"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedNoteTypeList"}}},"description":""}}},"post":{"operationId":"note_type_create","tags":["note_type"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteTypeRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/NoteTypeRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/NoteTypeRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteType"}}},"description":""}}}},"/api/v2/note_type/{id}/":{"get":{"operationId":"note_type_retrieve","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this note_ type.","required":true}],"tags":["note_type"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteType"}}},"description":""}}},"put":{"operationId":"note_type_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this note_ type.","required":true}],"tags":["note_type"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteTypeRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/NoteTypeRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/NoteTypeRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteType"}}},"description":""}}},"patch":{"operationId":"note_type_partial_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this note_ type.","required":true}],"tags":["note_type"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedNoteTypeRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedNoteTypeRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedNoteTypeRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteType"}}},"description":""}}},"delete":{"operationId":"note_type_destroy","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this note_ type.","required":true}],"tags":["note_type"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/note_type/{id}/delete_preview/":{"get":{"operationId":"note_type_delete_preview_list","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this note_ type.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["note_type"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/notes/":{"get":{"operationId":"notes_list","parameters":[{"in":"query","name":"author","schema":{"type":"integer"}},{"in":"query","name":"date","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"edit_time","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"edited","schema":{"type":"boolean"}},{"in":"query","name":"editor","schema":{"type":"integer"}},{"in":"query","name":"entry","schema":{"type":"string"}},{"in":"query","name":"id","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"private","schema":{"type":"boolean"}}],"tags":["notes"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedNoteList"}}},"description":""}}}},"/api/v2/notes/{id}/":{"get":{"operationId":"notes_retrieve","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this notes.","required":true}],"tags":["notes"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Note"}}},"description":""}}},"put":{"operationId":"notes_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this notes.","required":true}],"tags":["notes"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/NoteRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/NoteRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Note"}}},"description":""}}},"patch":{"operationId":"notes_partial_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this notes.","required":true}],"tags":["notes"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedNoteRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedNoteRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedNoteRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Note"}}},"description":""}}}},"/api/v2/notification_webhooks/":{"get":{"operationId":"notification_webhooks_list","parameters":[{"in":"query","name":"first_error","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"header_name","schema":{"type":"string"}},{"in":"query","name":"header_value","schema":{"type":"string"}},{"in":"query","name":"last_error","schema":{"type":"string","format":"date-time"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"name","schema":{"type":"string"}},{"in":"query","name":"note","schema":{"type":"string"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"owner","schema":{"type":"integer"}},{"in":"query","name":"status","schema":{"type":"string","enum":["active","active_tmp","inactive_permanent","inactive_tmp"]},"description":"Status of the incoming webhook\n\n* `active` - Active\n* `active_tmp` - Active but 5xx (or similar) error detected\n* `inactive_tmp` - Temporary inactive because of 5xx (or similar) error\n* `inactive_permanent` - Permanently inactive"},{"in":"query","name":"url","schema":{"type":"string"}}],"tags":["notification_webhooks"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedNotificationWebhooksList"}}},"description":""}}},"post":{"operationId":"notification_webhooks_create","tags":["notification_webhooks"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationWebhooksRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/NotificationWebhooksRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/NotificationWebhooksRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationWebhooks"}}},"description":""}}}},"/api/v2/notification_webhooks/{id}/":{"get":{"operationId":"notification_webhooks_retrieve","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this notification_ webhooks.","required":true}],"tags":["notification_webhooks"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationWebhooks"}}},"description":""}}},"put":{"operationId":"notification_webhooks_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this notification_ webhooks.","required":true}],"tags":["notification_webhooks"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationWebhooksRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/NotificationWebhooksRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/NotificationWebhooksRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationWebhooks"}}},"description":""}}},"patch":{"operationId":"notification_webhooks_partial_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this notification_ webhooks.","required":true}],"tags":["notification_webhooks"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedNotificationWebhooksRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedNotificationWebhooksRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedNotificationWebhooksRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationWebhooks"}}},"description":""}}},"delete":{"operationId":"notification_webhooks_destroy","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this notification_ webhooks.","required":true}],"tags":["notification_webhooks"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/notification_webhooks/{id}/delete_preview/":{"get":{"operationId":"notification_webhooks_delete_preview_list","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this notification_ webhooks.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["notification_webhooks"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/notifications/":{"get":{"operationId":"notifications_list","parameters":[{"in":"query","name":"id","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["product","user"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"product","schema":{"type":"integer"}},{"in":"query","name":"template","schema":{"type":"boolean"}},{"in":"query","name":"user","schema":{"type":"integer"}}],"tags":["notifications"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedNotificationsList"}}},"description":""}}},"post":{"operationId":"notifications_create","tags":["notifications"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationsRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/NotificationsRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/NotificationsRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Notifications"}}},"description":""}}}},"/api/v2/notifications/{id}/":{"get":{"operationId":"notifications_retrieve","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this notifications.","required":true},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["product","user"]}},"description":"List of fields for which to prefetch model instances and add those to the response"}],"tags":["notifications"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Notifications"}}},"description":""}}},"put":{"operationId":"notifications_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this notifications.","required":true}],"tags":["notifications"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationsRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/NotificationsRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/NotificationsRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Notifications"}}},"description":""}}},"patch":{"operationId":"notifications_partial_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this notifications.","required":true}],"tags":["notifications"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedNotificationsRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedNotificationsRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedNotificationsRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Notifications"}}},"description":""}}},"delete":{"operationId":"notifications_destroy","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this notifications.","required":true}],"tags":["notifications"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/notifications/{id}/delete_preview/":{"get":{"operationId":"notifications_delete_preview_list","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this notifications.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["notifications"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/oa3/schema/":{"get":{"operationId":"oa3_schema_retrieve","description":"OpenApi3 schema for this API. Format can be selected via content negotiation.\n\n- YAML: application/vnd.oai.openapi\n- JSON: application/vnd.oai.openapi+json","parameters":[{"in":"query","name":"format","schema":{"type":"string","enum":["json","yaml"]}},{"in":"query","name":"lang","schema":{"type":"string","enum":["af","ar","ar-dz","ast","az","be","bg","bn","br","bs","ca","ckb","cs","cy","da","de","dsb","el","en","en-au","en-gb","eo","es","es-ar","es-co","es-mx","es-ni","es-ve","et","eu","fa","fi","fr","fy","ga","gd","gl","he","hi","hr","hsb","hu","hy","ia","id","ig","io","is","it","ja","ka","kab","kk","km","kn","ko","ky","lb","lt","lv","mk","ml","mn","mr","ms","my","nb","ne","nl","nn","os","pa","pl","pt","pt-br","ro","ru","sk","sl","sq","sr","sr-latn","sv","sw","ta","te","tg","th","tk","tr","tt","udm","ug","uk","ur","uz","vi","zh-hans","zh-hant"]}}],"tags":["oa3"],"security":[{"cookieAuth":[]},{"tokenAuth":[]},{}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":{}}},"application/vnd.oai.openapi":{"schema":{"type":"object","additionalProperties":{}}},"application/yaml":{"schema":{"type":"object","additionalProperties":{}}},"application/vnd.oai.openapi+json":{"schema":{"type":"object","additionalProperties":{}}}},"description":""}}}},"/api/v2/open_surveys/":{"get":{"operationId":"open_surveys_list","parameters":[{"in":"query","name":"exclude_id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"expiration_after","schema":{"type":"string","format":"date"}},{"in":"query","name":"expiration_before","schema":{"type":"string","format":"date"}},{"in":"query","name":"expiration_during","schema":{"type":"string"}},{"in":"query","name":"expiration_on","schema":{"type":"string"}},{"in":"query","name":"expiration_past_days","schema":{"type":"number"}},{"in":"query","name":"generated_after","schema":{"type":"string","format":"date"}},{"in":"query","name":"generated_before","schema":{"type":"string","format":"date"}},{"in":"query","name":"generated_during","schema":{"type":"string"}},{"in":"query","name":"generated_on","schema":{"type":"string"}},{"in":"query","name":"generated_past_days","schema":{"type":"number"}},{"in":"query","name":"id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"id_equals","schema":{"type":"integer"}},{"in":"query","name":"id_greater_than","schema":{"type":"integer"}},{"in":"query","name":"id_greater_than_equal_to","schema":{"type":"integer"}},{"in":"query","name":"id_in","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"id_less_than","schema":{"type":"integer"}},{"in":"query","name":"id_less_than_equal_to","schema":{"type":"integer"}},{"in":"query","name":"id_not_equals","schema":{"type":"integer"}},{"in":"query","name":"id_not_in","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"num_responses_equals","schema":{"type":"integer"}},{"in":"query","name":"num_responses_greater_than","schema":{"type":"integer"}},{"in":"query","name":"num_responses_greater_than_equal_to","schema":{"type":"integer"}},{"in":"query","name":"num_responses_in","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"num_responses_less_than","schema":{"type":"integer"}},{"in":"query","name":"num_responses_less_than_equal_to","schema":{"type":"integer"}},{"in":"query","name":"num_responses_not_equals","schema":{"type":"integer"}},{"in":"query","name":"num_responses_not_in","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-expiration","-generated","-id","-num_responses","-survey_name","expiration","generated","id","num_responses","survey_name"]}},"description":"Ordering\n\n* `id` - Id\n* `-id` - Id (descending)\n* `survey_name` - Survey name\n* `-survey_name` - Survey name (descending)\n* `num_responses` - Num responses\n* `-num_responses` - Num responses (descending)\n* `generated` - Generated\n* `-generated` - Generated (descending)\n* `expiration` - Expiration\n* `-expiration` - Expiration (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"search","schema":{"type":"string"},"description":"Search Across: survey__name"},{"in":"query","name":"survey","schema":{"type":"integer"}},{"in":"query","name":"survey_name_contains","schema":{"type":"string"}},{"in":"query","name":"survey_name_ends_with","schema":{"type":"string"}},{"in":"query","name":"survey_name_exact","schema":{"type":"string"}},{"in":"query","name":"survey_name_not_contains","schema":{"type":"string"}},{"in":"query","name":"survey_name_not_exact","schema":{"type":"string"}},{"in":"query","name":"survey_name_not_regex","schema":{"type":"string"}},{"in":"query","name":"survey_name_regex","schema":{"type":"string"}},{"in":"query","name":"survey_name_starts_with","schema":{"type":"string"}}],"tags":["open_surveys"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedProOpenSurveyList"}}},"description":""}}},"post":{"operationId":"open_surveys_create","tags":["open_surveys"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProOpenSurveyRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ProOpenSurveyRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ProOpenSurveyRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProOpenSurvey"}}},"description":""}}}},"/api/v2/open_surveys/{id}/":{"get":{"operationId":"open_surveys_retrieve","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this General Engagement Survey.","required":true}],"tags":["open_surveys"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProOpenSurvey"}}},"description":""}}},"put":{"operationId":"open_surveys_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this General Engagement Survey.","required":true}],"tags":["open_surveys"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProOpenSurveyRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ProOpenSurveyRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ProOpenSurveyRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProOpenSurvey"}}},"description":""}}},"patch":{"operationId":"open_surveys_partial_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this General Engagement Survey.","required":true}],"tags":["open_surveys"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedProOpenSurveyRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedProOpenSurveyRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedProOpenSurveyRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProOpenSurvey"}}},"description":""}}},"delete":{"operationId":"open_surveys_destroy","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this General Engagement Survey.","required":true}],"tags":["open_surveys"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/open_surveys/{id}/answer/":{"post":{"operationId":"open_surveys_answer_create","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this General Engagement Survey.","required":true}],"tags":["open_surveys"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProOpenSurveyRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ProOpenSurveyRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ProOpenSurveyRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProOpenSurvey"}}},"description":""}}}},"/api/v2/open_surveys/{id}/history/":{"get":{"operationId":"open_surveys_history_list","description":"Get audit log entries for an object with pagination.\n\nUses DojoEvents.objects.tracks(obj) to get events for the object itself,\nand DojoEvents.objects.references(obj) to get events for related objects\n(objects with foreign keys pointing to this object). Supports pagination, filtering, and sorting.\nAvailable at both /api/v2/ and /api/vue/ endpoints.\n\nArgs:\n    field_filter: Optional field name to filter by (e.g., \"finding_enrichment_settings\").\n                Only entries with changes to this field will be returned.","parameters":[{"in":"query","name":"exclude_id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"expiration_after","schema":{"type":"string","format":"date"}},{"in":"query","name":"expiration_before","schema":{"type":"string","format":"date"}},{"in":"query","name":"expiration_during","schema":{"type":"string"}},{"in":"query","name":"expiration_on","schema":{"type":"string"}},{"in":"query","name":"expiration_past_days","schema":{"type":"number"}},{"in":"query","name":"generated_after","schema":{"type":"string","format":"date"}},{"in":"query","name":"generated_before","schema":{"type":"string","format":"date"}},{"in":"query","name":"generated_during","schema":{"type":"string"}},{"in":"query","name":"generated_on","schema":{"type":"string"}},{"in":"query","name":"generated_past_days","schema":{"type":"number"}},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this General Engagement Survey.","required":true},{"in":"query","name":"id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"id_equals","schema":{"type":"integer"}},{"in":"query","name":"id_greater_than","schema":{"type":"integer"}},{"in":"query","name":"id_greater_than_equal_to","schema":{"type":"integer"}},{"in":"query","name":"id_in","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"id_less_than","schema":{"type":"integer"}},{"in":"query","name":"id_less_than_equal_to","schema":{"type":"integer"}},{"in":"query","name":"id_not_equals","schema":{"type":"integer"}},{"in":"query","name":"id_not_in","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"num_responses_equals","schema":{"type":"integer"}},{"in":"query","name":"num_responses_greater_than","schema":{"type":"integer"}},{"in":"query","name":"num_responses_greater_than_equal_to","schema":{"type":"integer"}},{"in":"query","name":"num_responses_in","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"num_responses_less_than","schema":{"type":"integer"}},{"in":"query","name":"num_responses_less_than_equal_to","schema":{"type":"integer"}},{"in":"query","name":"num_responses_not_equals","schema":{"type":"integer"}},{"in":"query","name":"num_responses_not_in","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-expiration","-generated","-id","-num_responses","-survey_name","expiration","generated","id","num_responses","survey_name"]}},"description":"Ordering\n\n* `id` - Id\n* `-id` - Id (descending)\n* `survey_name` - Survey name\n* `-survey_name` - Survey name (descending)\n* `num_responses` - Num responses\n* `-num_responses` - Num responses (descending)\n* `generated` - Generated\n* `-generated` - Generated (descending)\n* `expiration` - Expiration\n* `-expiration` - Expiration (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"search","schema":{"type":"string"},"description":"Search Across: survey__name"},{"in":"query","name":"survey","schema":{"type":"integer"}},{"in":"query","name":"survey_name_contains","schema":{"type":"string"}},{"in":"query","name":"survey_name_ends_with","schema":{"type":"string"}},{"in":"query","name":"survey_name_exact","schema":{"type":"string"}},{"in":"query","name":"survey_name_not_contains","schema":{"type":"string"}},{"in":"query","name":"survey_name_not_exact","schema":{"type":"string"}},{"in":"query","name":"survey_name_not_regex","schema":{"type":"string"}},{"in":"query","name":"survey_name_regex","schema":{"type":"string"}},{"in":"query","name":"survey_name_starts_with","schema":{"type":"string"}}],"tags":["open_surveys"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedAuditLogList"}}},"description":""}}}},"/api/v2/open_surveys/{id}/history/legacy/":{"get":{"operationId":"open_surveys_history_legacy_list","description":"Get legacy audit log for an object (django-auditlog entries) with pagination.\n\nSupports pagination, filtering, and sorting.\nAvailable at both /api/v2/ and /api/vue/ endpoints.","parameters":[{"in":"query","name":"exclude_id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"expiration_after","schema":{"type":"string","format":"date"}},{"in":"query","name":"expiration_before","schema":{"type":"string","format":"date"}},{"in":"query","name":"expiration_during","schema":{"type":"string"}},{"in":"query","name":"expiration_on","schema":{"type":"string"}},{"in":"query","name":"expiration_past_days","schema":{"type":"number"}},{"in":"query","name":"generated_after","schema":{"type":"string","format":"date"}},{"in":"query","name":"generated_before","schema":{"type":"string","format":"date"}},{"in":"query","name":"generated_during","schema":{"type":"string"}},{"in":"query","name":"generated_on","schema":{"type":"string"}},{"in":"query","name":"generated_past_days","schema":{"type":"number"}},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this General Engagement Survey.","required":true},{"in":"query","name":"id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"id_equals","schema":{"type":"integer"}},{"in":"query","name":"id_greater_than","schema":{"type":"integer"}},{"in":"query","name":"id_greater_than_equal_to","schema":{"type":"integer"}},{"in":"query","name":"id_in","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"id_less_than","schema":{"type":"integer"}},{"in":"query","name":"id_less_than_equal_to","schema":{"type":"integer"}},{"in":"query","name":"id_not_equals","schema":{"type":"integer"}},{"in":"query","name":"id_not_in","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"num_responses_equals","schema":{"type":"integer"}},{"in":"query","name":"num_responses_greater_than","schema":{"type":"integer"}},{"in":"query","name":"num_responses_greater_than_equal_to","schema":{"type":"integer"}},{"in":"query","name":"num_responses_in","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"num_responses_less_than","schema":{"type":"integer"}},{"in":"query","name":"num_responses_less_than_equal_to","schema":{"type":"integer"}},{"in":"query","name":"num_responses_not_equals","schema":{"type":"integer"}},{"in":"query","name":"num_responses_not_in","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-expiration","-generated","-id","-num_responses","-survey_name","expiration","generated","id","num_responses","survey_name"]}},"description":"Ordering\n\n* `id` - Id\n* `-id` - Id (descending)\n* `survey_name` - Survey name\n* `-survey_name` - Survey name (descending)\n* `num_responses` - Num responses\n* `-num_responses` - Num responses (descending)\n* `generated` - Generated\n* `-generated` - Generated (descending)\n* `expiration` - Expiration\n* `-expiration` - Expiration (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"search","schema":{"type":"string"},"description":"Search Across: survey__name"},{"in":"query","name":"survey","schema":{"type":"integer"}},{"in":"query","name":"survey_name_contains","schema":{"type":"string"}},{"in":"query","name":"survey_name_ends_with","schema":{"type":"string"}},{"in":"query","name":"survey_name_exact","schema":{"type":"string"}},{"in":"query","name":"survey_name_not_contains","schema":{"type":"string"}},{"in":"query","name":"survey_name_not_exact","schema":{"type":"string"}},{"in":"query","name":"survey_name_not_regex","schema":{"type":"string"}},{"in":"query","name":"survey_name_regex","schema":{"type":"string"}},{"in":"query","name":"survey_name_starts_with","schema":{"type":"string"}}],"tags":["open_surveys"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedLegacyAuditLogList"}}},"description":""}}}},"/api/v2/open_surveys/{id}/history/legacy/count/":{"get":{"operationId":"open_surveys_history_legacy_count_retrieve","description":"Get the total count of legacy audit log entries for an object.\n\nApplies the same filters as history_legacy (date filter, LegacyAuditLogFilter)\nto ensure the count matches what users will see when viewing the legacy history page.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this General Engagement Survey.","required":true}],"tags":["open_surveys"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"integer"}}}}},"description":""}}}},"/api/v2/organization_groups/":{"get":{"operationId":"organization_groups_list","description":"``list()``/``retrieve()`` mirroring the OS prefetch mixins but using\n:class:`~pro.api_helpers.prefetcher.ProPrefetcher`, so prefetch can resolve\nserializers for Pro-owned FK targets (``Role``, ``Dojo_Group``).\n\nThe OS mixins hardcode ``_Prefetcher()`` with no override seam, and\n``open_source/`` is gitignored (rebuilt by ``build.sh``) so we can't add one\nthere. The two method bodies below are copied verbatim from\n``dojo/api_v2/prefetch/mixins.py`` — the only change is the prefetcher class —\nand must be kept in sync with it.\n\nThis is a plain mixin (it does not re-inherit ``PrefetchListMixin`` /\n``PrefetchRetrieveMixin`` — that would clash with the same bases reached via\n``PrefetchDojoModelViewSet`` and break C3 MRO). Place it *before*\n``PrefetchDojoModelViewSet`` in a viewset's bases so these methods win.","parameters":[{"in":"query","name":"group","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"group_id","schema":{"type":"integer"}},{"in":"query","name":"id","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"organization_id","schema":{"type":"integer"}},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["product_type"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"product_type_id","schema":{"type":"integer"}},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"},{"in":"query","name":"role","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"search","schema":{"type":"string"}}],"tags":["organization_groups"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedEnhancedProductTypeGroupList"}}},"description":""}}},"post":{"operationId":"organization_groups_create","description":"``list()``/``retrieve()`` mirroring the OS prefetch mixins but using\n:class:`~pro.api_helpers.prefetcher.ProPrefetcher`, so prefetch can resolve\nserializers for Pro-owned FK targets (``Role``, ``Dojo_Group``).\n\nThe OS mixins hardcode ``_Prefetcher()`` with no override seam, and\n``open_source/`` is gitignored (rebuilt by ``build.sh``) so we can't add one\nthere. The two method bodies below are copied verbatim from\n``dojo/api_v2/prefetch/mixins.py`` — the only change is the prefetcher class —\nand must be kept in sync with it.\n\nThis is a plain mixin (it does not re-inherit ``PrefetchListMixin`` /\n``PrefetchRetrieveMixin`` — that would clash with the same bases reached via\n``PrefetchDojoModelViewSet`` and break C3 MRO). Place it *before*\n``PrefetchDojoModelViewSet`` in a viewset's bases so these methods win.","tags":["organization_groups"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedProductTypeGroupRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/EnhancedProductTypeGroupRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/EnhancedProductTypeGroupRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedProductTypeGroup"}}},"description":""}}}},"/api/v2/organization_groups/{id}/":{"get":{"operationId":"organization_groups_retrieve","description":"``list()``/``retrieve()`` mirroring the OS prefetch mixins but using\n:class:`~pro.api_helpers.prefetcher.ProPrefetcher`, so prefetch can resolve\nserializers for Pro-owned FK targets (``Role``, ``Dojo_Group``).\n\nThe OS mixins hardcode ``_Prefetcher()`` with no override seam, and\n``open_source/`` is gitignored (rebuilt by ``build.sh``) so we can't add one\nthere. The two method bodies below are copied verbatim from\n``dojo/api_v2/prefetch/mixins.py`` — the only change is the prefetcher class —\nand must be kept in sync with it.\n\nThis is a plain mixin (it does not re-inherit ``PrefetchListMixin`` /\n``PrefetchRetrieveMixin`` — that would clash with the same bases reached via\n``PrefetchDojoModelViewSet`` and break C3 MRO). Place it *before*\n``PrefetchDojoModelViewSet`` in a viewset's bases so these methods win.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ type_ group.","required":true},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["product_type"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"}],"tags":["organization_groups"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedProductTypeGroup"}}},"description":""}}},"put":{"operationId":"organization_groups_update","description":"``list()``/``retrieve()`` mirroring the OS prefetch mixins but using\n:class:`~pro.api_helpers.prefetcher.ProPrefetcher`, so prefetch can resolve\nserializers for Pro-owned FK targets (``Role``, ``Dojo_Group``).\n\nThe OS mixins hardcode ``_Prefetcher()`` with no override seam, and\n``open_source/`` is gitignored (rebuilt by ``build.sh``) so we can't add one\nthere. The two method bodies below are copied verbatim from\n``dojo/api_v2/prefetch/mixins.py`` — the only change is the prefetcher class —\nand must be kept in sync with it.\n\nThis is a plain mixin (it does not re-inherit ``PrefetchListMixin`` /\n``PrefetchRetrieveMixin`` — that would clash with the same bases reached via\n``PrefetchDojoModelViewSet`` and break C3 MRO). Place it *before*\n``PrefetchDojoModelViewSet`` in a viewset's bases so these methods win.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ type_ group.","required":true}],"tags":["organization_groups"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedProductTypeGroupRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/EnhancedProductTypeGroupRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/EnhancedProductTypeGroupRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedProductTypeGroup"}}},"description":""}}},"delete":{"operationId":"organization_groups_destroy","description":"``list()``/``retrieve()`` mirroring the OS prefetch mixins but using\n:class:`~pro.api_helpers.prefetcher.ProPrefetcher`, so prefetch can resolve\nserializers for Pro-owned FK targets (``Role``, ``Dojo_Group``).\n\nThe OS mixins hardcode ``_Prefetcher()`` with no override seam, and\n``open_source/`` is gitignored (rebuilt by ``build.sh``) so we can't add one\nthere. The two method bodies below are copied verbatim from\n``dojo/api_v2/prefetch/mixins.py`` — the only change is the prefetcher class —\nand must be kept in sync with it.\n\nThis is a plain mixin (it does not re-inherit ``PrefetchListMixin`` /\n``PrefetchRetrieveMixin`` — that would clash with the same bases reached via\n``PrefetchDojoModelViewSet`` and break C3 MRO). Place it *before*\n``PrefetchDojoModelViewSet`` in a viewset's bases so these methods win.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ type_ group.","required":true}],"tags":["organization_groups"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/organization_groups/{id}/delete_preview/":{"get":{"operationId":"organization_groups_delete_preview_list","description":"``list()``/``retrieve()`` mirroring the OS prefetch mixins but using\n:class:`~pro.api_helpers.prefetcher.ProPrefetcher`, so prefetch can resolve\nserializers for Pro-owned FK targets (``Role``, ``Dojo_Group``).\n\nThe OS mixins hardcode ``_Prefetcher()`` with no override seam, and\n``open_source/`` is gitignored (rebuilt by ``build.sh``) so we can't add one\nthere. The two method bodies below are copied verbatim from\n``dojo/api_v2/prefetch/mixins.py`` — the only change is the prefetcher class —\nand must be kept in sync with it.\n\nThis is a plain mixin (it does not re-inherit ``PrefetchListMixin`` /\n``PrefetchRetrieveMixin`` — that would clash with the same bases reached via\n``PrefetchDojoModelViewSet`` and break C3 MRO). Place it *before*\n``PrefetchDojoModelViewSet`` in a viewset's bases so these methods win.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ type_ group.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["organization_groups"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/organization_groups/{id}/history/":{"get":{"operationId":"organization_groups_history_list","description":"Get audit log entries for an object with pagination.\n\nUses DojoEvents.objects.tracks(obj) to get events for the object itself,\nand DojoEvents.objects.references(obj) to get events for related objects\n(objects with foreign keys pointing to this object). Supports pagination, filtering, and sorting.\nAvailable at both /api/v2/ and /api/vue/ endpoints.\n\nArgs:\n    field_filter: Optional field name to filter by (e.g., \"finding_enrichment_settings\").\n                Only entries with changes to this field will be returned.","parameters":[{"in":"query","name":"group","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"group_id","schema":{"type":"integer"}},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ type_ group.","required":true},{"in":"query","name":"id","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"organization_id","schema":{"type":"integer"}},{"in":"query","name":"product_type_id","schema":{"type":"integer"}},{"in":"query","name":"role","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"search","schema":{"type":"string"}}],"tags":["organization_groups"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedAuditLogList"}}},"description":""}}}},"/api/v2/organization_groups/{id}/history/legacy/":{"get":{"operationId":"organization_groups_history_legacy_list","description":"Get legacy audit log for an object (django-auditlog entries) with pagination.\n\nSupports pagination, filtering, and sorting.\nAvailable at both /api/v2/ and /api/vue/ endpoints.","parameters":[{"in":"query","name":"group","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"group_id","schema":{"type":"integer"}},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ type_ group.","required":true},{"in":"query","name":"id","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"organization_id","schema":{"type":"integer"}},{"in":"query","name":"product_type_id","schema":{"type":"integer"}},{"in":"query","name":"role","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"search","schema":{"type":"string"}}],"tags":["organization_groups"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedLegacyAuditLogList"}}},"description":""}}}},"/api/v2/organization_groups/{id}/history/legacy/count/":{"get":{"operationId":"organization_groups_history_legacy_count_retrieve","description":"Get the total count of legacy audit log entries for an object.\n\nApplies the same filters as history_legacy (date filter, LegacyAuditLogFilter)\nto ensure the count matches what users will see when viewing the legacy history page.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ type_ group.","required":true}],"tags":["organization_groups"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"integer"}}}}},"description":""}}}},"/api/v2/organization_members/":{"get":{"operationId":"organization_members_list","description":"``list()``/``retrieve()`` mirroring the OS prefetch mixins but using\n:class:`~pro.api_helpers.prefetcher.ProPrefetcher`, so prefetch can resolve\nserializers for Pro-owned FK targets (``Role``, ``Dojo_Group``).\n\nThe OS mixins hardcode ``_Prefetcher()`` with no override seam, and\n``open_source/`` is gitignored (rebuilt by ``build.sh``) so we can't add one\nthere. The two method bodies below are copied verbatim from\n``dojo/api_v2/prefetch/mixins.py`` — the only change is the prefetcher class —\nand must be kept in sync with it.\n\nThis is a plain mixin (it does not re-inherit ``PrefetchListMixin`` /\n``PrefetchRetrieveMixin`` — that would clash with the same bases reached via\n``PrefetchDojoModelViewSet`` and break C3 MRO). Place it *before*\n``PrefetchDojoModelViewSet`` in a viewset's bases so these methods win.","parameters":[{"in":"query","name":"id","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"organization_id","schema":{"type":"integer"}},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["product_type","user"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"product_type_id","schema":{"type":"integer"}},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"},{"in":"query","name":"role","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"search","schema":{"type":"string"}},{"in":"query","name":"user","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"user_id","schema":{"type":"integer"}}],"tags":["organization_members"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedEnhancedProductTypeMemberList"}}},"description":""}}},"post":{"operationId":"organization_members_create","description":"``list()``/``retrieve()`` mirroring the OS prefetch mixins but using\n:class:`~pro.api_helpers.prefetcher.ProPrefetcher`, so prefetch can resolve\nserializers for Pro-owned FK targets (``Role``, ``Dojo_Group``).\n\nThe OS mixins hardcode ``_Prefetcher()`` with no override seam, and\n``open_source/`` is gitignored (rebuilt by ``build.sh``) so we can't add one\nthere. The two method bodies below are copied verbatim from\n``dojo/api_v2/prefetch/mixins.py`` — the only change is the prefetcher class —\nand must be kept in sync with it.\n\nThis is a plain mixin (it does not re-inherit ``PrefetchListMixin`` /\n``PrefetchRetrieveMixin`` — that would clash with the same bases reached via\n``PrefetchDojoModelViewSet`` and break C3 MRO). Place it *before*\n``PrefetchDojoModelViewSet`` in a viewset's bases so these methods win.","tags":["organization_members"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedProductTypeMemberRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/EnhancedProductTypeMemberRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/EnhancedProductTypeMemberRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedProductTypeMember"}}},"description":""}}}},"/api/v2/organization_members/{id}/":{"get":{"operationId":"organization_members_retrieve","description":"``list()``/``retrieve()`` mirroring the OS prefetch mixins but using\n:class:`~pro.api_helpers.prefetcher.ProPrefetcher`, so prefetch can resolve\nserializers for Pro-owned FK targets (``Role``, ``Dojo_Group``).\n\nThe OS mixins hardcode ``_Prefetcher()`` with no override seam, and\n``open_source/`` is gitignored (rebuilt by ``build.sh``) so we can't add one\nthere. The two method bodies below are copied verbatim from\n``dojo/api_v2/prefetch/mixins.py`` — the only change is the prefetcher class —\nand must be kept in sync with it.\n\nThis is a plain mixin (it does not re-inherit ``PrefetchListMixin`` /\n``PrefetchRetrieveMixin`` — that would clash with the same bases reached via\n``PrefetchDojoModelViewSet`` and break C3 MRO). Place it *before*\n``PrefetchDojoModelViewSet`` in a viewset's bases so these methods win.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ type_ member.","required":true},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["product_type","user"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"}],"tags":["organization_members"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedProductTypeMember"}}},"description":""}}},"put":{"operationId":"organization_members_update","description":"``list()``/``retrieve()`` mirroring the OS prefetch mixins but using\n:class:`~pro.api_helpers.prefetcher.ProPrefetcher`, so prefetch can resolve\nserializers for Pro-owned FK targets (``Role``, ``Dojo_Group``).\n\nThe OS mixins hardcode ``_Prefetcher()`` with no override seam, and\n``open_source/`` is gitignored (rebuilt by ``build.sh``) so we can't add one\nthere. The two method bodies below are copied verbatim from\n``dojo/api_v2/prefetch/mixins.py`` — the only change is the prefetcher class —\nand must be kept in sync with it.\n\nThis is a plain mixin (it does not re-inherit ``PrefetchListMixin`` /\n``PrefetchRetrieveMixin`` — that would clash with the same bases reached via\n``PrefetchDojoModelViewSet`` and break C3 MRO). Place it *before*\n``PrefetchDojoModelViewSet`` in a viewset's bases so these methods win.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ type_ member.","required":true}],"tags":["organization_members"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedProductTypeMemberRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/EnhancedProductTypeMemberRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/EnhancedProductTypeMemberRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedProductTypeMember"}}},"description":""}}},"delete":{"operationId":"organization_members_destroy","description":"``list()``/``retrieve()`` mirroring the OS prefetch mixins but using\n:class:`~pro.api_helpers.prefetcher.ProPrefetcher`, so prefetch can resolve\nserializers for Pro-owned FK targets (``Role``, ``Dojo_Group``).\n\nThe OS mixins hardcode ``_Prefetcher()`` with no override seam, and\n``open_source/`` is gitignored (rebuilt by ``build.sh``) so we can't add one\nthere. The two method bodies below are copied verbatim from\n``dojo/api_v2/prefetch/mixins.py`` — the only change is the prefetcher class —\nand must be kept in sync with it.\n\nThis is a plain mixin (it does not re-inherit ``PrefetchListMixin`` /\n``PrefetchRetrieveMixin`` — that would clash with the same bases reached via\n``PrefetchDojoModelViewSet`` and break C3 MRO). Place it *before*\n``PrefetchDojoModelViewSet`` in a viewset's bases so these methods win.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ type_ member.","required":true}],"tags":["organization_members"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/organization_members/{id}/delete_preview/":{"get":{"operationId":"organization_members_delete_preview_list","description":"``list()``/``retrieve()`` mirroring the OS prefetch mixins but using\n:class:`~pro.api_helpers.prefetcher.ProPrefetcher`, so prefetch can resolve\nserializers for Pro-owned FK targets (``Role``, ``Dojo_Group``).\n\nThe OS mixins hardcode ``_Prefetcher()`` with no override seam, and\n``open_source/`` is gitignored (rebuilt by ``build.sh``) so we can't add one\nthere. The two method bodies below are copied verbatim from\n``dojo/api_v2/prefetch/mixins.py`` — the only change is the prefetcher class —\nand must be kept in sync with it.\n\nThis is a plain mixin (it does not re-inherit ``PrefetchListMixin`` /\n``PrefetchRetrieveMixin`` — that would clash with the same bases reached via\n``PrefetchDojoModelViewSet`` and break C3 MRO). Place it *before*\n``PrefetchDojoModelViewSet`` in a viewset's bases so these methods win.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ type_ member.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["organization_members"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/organizations/":{"get":{"operationId":"organizations_list","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"query","name":"created","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"critical_asset","schema":{"type":"boolean"}},{"in":"query","name":"id","schema":{"type":"integer"}},{"in":"query","name":"key_asset","schema":{"type":"boolean"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"name","schema":{"type":"string"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["authorized_users"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"},{"in":"query","name":"updated","schema":{"type":"string","format":"date-time"}}],"tags":["organizations"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedEnhancedOrganizationList"}}},"description":""}}},"post":{"operationId":"organizations_create","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","tags":["organizations"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedOrganizationRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/EnhancedOrganizationRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/EnhancedOrganizationRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedOrganization"}}},"description":""}}}},"/api/v2/organizations/{id}/":{"get":{"operationId":"organizations_retrieve","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ type.","required":true},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["authorized_users"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"}],"tags":["organizations"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedOrganization"}}},"description":""}}},"put":{"operationId":"organizations_update","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ type.","required":true}],"tags":["organizations"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedOrganizationRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/EnhancedOrganizationRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/EnhancedOrganizationRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedOrganization"}}},"description":""}}},"patch":{"operationId":"organizations_partial_update","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ type.","required":true}],"tags":["organizations"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedEnhancedOrganizationRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedEnhancedOrganizationRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedEnhancedOrganizationRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedOrganization"}}},"description":""}}},"delete":{"operationId":"organizations_destroy","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ type.","required":true}],"tags":["organizations"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/organizations/{id}/delete_preview/":{"get":{"operationId":"organizations_delete_preview_list","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ type.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["organizations"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/organizations/{id}/generate_report/":{"post":{"operationId":"organizations_generate_report_create","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ type.","required":true}],"tags":["organizations"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportGenerateOptionRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ReportGenerateOptionRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ReportGenerateOptionRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportGenerate"}}},"description":""}}}},"/api/v2/organizations/{id}/history/":{"get":{"operationId":"organizations_history_list","description":"Get audit log entries for an object with pagination.\n\nUses DojoEvents.objects.tracks(obj) to get events for the object itself,\nand DojoEvents.objects.references(obj) to get events for related objects\n(objects with foreign keys pointing to this object). Supports pagination, filtering, and sorting.\nAvailable at both /api/v2/ and /api/vue/ endpoints.\n\nArgs:\n    field_filter: Optional field name to filter by (e.g., \"finding_enrichment_settings\").\n                Only entries with changes to this field will be returned.","parameters":[{"in":"query","name":"created","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"critical_asset","schema":{"type":"boolean"}},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ type.","required":true},{"in":"query","name":"id","schema":{"type":"integer"}},{"in":"query","name":"key_asset","schema":{"type":"boolean"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"name","schema":{"type":"string"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"updated","schema":{"type":"string","format":"date-time"}}],"tags":["organizations"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedAuditLogList"}}},"description":""}}}},"/api/v2/organizations/{id}/history/legacy/":{"get":{"operationId":"organizations_history_legacy_list","description":"Get legacy audit log for an object (django-auditlog entries) with pagination.\n\nSupports pagination, filtering, and sorting.\nAvailable at both /api/v2/ and /api/vue/ endpoints.","parameters":[{"in":"query","name":"created","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"critical_asset","schema":{"type":"boolean"}},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ type.","required":true},{"in":"query","name":"id","schema":{"type":"integer"}},{"in":"query","name":"key_asset","schema":{"type":"boolean"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"name","schema":{"type":"string"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"updated","schema":{"type":"string","format":"date-time"}}],"tags":["organizations"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedLegacyAuditLogList"}}},"description":""}}}},"/api/v2/organizations/{id}/history/legacy/count/":{"get":{"operationId":"organizations_history_legacy_count_retrieve","description":"Get the total count of legacy audit log entries for an object.\n\nApplies the same filters as history_legacy (date filter, LegacyAuditLogFilter)\nto ensure the count matches what users will see when viewing the legacy history page.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ type.","required":true}],"tags":["organizations"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"integer"}}}}},"description":""}}}},"/api/v2/prioritization_engines/":{"get":{"operationId":"prioritization_engines_list","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"}],"tags":["prioritization_engines"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedPrioritizationEngineList"}}},"description":""}}},"post":{"operationId":"prioritization_engines_create","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","tags":["prioritization_engines"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrioritizationEngineRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PrioritizationEngineRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PrioritizationEngineRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrioritizationEngine"}}},"description":""}}}},"/api/v2/prioritization_engines/{id}/":{"get":{"operationId":"prioritization_engines_retrieve","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Prioritization Engine.","required":true},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"}],"tags":["prioritization_engines"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrioritizationEngine"}}},"description":""}}},"put":{"operationId":"prioritization_engines_update","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Prioritization Engine.","required":true}],"tags":["prioritization_engines"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrioritizationEngineRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PrioritizationEngineRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PrioritizationEngineRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrioritizationEngine"}}},"description":""}}},"patch":{"operationId":"prioritization_engines_partial_update","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Prioritization Engine.","required":true}],"tags":["prioritization_engines"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedPrioritizationEngineRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedPrioritizationEngineRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedPrioritizationEngineRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrioritizationEngine"}}},"description":""}}},"delete":{"operationId":"prioritization_engines_destroy","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Prioritization Engine.","required":true}],"tags":["prioritization_engines"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/priority_insights/active_age_by_risk_category/":{"get":{"operationId":"priority_insights_active_age_by_risk_category_retrieve","description":"Adds self.cached_metric(...) to a metrics viewset.\n\nUsage inside an @action:\n\n    data = self.cached_metric(\n        request,\n        \"products_by_risk_category\",\n        lambda: list(MetricsHelpers.get_products_by_risk_category(findings)),\n    )\n    return Response({\"products_by_risk_category\": data})\n\nThe compute callable MUST return a materialized, JSON-serializable structure\n(e.g. list(queryset), not a lazy queryset) so it can be stored in Redis.","tags":["priority_insights"],"security":[{"tokenAuth":[]}],"responses":{"200":{"description":"No response body"}}}},"/api/v2/priority_insights/average_risk_over_time/":{"get":{"operationId":"priority_insights_average_risk_over_time_retrieve","description":"Adds self.cached_metric(...) to a metrics viewset.\n\nUsage inside an @action:\n\n    data = self.cached_metric(\n        request,\n        \"products_by_risk_category\",\n        lambda: list(MetricsHelpers.get_products_by_risk_category(findings)),\n    )\n    return Response({\"products_by_risk_category\": data})\n\nThe compute callable MUST return a materialized, JSON-serializable structure\n(e.g. list(queryset), not a lazy queryset) so it can be stored in Redis.","tags":["priority_insights"],"security":[{"tokenAuth":[]}],"responses":{"200":{"description":"No response body"}}}},"/api/v2/priority_insights/components_by_risk_category/":{"get":{"operationId":"priority_insights_components_by_risk_category_retrieve","description":"Adds self.cached_metric(...) to a metrics viewset.\n\nUsage inside an @action:\n\n    data = self.cached_metric(\n        request,\n        \"products_by_risk_category\",\n        lambda: list(MetricsHelpers.get_products_by_risk_category(findings)),\n    )\n    return Response({\"products_by_risk_category\": data})\n\nThe compute callable MUST return a materialized, JSON-serializable structure\n(e.g. list(queryset), not a lazy queryset) so it can be stored in Redis.","tags":["priority_insights"],"security":[{"tokenAuth":[]}],"responses":{"200":{"description":"No response body"}}}},"/api/v2/priority_insights/endpoint_hosts_by_risk_category/":{"get":{"operationId":"priority_insights_endpoint_hosts_by_risk_category_retrieve","description":"Adds self.cached_metric(...) to a metrics viewset.\n\nUsage inside an @action:\n\n    data = self.cached_metric(\n        request,\n        \"products_by_risk_category\",\n        lambda: list(MetricsHelpers.get_products_by_risk_category(findings)),\n    )\n    return Response({\"products_by_risk_category\": data})\n\nThe compute callable MUST return a materialized, JSON-serializable structure\n(e.g. list(queryset), not a lazy queryset) so it can be stored in Redis.","tags":["priority_insights"],"security":[{"tokenAuth":[]}],"responses":{"200":{"description":"No response body"}}}},"/api/v2/priority_insights/mitigated_outside_of_sla_by_risk/":{"get":{"operationId":"priority_insights_mitigated_outside_of_sla_by_risk_retrieve","description":"Adds self.cached_metric(...) to a metrics viewset.\n\nUsage inside an @action:\n\n    data = self.cached_metric(\n        request,\n        \"products_by_risk_category\",\n        lambda: list(MetricsHelpers.get_products_by_risk_category(findings)),\n    )\n    return Response({\"products_by_risk_category\": data})\n\nThe compute callable MUST return a materialized, JSON-serializable structure\n(e.g. list(queryset), not a lazy queryset) so it can be stored in Redis.","tags":["priority_insights"],"security":[{"tokenAuth":[]}],"responses":{"200":{"description":"No response body"}}}},"/api/v2/priority_insights/mitigated_within_sla_by_risk/":{"get":{"operationId":"priority_insights_mitigated_within_sla_by_risk_retrieve","description":"Adds self.cached_metric(...) to a metrics viewset.\n\nUsage inside an @action:\n\n    data = self.cached_metric(\n        request,\n        \"products_by_risk_category\",\n        lambda: list(MetricsHelpers.get_products_by_risk_category(findings)),\n    )\n    return Response({\"products_by_risk_category\": data})\n\nThe compute callable MUST return a materialized, JSON-serializable structure\n(e.g. list(queryset), not a lazy queryset) so it can be stored in Redis.","tags":["priority_insights"],"security":[{"tokenAuth":[]}],"responses":{"200":{"description":"No response body"}}}},"/api/v2/priority_insights/priority_distribution/":{"get":{"operationId":"priority_insights_priority_distribution_retrieve","description":"Adds self.cached_metric(...) to a metrics viewset.\n\nUsage inside an @action:\n\n    data = self.cached_metric(\n        request,\n        \"products_by_risk_category\",\n        lambda: list(MetricsHelpers.get_products_by_risk_category(findings)),\n    )\n    return Response({\"products_by_risk_category\": data})\n\nThe compute callable MUST return a materialized, JSON-serializable structure\n(e.g. list(queryset), not a lazy queryset) so it can be stored in Redis.","tags":["priority_insights"],"security":[{"tokenAuth":[]}],"responses":{"200":{"description":"No response body"}}}},"/api/v2/priority_insights/products_by_risk_category/":{"get":{"operationId":"priority_insights_products_by_risk_category_retrieve","description":"Adds self.cached_metric(...) to a metrics viewset.\n\nUsage inside an @action:\n\n    data = self.cached_metric(\n        request,\n        \"products_by_risk_category\",\n        lambda: list(MetricsHelpers.get_products_by_risk_category(findings)),\n    )\n    return Response({\"products_by_risk_category\": data})\n\nThe compute callable MUST return a materialized, JSON-serializable structure\n(e.g. list(queryset), not a lazy queryset) so it can be stored in Redis.","tags":["priority_insights"],"security":[{"tokenAuth":[]}],"responses":{"200":{"description":"No response body"}}}},"/api/v2/priority_insights/risk_accepted_over_time/":{"get":{"operationId":"priority_insights_risk_accepted_over_time_retrieve","description":"Adds self.cached_metric(...) to a metrics viewset.\n\nUsage inside an @action:\n\n    data = self.cached_metric(\n        request,\n        \"products_by_risk_category\",\n        lambda: list(MetricsHelpers.get_products_by_risk_category(findings)),\n    )\n    return Response({\"products_by_risk_category\": data})\n\nThe compute callable MUST return a materialized, JSON-serializable structure\n(e.g. list(queryset), not a lazy queryset) so it can be stored in Redis.","tags":["priority_insights"],"security":[{"tokenAuth":[]}],"responses":{"200":{"description":"No response body"}}}},"/api/v2/priority_insights/summary/":{"get":{"operationId":"priority_insights_summary_retrieve","description":"basic metrics counts","tags":["priority_insights"],"security":[{"tokenAuth":[]}],"responses":{"200":{"description":"No response body"}}}},"/api/v2/priority_insights/total_by_risk_category/":{"get":{"operationId":"priority_insights_total_by_risk_category_retrieve","description":"Adds self.cached_metric(...) to a metrics viewset.\n\nUsage inside an @action:\n\n    data = self.cached_metric(\n        request,\n        \"products_by_risk_category\",\n        lambda: list(MetricsHelpers.get_products_by_risk_category(findings)),\n    )\n    return Response({\"products_by_risk_category\": data})\n\nThe compute callable MUST return a materialized, JSON-serializable structure\n(e.g. list(queryset), not a lazy queryset) so it can be stored in Redis.","tags":["priority_insights"],"security":[{"tokenAuth":[]}],"responses":{"200":{"description":"No response body"}}}},"/api/v2/product_api_scan_configurations/":{"get":{"operationId":"product_api_scan_configurations_list","parameters":[{"in":"query","name":"id","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["product","tool_configuration"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"product","schema":{"type":"integer"}},{"in":"query","name":"service_key_1","schema":{"type":"string"}},{"in":"query","name":"service_key_2","schema":{"type":"string"}},{"in":"query","name":"service_key_3","schema":{"type":"string"}},{"in":"query","name":"tool_configuration","schema":{"type":"integer"}}],"tags":["product_api_scan_configurations"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedProductAPIScanConfigurationList"}}},"description":""}}},"post":{"operationId":"product_api_scan_configurations_create","tags":["product_api_scan_configurations"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductAPIScanConfigurationRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ProductAPIScanConfigurationRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ProductAPIScanConfigurationRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductAPIScanConfiguration"}}},"description":""}}}},"/api/v2/product_api_scan_configurations/{id}/":{"get":{"operationId":"product_api_scan_configurations_retrieve","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ap i_ scan_ configuration.","required":true},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["product","tool_configuration"]}},"description":"List of fields for which to prefetch model instances and add those to the response"}],"tags":["product_api_scan_configurations"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductAPIScanConfiguration"}}},"description":""}}},"put":{"operationId":"product_api_scan_configurations_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ap i_ scan_ configuration.","required":true}],"tags":["product_api_scan_configurations"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductAPIScanConfigurationRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ProductAPIScanConfigurationRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ProductAPIScanConfigurationRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductAPIScanConfiguration"}}},"description":""}}},"patch":{"operationId":"product_api_scan_configurations_partial_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ap i_ scan_ configuration.","required":true}],"tags":["product_api_scan_configurations"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedProductAPIScanConfigurationRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedProductAPIScanConfigurationRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedProductAPIScanConfigurationRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductAPIScanConfiguration"}}},"description":""}}},"delete":{"operationId":"product_api_scan_configurations_destroy","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ap i_ scan_ configuration.","required":true}],"tags":["product_api_scan_configurations"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/product_api_scan_configurations/{id}/delete_preview/":{"get":{"operationId":"product_api_scan_configurations_delete_preview_list","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ap i_ scan_ configuration.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["product_api_scan_configurations"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/product_groups/":{"get":{"operationId":"product_groups_list","description":"``list()``/``retrieve()`` mirroring the OS prefetch mixins but using\n:class:`~pro.api_helpers.prefetcher.ProPrefetcher`, so prefetch can resolve\nserializers for Pro-owned FK targets (``Role``, ``Dojo_Group``).\n\nThe OS mixins hardcode ``_Prefetcher()`` with no override seam, and\n``open_source/`` is gitignored (rebuilt by ``build.sh``) so we can't add one\nthere. The two method bodies below are copied verbatim from\n``dojo/api_v2/prefetch/mixins.py`` — the only change is the prefetcher class —\nand must be kept in sync with it.\n\nThis is a plain mixin (it does not re-inherit ``PrefetchListMixin`` /\n``PrefetchRetrieveMixin`` — that would clash with the same bases reached via\n``PrefetchDojoModelViewSet`` and break C3 MRO). Place it *before*\n``PrefetchDojoModelViewSet`` in a viewset's bases so these methods win.","parameters":[{"in":"query","name":"asset_id","schema":{"type":"integer"}},{"in":"query","name":"group","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"group_id","schema":{"type":"integer"}},{"in":"query","name":"id","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["product"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"product_id","schema":{"type":"integer"}},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"},{"in":"query","name":"role","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"search","schema":{"type":"string"}}],"tags":["product_groups"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedEnhancedProductGroupList"}}},"description":""}}},"post":{"operationId":"product_groups_create","description":"``list()``/``retrieve()`` mirroring the OS prefetch mixins but using\n:class:`~pro.api_helpers.prefetcher.ProPrefetcher`, so prefetch can resolve\nserializers for Pro-owned FK targets (``Role``, ``Dojo_Group``).\n\nThe OS mixins hardcode ``_Prefetcher()`` with no override seam, and\n``open_source/`` is gitignored (rebuilt by ``build.sh``) so we can't add one\nthere. The two method bodies below are copied verbatim from\n``dojo/api_v2/prefetch/mixins.py`` — the only change is the prefetcher class —\nand must be kept in sync with it.\n\nThis is a plain mixin (it does not re-inherit ``PrefetchListMixin`` /\n``PrefetchRetrieveMixin`` — that would clash with the same bases reached via\n``PrefetchDojoModelViewSet`` and break C3 MRO). Place it *before*\n``PrefetchDojoModelViewSet`` in a viewset's bases so these methods win.","tags":["product_groups"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedProductGroupRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/EnhancedProductGroupRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/EnhancedProductGroupRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedProductGroup"}}},"description":""}}}},"/api/v2/product_groups/{id}/":{"get":{"operationId":"product_groups_retrieve","description":"``list()``/``retrieve()`` mirroring the OS prefetch mixins but using\n:class:`~pro.api_helpers.prefetcher.ProPrefetcher`, so prefetch can resolve\nserializers for Pro-owned FK targets (``Role``, ``Dojo_Group``).\n\nThe OS mixins hardcode ``_Prefetcher()`` with no override seam, and\n``open_source/`` is gitignored (rebuilt by ``build.sh``) so we can't add one\nthere. The two method bodies below are copied verbatim from\n``dojo/api_v2/prefetch/mixins.py`` — the only change is the prefetcher class —\nand must be kept in sync with it.\n\nThis is a plain mixin (it does not re-inherit ``PrefetchListMixin`` /\n``PrefetchRetrieveMixin`` — that would clash with the same bases reached via\n``PrefetchDojoModelViewSet`` and break C3 MRO). Place it *before*\n``PrefetchDojoModelViewSet`` in a viewset's bases so these methods win.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ group.","required":true},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["product"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"}],"tags":["product_groups"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedProductGroup"}}},"description":""}}},"put":{"operationId":"product_groups_update","description":"``list()``/``retrieve()`` mirroring the OS prefetch mixins but using\n:class:`~pro.api_helpers.prefetcher.ProPrefetcher`, so prefetch can resolve\nserializers for Pro-owned FK targets (``Role``, ``Dojo_Group``).\n\nThe OS mixins hardcode ``_Prefetcher()`` with no override seam, and\n``open_source/`` is gitignored (rebuilt by ``build.sh``) so we can't add one\nthere. The two method bodies below are copied verbatim from\n``dojo/api_v2/prefetch/mixins.py`` — the only change is the prefetcher class —\nand must be kept in sync with it.\n\nThis is a plain mixin (it does not re-inherit ``PrefetchListMixin`` /\n``PrefetchRetrieveMixin`` — that would clash with the same bases reached via\n``PrefetchDojoModelViewSet`` and break C3 MRO). Place it *before*\n``PrefetchDojoModelViewSet`` in a viewset's bases so these methods win.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ group.","required":true}],"tags":["product_groups"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedProductGroupRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/EnhancedProductGroupRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/EnhancedProductGroupRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedProductGroup"}}},"description":""}}},"delete":{"operationId":"product_groups_destroy","description":"``list()``/``retrieve()`` mirroring the OS prefetch mixins but using\n:class:`~pro.api_helpers.prefetcher.ProPrefetcher`, so prefetch can resolve\nserializers for Pro-owned FK targets (``Role``, ``Dojo_Group``).\n\nThe OS mixins hardcode ``_Prefetcher()`` with no override seam, and\n``open_source/`` is gitignored (rebuilt by ``build.sh``) so we can't add one\nthere. The two method bodies below are copied verbatim from\n``dojo/api_v2/prefetch/mixins.py`` — the only change is the prefetcher class —\nand must be kept in sync with it.\n\nThis is a plain mixin (it does not re-inherit ``PrefetchListMixin`` /\n``PrefetchRetrieveMixin`` — that would clash with the same bases reached via\n``PrefetchDojoModelViewSet`` and break C3 MRO). Place it *before*\n``PrefetchDojoModelViewSet`` in a viewset's bases so these methods win.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ group.","required":true}],"tags":["product_groups"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/product_groups/{id}/delete_preview/":{"get":{"operationId":"product_groups_delete_preview_list","description":"``list()``/``retrieve()`` mirroring the OS prefetch mixins but using\n:class:`~pro.api_helpers.prefetcher.ProPrefetcher`, so prefetch can resolve\nserializers for Pro-owned FK targets (``Role``, ``Dojo_Group``).\n\nThe OS mixins hardcode ``_Prefetcher()`` with no override seam, and\n``open_source/`` is gitignored (rebuilt by ``build.sh``) so we can't add one\nthere. The two method bodies below are copied verbatim from\n``dojo/api_v2/prefetch/mixins.py`` — the only change is the prefetcher class —\nand must be kept in sync with it.\n\nThis is a plain mixin (it does not re-inherit ``PrefetchListMixin`` /\n``PrefetchRetrieveMixin`` — that would clash with the same bases reached via\n``PrefetchDojoModelViewSet`` and break C3 MRO). Place it *before*\n``PrefetchDojoModelViewSet`` in a viewset's bases so these methods win.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ group.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["product_groups"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/product_groups/{id}/history/":{"get":{"operationId":"product_groups_history_list","description":"Get audit log entries for an object with pagination.\n\nUses DojoEvents.objects.tracks(obj) to get events for the object itself,\nand DojoEvents.objects.references(obj) to get events for related objects\n(objects with foreign keys pointing to this object). Supports pagination, filtering, and sorting.\nAvailable at both /api/v2/ and /api/vue/ endpoints.\n\nArgs:\n    field_filter: Optional field name to filter by (e.g., \"finding_enrichment_settings\").\n                Only entries with changes to this field will be returned.","parameters":[{"in":"query","name":"asset_id","schema":{"type":"integer"}},{"in":"query","name":"group","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"group_id","schema":{"type":"integer"}},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ group.","required":true},{"in":"query","name":"id","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"product_id","schema":{"type":"integer"}},{"in":"query","name":"role","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"search","schema":{"type":"string"}}],"tags":["product_groups"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedAuditLogList"}}},"description":""}}}},"/api/v2/product_groups/{id}/history/legacy/":{"get":{"operationId":"product_groups_history_legacy_list","description":"Get legacy audit log for an object (django-auditlog entries) with pagination.\n\nSupports pagination, filtering, and sorting.\nAvailable at both /api/v2/ and /api/vue/ endpoints.","parameters":[{"in":"query","name":"asset_id","schema":{"type":"integer"}},{"in":"query","name":"group","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"group_id","schema":{"type":"integer"}},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ group.","required":true},{"in":"query","name":"id","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"product_id","schema":{"type":"integer"}},{"in":"query","name":"role","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"search","schema":{"type":"string"}}],"tags":["product_groups"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedLegacyAuditLogList"}}},"description":""}}}},"/api/v2/product_groups/{id}/history/legacy/count/":{"get":{"operationId":"product_groups_history_legacy_count_retrieve","description":"Get the total count of legacy audit log entries for an object.\n\nApplies the same filters as history_legacy (date filter, LegacyAuditLogFilter)\nto ensure the count matches what users will see when viewing the legacy history page.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ group.","required":true}],"tags":["product_groups"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"integer"}}}}},"description":""}}}},"/api/v2/product_members/":{"get":{"operationId":"product_members_list","description":"``list()``/``retrieve()`` mirroring the OS prefetch mixins but using\n:class:`~pro.api_helpers.prefetcher.ProPrefetcher`, so prefetch can resolve\nserializers for Pro-owned FK targets (``Role``, ``Dojo_Group``).\n\nThe OS mixins hardcode ``_Prefetcher()`` with no override seam, and\n``open_source/`` is gitignored (rebuilt by ``build.sh``) so we can't add one\nthere. The two method bodies below are copied verbatim from\n``dojo/api_v2/prefetch/mixins.py`` — the only change is the prefetcher class —\nand must be kept in sync with it.\n\nThis is a plain mixin (it does not re-inherit ``PrefetchListMixin`` /\n``PrefetchRetrieveMixin`` — that would clash with the same bases reached via\n``PrefetchDojoModelViewSet`` and break C3 MRO). Place it *before*\n``PrefetchDojoModelViewSet`` in a viewset's bases so these methods win.","parameters":[{"in":"query","name":"asset_id","schema":{"type":"integer"}},{"in":"query","name":"id","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["product","user"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"product_id","schema":{"type":"integer"}},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"},{"in":"query","name":"role","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"search","schema":{"type":"string"}},{"in":"query","name":"user","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"user_id","schema":{"type":"integer"}}],"tags":["product_members"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedEnhancedProductMemberList"}}},"description":""}}},"post":{"operationId":"product_members_create","description":"``list()``/``retrieve()`` mirroring the OS prefetch mixins but using\n:class:`~pro.api_helpers.prefetcher.ProPrefetcher`, so prefetch can resolve\nserializers for Pro-owned FK targets (``Role``, ``Dojo_Group``).\n\nThe OS mixins hardcode ``_Prefetcher()`` with no override seam, and\n``open_source/`` is gitignored (rebuilt by ``build.sh``) so we can't add one\nthere. The two method bodies below are copied verbatim from\n``dojo/api_v2/prefetch/mixins.py`` — the only change is the prefetcher class —\nand must be kept in sync with it.\n\nThis is a plain mixin (it does not re-inherit ``PrefetchListMixin`` /\n``PrefetchRetrieveMixin`` — that would clash with the same bases reached via\n``PrefetchDojoModelViewSet`` and break C3 MRO). Place it *before*\n``PrefetchDojoModelViewSet`` in a viewset's bases so these methods win.","tags":["product_members"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedProductMemberRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/EnhancedProductMemberRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/EnhancedProductMemberRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedProductMember"}}},"description":""}}}},"/api/v2/product_members/{id}/":{"get":{"operationId":"product_members_retrieve","description":"``list()``/``retrieve()`` mirroring the OS prefetch mixins but using\n:class:`~pro.api_helpers.prefetcher.ProPrefetcher`, so prefetch can resolve\nserializers for Pro-owned FK targets (``Role``, ``Dojo_Group``).\n\nThe OS mixins hardcode ``_Prefetcher()`` with no override seam, and\n``open_source/`` is gitignored (rebuilt by ``build.sh``) so we can't add one\nthere. The two method bodies below are copied verbatim from\n``dojo/api_v2/prefetch/mixins.py`` — the only change is the prefetcher class —\nand must be kept in sync with it.\n\nThis is a plain mixin (it does not re-inherit ``PrefetchListMixin`` /\n``PrefetchRetrieveMixin`` — that would clash with the same bases reached via\n``PrefetchDojoModelViewSet`` and break C3 MRO). Place it *before*\n``PrefetchDojoModelViewSet`` in a viewset's bases so these methods win.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ member.","required":true},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["product","user"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"}],"tags":["product_members"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedProductMember"}}},"description":""}}},"put":{"operationId":"product_members_update","description":"``list()``/``retrieve()`` mirroring the OS prefetch mixins but using\n:class:`~pro.api_helpers.prefetcher.ProPrefetcher`, so prefetch can resolve\nserializers for Pro-owned FK targets (``Role``, ``Dojo_Group``).\n\nThe OS mixins hardcode ``_Prefetcher()`` with no override seam, and\n``open_source/`` is gitignored (rebuilt by ``build.sh``) so we can't add one\nthere. The two method bodies below are copied verbatim from\n``dojo/api_v2/prefetch/mixins.py`` — the only change is the prefetcher class —\nand must be kept in sync with it.\n\nThis is a plain mixin (it does not re-inherit ``PrefetchListMixin`` /\n``PrefetchRetrieveMixin`` — that would clash with the same bases reached via\n``PrefetchDojoModelViewSet`` and break C3 MRO). Place it *before*\n``PrefetchDojoModelViewSet`` in a viewset's bases so these methods win.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ member.","required":true}],"tags":["product_members"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedProductMemberRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/EnhancedProductMemberRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/EnhancedProductMemberRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedProductMember"}}},"description":""}}},"delete":{"operationId":"product_members_destroy","description":"``list()``/``retrieve()`` mirroring the OS prefetch mixins but using\n:class:`~pro.api_helpers.prefetcher.ProPrefetcher`, so prefetch can resolve\nserializers for Pro-owned FK targets (``Role``, ``Dojo_Group``).\n\nThe OS mixins hardcode ``_Prefetcher()`` with no override seam, and\n``open_source/`` is gitignored (rebuilt by ``build.sh``) so we can't add one\nthere. The two method bodies below are copied verbatim from\n``dojo/api_v2/prefetch/mixins.py`` — the only change is the prefetcher class —\nand must be kept in sync with it.\n\nThis is a plain mixin (it does not re-inherit ``PrefetchListMixin`` /\n``PrefetchRetrieveMixin`` — that would clash with the same bases reached via\n``PrefetchDojoModelViewSet`` and break C3 MRO). Place it *before*\n``PrefetchDojoModelViewSet`` in a viewset's bases so these methods win.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ member.","required":true}],"tags":["product_members"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/product_members/{id}/delete_preview/":{"get":{"operationId":"product_members_delete_preview_list","description":"``list()``/``retrieve()`` mirroring the OS prefetch mixins but using\n:class:`~pro.api_helpers.prefetcher.ProPrefetcher`, so prefetch can resolve\nserializers for Pro-owned FK targets (``Role``, ``Dojo_Group``).\n\nThe OS mixins hardcode ``_Prefetcher()`` with no override seam, and\n``open_source/`` is gitignored (rebuilt by ``build.sh``) so we can't add one\nthere. The two method bodies below are copied verbatim from\n``dojo/api_v2/prefetch/mixins.py`` — the only change is the prefetcher class —\nand must be kept in sync with it.\n\nThis is a plain mixin (it does not re-inherit ``PrefetchListMixin`` /\n``PrefetchRetrieveMixin`` — that would clash with the same bases reached via\n``PrefetchDojoModelViewSet`` and break C3 MRO). Place it *before*\n``PrefetchDojoModelViewSet`` in a viewset's bases so these methods win.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ member.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["product_members"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/product_type_groups/":{"get":{"operationId":"product_type_groups_list","description":"``list()``/``retrieve()`` mirroring the OS prefetch mixins but using\n:class:`~pro.api_helpers.prefetcher.ProPrefetcher`, so prefetch can resolve\nserializers for Pro-owned FK targets (``Role``, ``Dojo_Group``).\n\nThe OS mixins hardcode ``_Prefetcher()`` with no override seam, and\n``open_source/`` is gitignored (rebuilt by ``build.sh``) so we can't add one\nthere. The two method bodies below are copied verbatim from\n``dojo/api_v2/prefetch/mixins.py`` — the only change is the prefetcher class —\nand must be kept in sync with it.\n\nThis is a plain mixin (it does not re-inherit ``PrefetchListMixin`` /\n``PrefetchRetrieveMixin`` — that would clash with the same bases reached via\n``PrefetchDojoModelViewSet`` and break C3 MRO). Place it *before*\n``PrefetchDojoModelViewSet`` in a viewset's bases so these methods win.","parameters":[{"in":"query","name":"group","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"group_id","schema":{"type":"integer"}},{"in":"query","name":"id","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"organization_id","schema":{"type":"integer"}},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["product_type"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"product_type_id","schema":{"type":"integer"}},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"},{"in":"query","name":"role","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"search","schema":{"type":"string"}}],"tags":["product_type_groups"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedEnhancedProductTypeGroupList"}}},"description":""}}},"post":{"operationId":"product_type_groups_create","description":"``list()``/``retrieve()`` mirroring the OS prefetch mixins but using\n:class:`~pro.api_helpers.prefetcher.ProPrefetcher`, so prefetch can resolve\nserializers for Pro-owned FK targets (``Role``, ``Dojo_Group``).\n\nThe OS mixins hardcode ``_Prefetcher()`` with no override seam, and\n``open_source/`` is gitignored (rebuilt by ``build.sh``) so we can't add one\nthere. The two method bodies below are copied verbatim from\n``dojo/api_v2/prefetch/mixins.py`` — the only change is the prefetcher class —\nand must be kept in sync with it.\n\nThis is a plain mixin (it does not re-inherit ``PrefetchListMixin`` /\n``PrefetchRetrieveMixin`` — that would clash with the same bases reached via\n``PrefetchDojoModelViewSet`` and break C3 MRO). Place it *before*\n``PrefetchDojoModelViewSet`` in a viewset's bases so these methods win.","tags":["product_type_groups"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedProductTypeGroupRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/EnhancedProductTypeGroupRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/EnhancedProductTypeGroupRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedProductTypeGroup"}}},"description":""}}}},"/api/v2/product_type_groups/{id}/":{"get":{"operationId":"product_type_groups_retrieve","description":"``list()``/``retrieve()`` mirroring the OS prefetch mixins but using\n:class:`~pro.api_helpers.prefetcher.ProPrefetcher`, so prefetch can resolve\nserializers for Pro-owned FK targets (``Role``, ``Dojo_Group``).\n\nThe OS mixins hardcode ``_Prefetcher()`` with no override seam, and\n``open_source/`` is gitignored (rebuilt by ``build.sh``) so we can't add one\nthere. The two method bodies below are copied verbatim from\n``dojo/api_v2/prefetch/mixins.py`` — the only change is the prefetcher class —\nand must be kept in sync with it.\n\nThis is a plain mixin (it does not re-inherit ``PrefetchListMixin`` /\n``PrefetchRetrieveMixin`` — that would clash with the same bases reached via\n``PrefetchDojoModelViewSet`` and break C3 MRO). Place it *before*\n``PrefetchDojoModelViewSet`` in a viewset's bases so these methods win.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ type_ group.","required":true},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["product_type"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"}],"tags":["product_type_groups"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedProductTypeGroup"}}},"description":""}}},"put":{"operationId":"product_type_groups_update","description":"``list()``/``retrieve()`` mirroring the OS prefetch mixins but using\n:class:`~pro.api_helpers.prefetcher.ProPrefetcher`, so prefetch can resolve\nserializers for Pro-owned FK targets (``Role``, ``Dojo_Group``).\n\nThe OS mixins hardcode ``_Prefetcher()`` with no override seam, and\n``open_source/`` is gitignored (rebuilt by ``build.sh``) so we can't add one\nthere. The two method bodies below are copied verbatim from\n``dojo/api_v2/prefetch/mixins.py`` — the only change is the prefetcher class —\nand must be kept in sync with it.\n\nThis is a plain mixin (it does not re-inherit ``PrefetchListMixin`` /\n``PrefetchRetrieveMixin`` — that would clash with the same bases reached via\n``PrefetchDojoModelViewSet`` and break C3 MRO). Place it *before*\n``PrefetchDojoModelViewSet`` in a viewset's bases so these methods win.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ type_ group.","required":true}],"tags":["product_type_groups"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedProductTypeGroupRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/EnhancedProductTypeGroupRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/EnhancedProductTypeGroupRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedProductTypeGroup"}}},"description":""}}},"delete":{"operationId":"product_type_groups_destroy","description":"``list()``/``retrieve()`` mirroring the OS prefetch mixins but using\n:class:`~pro.api_helpers.prefetcher.ProPrefetcher`, so prefetch can resolve\nserializers for Pro-owned FK targets (``Role``, ``Dojo_Group``).\n\nThe OS mixins hardcode ``_Prefetcher()`` with no override seam, and\n``open_source/`` is gitignored (rebuilt by ``build.sh``) so we can't add one\nthere. The two method bodies below are copied verbatim from\n``dojo/api_v2/prefetch/mixins.py`` — the only change is the prefetcher class —\nand must be kept in sync with it.\n\nThis is a plain mixin (it does not re-inherit ``PrefetchListMixin`` /\n``PrefetchRetrieveMixin`` — that would clash with the same bases reached via\n``PrefetchDojoModelViewSet`` and break C3 MRO). Place it *before*\n``PrefetchDojoModelViewSet`` in a viewset's bases so these methods win.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ type_ group.","required":true}],"tags":["product_type_groups"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/product_type_groups/{id}/delete_preview/":{"get":{"operationId":"product_type_groups_delete_preview_list","description":"``list()``/``retrieve()`` mirroring the OS prefetch mixins but using\n:class:`~pro.api_helpers.prefetcher.ProPrefetcher`, so prefetch can resolve\nserializers for Pro-owned FK targets (``Role``, ``Dojo_Group``).\n\nThe OS mixins hardcode ``_Prefetcher()`` with no override seam, and\n``open_source/`` is gitignored (rebuilt by ``build.sh``) so we can't add one\nthere. The two method bodies below are copied verbatim from\n``dojo/api_v2/prefetch/mixins.py`` — the only change is the prefetcher class —\nand must be kept in sync with it.\n\nThis is a plain mixin (it does not re-inherit ``PrefetchListMixin`` /\n``PrefetchRetrieveMixin`` — that would clash with the same bases reached via\n``PrefetchDojoModelViewSet`` and break C3 MRO). Place it *before*\n``PrefetchDojoModelViewSet`` in a viewset's bases so these methods win.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ type_ group.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["product_type_groups"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/product_type_groups/{id}/history/":{"get":{"operationId":"product_type_groups_history_list","description":"Get audit log entries for an object with pagination.\n\nUses DojoEvents.objects.tracks(obj) to get events for the object itself,\nand DojoEvents.objects.references(obj) to get events for related objects\n(objects with foreign keys pointing to this object). Supports pagination, filtering, and sorting.\nAvailable at both /api/v2/ and /api/vue/ endpoints.\n\nArgs:\n    field_filter: Optional field name to filter by (e.g., \"finding_enrichment_settings\").\n                Only entries with changes to this field will be returned.","parameters":[{"in":"query","name":"group","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"group_id","schema":{"type":"integer"}},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ type_ group.","required":true},{"in":"query","name":"id","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"organization_id","schema":{"type":"integer"}},{"in":"query","name":"product_type_id","schema":{"type":"integer"}},{"in":"query","name":"role","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"search","schema":{"type":"string"}}],"tags":["product_type_groups"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedAuditLogList"}}},"description":""}}}},"/api/v2/product_type_groups/{id}/history/legacy/":{"get":{"operationId":"product_type_groups_history_legacy_list","description":"Get legacy audit log for an object (django-auditlog entries) with pagination.\n\nSupports pagination, filtering, and sorting.\nAvailable at both /api/v2/ and /api/vue/ endpoints.","parameters":[{"in":"query","name":"group","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"group_id","schema":{"type":"integer"}},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ type_ group.","required":true},{"in":"query","name":"id","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"organization_id","schema":{"type":"integer"}},{"in":"query","name":"product_type_id","schema":{"type":"integer"}},{"in":"query","name":"role","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"search","schema":{"type":"string"}}],"tags":["product_type_groups"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedLegacyAuditLogList"}}},"description":""}}}},"/api/v2/product_type_groups/{id}/history/legacy/count/":{"get":{"operationId":"product_type_groups_history_legacy_count_retrieve","description":"Get the total count of legacy audit log entries for an object.\n\nApplies the same filters as history_legacy (date filter, LegacyAuditLogFilter)\nto ensure the count matches what users will see when viewing the legacy history page.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ type_ group.","required":true}],"tags":["product_type_groups"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"integer"}}}}},"description":""}}}},"/api/v2/product_type_members/":{"get":{"operationId":"product_type_members_list","description":"``list()``/``retrieve()`` mirroring the OS prefetch mixins but using\n:class:`~pro.api_helpers.prefetcher.ProPrefetcher`, so prefetch can resolve\nserializers for Pro-owned FK targets (``Role``, ``Dojo_Group``).\n\nThe OS mixins hardcode ``_Prefetcher()`` with no override seam, and\n``open_source/`` is gitignored (rebuilt by ``build.sh``) so we can't add one\nthere. The two method bodies below are copied verbatim from\n``dojo/api_v2/prefetch/mixins.py`` — the only change is the prefetcher class —\nand must be kept in sync with it.\n\nThis is a plain mixin (it does not re-inherit ``PrefetchListMixin`` /\n``PrefetchRetrieveMixin`` — that would clash with the same bases reached via\n``PrefetchDojoModelViewSet`` and break C3 MRO). Place it *before*\n``PrefetchDojoModelViewSet`` in a viewset's bases so these methods win.","parameters":[{"in":"query","name":"id","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"organization_id","schema":{"type":"integer"}},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["product_type","user"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"product_type_id","schema":{"type":"integer"}},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"},{"in":"query","name":"role","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"search","schema":{"type":"string"}},{"in":"query","name":"user","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"user_id","schema":{"type":"integer"}}],"tags":["product_type_members"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedEnhancedProductTypeMemberList"}}},"description":""}}},"post":{"operationId":"product_type_members_create","description":"``list()``/``retrieve()`` mirroring the OS prefetch mixins but using\n:class:`~pro.api_helpers.prefetcher.ProPrefetcher`, so prefetch can resolve\nserializers for Pro-owned FK targets (``Role``, ``Dojo_Group``).\n\nThe OS mixins hardcode ``_Prefetcher()`` with no override seam, and\n``open_source/`` is gitignored (rebuilt by ``build.sh``) so we can't add one\nthere. The two method bodies below are copied verbatim from\n``dojo/api_v2/prefetch/mixins.py`` — the only change is the prefetcher class —\nand must be kept in sync with it.\n\nThis is a plain mixin (it does not re-inherit ``PrefetchListMixin`` /\n``PrefetchRetrieveMixin`` — that would clash with the same bases reached via\n``PrefetchDojoModelViewSet`` and break C3 MRO). Place it *before*\n``PrefetchDojoModelViewSet`` in a viewset's bases so these methods win.","tags":["product_type_members"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedProductTypeMemberRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/EnhancedProductTypeMemberRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/EnhancedProductTypeMemberRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedProductTypeMember"}}},"description":""}}}},"/api/v2/product_type_members/{id}/":{"get":{"operationId":"product_type_members_retrieve","description":"``list()``/``retrieve()`` mirroring the OS prefetch mixins but using\n:class:`~pro.api_helpers.prefetcher.ProPrefetcher`, so prefetch can resolve\nserializers for Pro-owned FK targets (``Role``, ``Dojo_Group``).\n\nThe OS mixins hardcode ``_Prefetcher()`` with no override seam, and\n``open_source/`` is gitignored (rebuilt by ``build.sh``) so we can't add one\nthere. The two method bodies below are copied verbatim from\n``dojo/api_v2/prefetch/mixins.py`` — the only change is the prefetcher class —\nand must be kept in sync with it.\n\nThis is a plain mixin (it does not re-inherit ``PrefetchListMixin`` /\n``PrefetchRetrieveMixin`` — that would clash with the same bases reached via\n``PrefetchDojoModelViewSet`` and break C3 MRO). Place it *before*\n``PrefetchDojoModelViewSet`` in a viewset's bases so these methods win.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ type_ member.","required":true},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["product_type","user"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"}],"tags":["product_type_members"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedProductTypeMember"}}},"description":""}}},"put":{"operationId":"product_type_members_update","description":"``list()``/``retrieve()`` mirroring the OS prefetch mixins but using\n:class:`~pro.api_helpers.prefetcher.ProPrefetcher`, so prefetch can resolve\nserializers for Pro-owned FK targets (``Role``, ``Dojo_Group``).\n\nThe OS mixins hardcode ``_Prefetcher()`` with no override seam, and\n``open_source/`` is gitignored (rebuilt by ``build.sh``) so we can't add one\nthere. The two method bodies below are copied verbatim from\n``dojo/api_v2/prefetch/mixins.py`` — the only change is the prefetcher class —\nand must be kept in sync with it.\n\nThis is a plain mixin (it does not re-inherit ``PrefetchListMixin`` /\n``PrefetchRetrieveMixin`` — that would clash with the same bases reached via\n``PrefetchDojoModelViewSet`` and break C3 MRO). Place it *before*\n``PrefetchDojoModelViewSet`` in a viewset's bases so these methods win.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ type_ member.","required":true}],"tags":["product_type_members"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedProductTypeMemberRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/EnhancedProductTypeMemberRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/EnhancedProductTypeMemberRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedProductTypeMember"}}},"description":""}}},"delete":{"operationId":"product_type_members_destroy","description":"``list()``/``retrieve()`` mirroring the OS prefetch mixins but using\n:class:`~pro.api_helpers.prefetcher.ProPrefetcher`, so prefetch can resolve\nserializers for Pro-owned FK targets (``Role``, ``Dojo_Group``).\n\nThe OS mixins hardcode ``_Prefetcher()`` with no override seam, and\n``open_source/`` is gitignored (rebuilt by ``build.sh``) so we can't add one\nthere. The two method bodies below are copied verbatim from\n``dojo/api_v2/prefetch/mixins.py`` — the only change is the prefetcher class —\nand must be kept in sync with it.\n\nThis is a plain mixin (it does not re-inherit ``PrefetchListMixin`` /\n``PrefetchRetrieveMixin`` — that would clash with the same bases reached via\n``PrefetchDojoModelViewSet`` and break C3 MRO). Place it *before*\n``PrefetchDojoModelViewSet`` in a viewset's bases so these methods win.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ type_ member.","required":true}],"tags":["product_type_members"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/product_type_members/{id}/delete_preview/":{"get":{"operationId":"product_type_members_delete_preview_list","description":"``list()``/``retrieve()`` mirroring the OS prefetch mixins but using\n:class:`~pro.api_helpers.prefetcher.ProPrefetcher`, so prefetch can resolve\nserializers for Pro-owned FK targets (``Role``, ``Dojo_Group``).\n\nThe OS mixins hardcode ``_Prefetcher()`` with no override seam, and\n``open_source/`` is gitignored (rebuilt by ``build.sh``) so we can't add one\nthere. The two method bodies below are copied verbatim from\n``dojo/api_v2/prefetch/mixins.py`` — the only change is the prefetcher class —\nand must be kept in sync with it.\n\nThis is a plain mixin (it does not re-inherit ``PrefetchListMixin`` /\n``PrefetchRetrieveMixin`` — that would clash with the same bases reached via\n``PrefetchDojoModelViewSet`` and break C3 MRO). Place it *before*\n``PrefetchDojoModelViewSet`` in a viewset's bases so these methods win.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ type_ member.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["product_type_members"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/product_types/":{"get":{"operationId":"product_types_list","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"query","name":"created","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"critical_product","schema":{"type":"boolean"}},{"in":"query","name":"id","schema":{"type":"integer"}},{"in":"query","name":"key_product","schema":{"type":"boolean"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"name","schema":{"type":"string"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["authorized_users"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"},{"in":"query","name":"updated","schema":{"type":"string","format":"date-time"}}],"tags":["product_types"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedEnhancedProductTypeList"}}},"description":""}}},"post":{"operationId":"product_types_create","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","tags":["product_types"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedProductTypeRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/EnhancedProductTypeRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/EnhancedProductTypeRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedProductType"}}},"description":""}}}},"/api/v2/product_types/{id}/":{"get":{"operationId":"product_types_retrieve","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ type.","required":true},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["authorized_users"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"}],"tags":["product_types"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedProductType"}}},"description":""}}},"put":{"operationId":"product_types_update","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ type.","required":true}],"tags":["product_types"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedProductTypeRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/EnhancedProductTypeRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/EnhancedProductTypeRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedProductType"}}},"description":""}}},"patch":{"operationId":"product_types_partial_update","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ type.","required":true}],"tags":["product_types"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedEnhancedProductTypeRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedEnhancedProductTypeRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedEnhancedProductTypeRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedProductType"}}},"description":""}}},"delete":{"operationId":"product_types_destroy","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ type.","required":true}],"tags":["product_types"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/product_types/{id}/delete_preview/":{"get":{"operationId":"product_types_delete_preview_list","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ type.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["product_types"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/product_types/{id}/generate_report/":{"post":{"operationId":"product_types_generate_report_create","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ type.","required":true}],"tags":["product_types"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportGenerateOptionRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ReportGenerateOptionRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ReportGenerateOptionRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportGenerate"}}},"description":""}}}},"/api/v2/product_types/{id}/history/":{"get":{"operationId":"product_types_history_list","description":"Get audit log entries for an object with pagination.\n\nUses DojoEvents.objects.tracks(obj) to get events for the object itself,\nand DojoEvents.objects.references(obj) to get events for related objects\n(objects with foreign keys pointing to this object). Supports pagination, filtering, and sorting.\nAvailable at both /api/v2/ and /api/vue/ endpoints.\n\nArgs:\n    field_filter: Optional field name to filter by (e.g., \"finding_enrichment_settings\").\n                Only entries with changes to this field will be returned.","parameters":[{"in":"query","name":"created","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"critical_product","schema":{"type":"boolean"}},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ type.","required":true},{"in":"query","name":"id","schema":{"type":"integer"}},{"in":"query","name":"key_product","schema":{"type":"boolean"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"name","schema":{"type":"string"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"updated","schema":{"type":"string","format":"date-time"}}],"tags":["product_types"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedAuditLogList"}}},"description":""}}}},"/api/v2/product_types/{id}/history/legacy/":{"get":{"operationId":"product_types_history_legacy_list","description":"Get legacy audit log for an object (django-auditlog entries) with pagination.\n\nSupports pagination, filtering, and sorting.\nAvailable at both /api/v2/ and /api/vue/ endpoints.","parameters":[{"in":"query","name":"created","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"critical_product","schema":{"type":"boolean"}},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ type.","required":true},{"in":"query","name":"id","schema":{"type":"integer"}},{"in":"query","name":"key_product","schema":{"type":"boolean"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"name","schema":{"type":"string"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"updated","schema":{"type":"string","format":"date-time"}}],"tags":["product_types"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedLegacyAuditLogList"}}},"description":""}}}},"/api/v2/product_types/{id}/history/legacy/count/":{"get":{"operationId":"product_types_history_legacy_count_retrieve","description":"Get the total count of legacy audit log entries for an object.\n\nApplies the same filters as history_legacy (date filter, LegacyAuditLogFilter)\nto ensure the count matches what users will see when viewing the legacy history page.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product_ type.","required":true}],"tags":["product_types"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"integer"}}}}},"description":""}}}},"/api/v2/products/":{"get":{"operationId":"products_list","description":"Product endpoint — mirrors EnhancedAssetViewSet with product-specific naming.\n\nInherits get_queryset, prefetches, and all shared behavior from\nEnhancedAssetViewSet; only the class attributes that differ between the\nasset (renamed) and product (legacy) API contracts are overridden here.","parameters":[{"in":"query","name":"business_criticality","schema":{"type":"array","items":{"type":"string","x-spec-enum-id":"ef412461eb271471","nullable":true,"enum":["high","low","medium","none","very high","very low"]}},"description":"* `very high` - Very High\n* `high` - High\n* `medium` - Medium\n* `low` - Low\n* `very low` - Very Low\n* `none` - None","explode":true,"style":"form"},{"in":"query","name":"created","schema":{"type":"string","format":"date-time","nullable":true,"enum":[1,2,3,4,5,6,7,null]},"description":"Time that the object was initially created, and saved to the database\n\n* `None` - Any date\n* `1` - Today\n* `2` - Past 7 days\n* `3` - Past 30 days\n* `4` - Past 90 days\n* `5` - Current month\n* `6` - Current year\n* `7` - Past year"},{"in":"query","name":"description","schema":{"type":"string"}},{"in":"query","name":"external_audience","schema":{"type":"boolean"}},{"in":"query","name":"has_tags","schema":{"type":"boolean"},"description":"Has tags"},{"in":"query","name":"id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"internet_accessible","schema":{"type":"boolean"}},{"in":"query","name":"lifecycle","schema":{"type":"array","items":{"type":"string","x-spec-enum-id":"65f9d93250b96377","nullable":true,"enum":["construction","production","retirement"]}},"description":"* `construction` - Construction\n* `production` - Production\n* `retirement` - Retirement","explode":true,"style":"form"},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"name","schema":{"type":"string"}},{"in":"query","name":"name_exact","schema":{"type":"string"}},{"in":"query","name":"not_tag","schema":{"type":"string"},"description":"Not Tag name contains"},{"in":"query","name":"not_tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags not present on Asset","explode":false,"style":"form"},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-business_criticality","-created","-external_audience","-id","-internet_accessible","-lifecycle","-name","-origin","-platform","-prod_numeric_grade","-prod_type","-prod_type__name","-product_manager","-product_manager__first_name","-product_manager__last_name","-revenue","-team_manager","-team_manager__first_name","-team_manager__last_name","-technical_contact","-technical_contact__first_name","-technical_contact__last_name","-tid","-updated","-user_records","business_criticality","created","external_audience","id","internet_accessible","lifecycle","name","origin","platform","prod_numeric_grade","prod_type","prod_type__name","product_manager","product_manager__first_name","product_manager__last_name","revenue","team_manager","team_manager__first_name","team_manager__last_name","technical_contact","technical_contact__first_name","technical_contact__last_name","tid","updated","user_records"]}},"description":"Ordering\n\n* `id` - Id\n* `-id` - Id (descending)\n* `tid` - Tid\n* `-tid` - Tid (descending)\n* `name` - Name\n* `-name` - Name (descending)\n* `created` - Created\n* `-created` - Created (descending)\n* `prod_numeric_grade` - Prod numeric grade\n* `-prod_numeric_grade` - Prod numeric grade (descending)\n* `business_criticality` - Business criticality\n* `-business_criticality` - Business criticality (descending)\n* `platform` - Platform\n* `-platform` - Platform (descending)\n* `lifecycle` - Lifecycle\n* `-lifecycle` - Lifecycle (descending)\n* `origin` - Origin\n* `-origin` - Origin (descending)\n* `revenue` - Revenue\n* `-revenue` - Revenue (descending)\n* `external_audience` - External audience\n* `-external_audience` - External audience (descending)\n* `internet_accessible` - Internet accessible\n* `-internet_accessible` - Internet accessible (descending)\n* `product_manager` - Product manager\n* `-product_manager` - Product manager (descending)\n* `product_manager__first_name` - Product manager  first name\n* `-product_manager__first_name` - Product manager  first name (descending)\n* `product_manager__last_name` - Product manager  last name\n* `-product_manager__last_name` - Product manager  last name (descending)\n* `technical_contact` - Technical contact\n* `-technical_contact` - Technical contact (descending)\n* `technical_contact__first_name` - Technical contact  first name\n* `-technical_contact__first_name` - Technical contact  first name (descending)\n* `technical_contact__last_name` - Technical contact  last name\n* `-technical_contact__last_name` - Technical contact  last name (descending)\n* `team_manager` - Team manager\n* `-team_manager` - Team manager (descending)\n* `team_manager__first_name` - Team manager  first name\n* `-team_manager__first_name` - Team manager  first name (descending)\n* `team_manager__last_name` - Team manager  last name\n* `-team_manager__last_name` - Team manager  last name (descending)\n* `prod_type` - Prod type\n* `-prod_type` - Prod type (descending)\n* `prod_type__name` - Prod type  name\n* `-prod_type__name` - Prod type  name (descending)\n* `updated` - Updated\n* `-updated` - Updated (descending)\n* `user_records` - User records\n* `-user_records` - User records (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"origin","schema":{"type":"array","items":{"type":"string","x-spec-enum-id":"435026afe6c513fa","nullable":true,"enum":["contractor","internal","open source","outsourced","purchased","third party library"]}},"description":"* `third party library` - Third Party Library\n* `purchased` - Purchased\n* `contractor` - Contractor Developed\n* `internal` - Internally Developed\n* `open source` - Open Source\n* `outsourced` - Outsourced","explode":true,"style":"form"},{"in":"query","name":"outside_of_sla","schema":{"type":"number"}},{"in":"query","name":"platform","schema":{"type":"array","items":{"type":"string","x-spec-enum-id":"48ed03cfd9c8641d","nullable":true,"enum":["desktop","iot","mobile","web","web service"]}},"description":"* `web service` - API\n* `desktop` - Desktop\n* `iot` - Internet of Things\n* `mobile` - Mobile\n* `web` - Web","explode":true,"style":"form"},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["authorized_users","prod_type","product_manager","regulations","sla_configuration","team_manager","technical_contact"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"prod_numeric_grade","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"prod_type","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"product_manager","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"regulations","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"},{"in":"query","name":"revenue","schema":{"type":"number"}},{"in":"query","name":"tag","schema":{"type":"string"},"description":"Tag name contains"},{"in":"query","name":"tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags (uses OR for multiple values)","explode":false,"style":"form"},{"in":"query","name":"tags__and","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags to match with an AND expression","explode":false,"style":"form"},{"in":"query","name":"team_manager","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"technical_contact","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"tid","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"updated","schema":{"type":"string","format":"date-time","nullable":true,"enum":[1,2,3,4,5,6,7,null]},"description":"Time that the object was most recently saved to the database\n\n* `None` - Any date\n* `1` - Today\n* `2` - Past 7 days\n* `3` - Past 30 days\n* `4` - Past 90 days\n* `5` - Current month\n* `6` - Current year\n* `7` - Past year"},{"in":"query","name":"user_records","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"}],"tags":["products"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedProductsList"}}},"description":""}}},"post":{"operationId":"products_create","description":"Product endpoint — mirrors EnhancedAssetViewSet with product-specific naming.\n\nInherits get_queryset, prefetches, and all shared behavior from\nEnhancedAssetViewSet; only the class attributes that differ between the\nasset (renamed) and product (legacy) API contracts are overridden here.","tags":["products"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductsRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ProductsRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ProductsRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Products"}}},"description":""}}}},"/api/v2/products/{id}/":{"get":{"operationId":"products_retrieve","description":"Product endpoint — mirrors EnhancedAssetViewSet with product-specific naming.\n\nInherits get_queryset, prefetches, and all shared behavior from\nEnhancedAssetViewSet; only the class attributes that differ between the\nasset (renamed) and product (legacy) API contracts are overridden here.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product.","required":true},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["authorized_users","prod_type","product_manager","regulations","sla_configuration","team_manager","technical_contact"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"}],"tags":["products"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Products"}}},"description":""}}},"put":{"operationId":"products_update","description":"Product endpoint — mirrors EnhancedAssetViewSet with product-specific naming.\n\nInherits get_queryset, prefetches, and all shared behavior from\nEnhancedAssetViewSet; only the class attributes that differ between the\nasset (renamed) and product (legacy) API contracts are overridden here.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product.","required":true}],"tags":["products"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductsRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ProductsRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ProductsRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Products"}}},"description":""}}},"patch":{"operationId":"products_partial_update","description":"Product endpoint — mirrors EnhancedAssetViewSet with product-specific naming.\n\nInherits get_queryset, prefetches, and all shared behavior from\nEnhancedAssetViewSet; only the class attributes that differ between the\nasset (renamed) and product (legacy) API contracts are overridden here.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product.","required":true}],"tags":["products"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedProductsRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedProductsRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedProductsRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Products"}}},"description":""}}},"delete":{"operationId":"products_destroy","description":"Product endpoint — mirrors EnhancedAssetViewSet with product-specific naming.\n\nInherits get_queryset, prefetches, and all shared behavior from\nEnhancedAssetViewSet; only the class attributes that differ between the\nasset (renamed) and product (legacy) API contracts are overridden here.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product.","required":true}],"tags":["products"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/products/{id}/delete_preview/":{"get":{"operationId":"products_delete_preview_list","description":"Product endpoint — mirrors EnhancedAssetViewSet with product-specific naming.\n\nInherits get_queryset, prefetches, and all shared behavior from\nEnhancedAssetViewSet; only the class attributes that differ between the\nasset (renamed) and product (legacy) API contracts are overridden here.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["products"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/products/{id}/finding_diff/{other_id}/":{"get":{"operationId":"products_finding_diff_retrieve","description":"Compares the findings associated with the two objects and returns\nadded, removed, equality, and improvement information.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product.","required":true},{"in":"path","name":"other_id","schema":{"type":"string","pattern":"^\\d+$"},"required":true}],"tags":["products"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindingDiff"}}},"description":""}}}},"/api/v2/products/{id}/generate_report/":{"post":{"operationId":"products_generate_report_create","description":"Product endpoint — mirrors EnhancedAssetViewSet with product-specific naming.\n\nInherits get_queryset, prefetches, and all shared behavior from\nEnhancedAssetViewSet; only the class attributes that differ between the\nasset (renamed) and product (legacy) API contracts are overridden here.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product.","required":true}],"tags":["products"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportGenerateOptionRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ReportGenerateOptionRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ReportGenerateOptionRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportGenerate"}}},"description":""}}}},"/api/v2/products/{id}/history/":{"get":{"operationId":"products_history_list","description":"Get audit log entries for an object with pagination.\n\nUses DojoEvents.objects.tracks(obj) to get events for the object itself,\nand DojoEvents.objects.references(obj) to get events for related objects\n(objects with foreign keys pointing to this object). Supports pagination, filtering, and sorting.\nAvailable at both /api/v2/ and /api/vue/ endpoints.\n\nArgs:\n    field_filter: Optional field name to filter by (e.g., \"finding_enrichment_settings\").\n                Only entries with changes to this field will be returned.","parameters":[{"in":"query","name":"business_criticality","schema":{"type":"array","items":{"type":"string","x-spec-enum-id":"ef412461eb271471","nullable":true,"enum":["high","low","medium","none","very high","very low"]}},"description":"* `very high` - Very High\n* `high` - High\n* `medium` - Medium\n* `low` - Low\n* `very low` - Very Low\n* `none` - None","explode":true,"style":"form"},{"in":"query","name":"created","schema":{"type":"string","format":"date-time","nullable":true,"enum":[1,2,3,4,5,6,7,null]},"description":"Time that the object was initially created, and saved to the database\n\n* `None` - Any date\n* `1` - Today\n* `2` - Past 7 days\n* `3` - Past 30 days\n* `4` - Past 90 days\n* `5` - Current month\n* `6` - Current year\n* `7` - Past year"},{"in":"query","name":"description","schema":{"type":"string"}},{"in":"query","name":"external_audience","schema":{"type":"boolean"}},{"in":"query","name":"has_tags","schema":{"type":"boolean"},"description":"Has tags"},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product.","required":true},{"in":"query","name":"id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"internet_accessible","schema":{"type":"boolean"}},{"in":"query","name":"lifecycle","schema":{"type":"array","items":{"type":"string","x-spec-enum-id":"65f9d93250b96377","nullable":true,"enum":["construction","production","retirement"]}},"description":"* `construction` - Construction\n* `production` - Production\n* `retirement` - Retirement","explode":true,"style":"form"},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"name","schema":{"type":"string"}},{"in":"query","name":"name_exact","schema":{"type":"string"}},{"in":"query","name":"not_tag","schema":{"type":"string"},"description":"Not Tag name contains"},{"in":"query","name":"not_tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags not present on Asset","explode":false,"style":"form"},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-business_criticality","-created","-external_audience","-id","-internet_accessible","-lifecycle","-name","-origin","-platform","-prod_numeric_grade","-prod_type","-prod_type__name","-product_manager","-product_manager__first_name","-product_manager__last_name","-revenue","-team_manager","-team_manager__first_name","-team_manager__last_name","-technical_contact","-technical_contact__first_name","-technical_contact__last_name","-tid","-updated","-user_records","business_criticality","created","external_audience","id","internet_accessible","lifecycle","name","origin","platform","prod_numeric_grade","prod_type","prod_type__name","product_manager","product_manager__first_name","product_manager__last_name","revenue","team_manager","team_manager__first_name","team_manager__last_name","technical_contact","technical_contact__first_name","technical_contact__last_name","tid","updated","user_records"]}},"description":"Ordering\n\n* `id` - Id\n* `-id` - Id (descending)\n* `tid` - Tid\n* `-tid` - Tid (descending)\n* `name` - Name\n* `-name` - Name (descending)\n* `created` - Created\n* `-created` - Created (descending)\n* `prod_numeric_grade` - Prod numeric grade\n* `-prod_numeric_grade` - Prod numeric grade (descending)\n* `business_criticality` - Business criticality\n* `-business_criticality` - Business criticality (descending)\n* `platform` - Platform\n* `-platform` - Platform (descending)\n* `lifecycle` - Lifecycle\n* `-lifecycle` - Lifecycle (descending)\n* `origin` - Origin\n* `-origin` - Origin (descending)\n* `revenue` - Revenue\n* `-revenue` - Revenue (descending)\n* `external_audience` - External audience\n* `-external_audience` - External audience (descending)\n* `internet_accessible` - Internet accessible\n* `-internet_accessible` - Internet accessible (descending)\n* `product_manager` - Product manager\n* `-product_manager` - Product manager (descending)\n* `product_manager__first_name` - Product manager  first name\n* `-product_manager__first_name` - Product manager  first name (descending)\n* `product_manager__last_name` - Product manager  last name\n* `-product_manager__last_name` - Product manager  last name (descending)\n* `technical_contact` - Technical contact\n* `-technical_contact` - Technical contact (descending)\n* `technical_contact__first_name` - Technical contact  first name\n* `-technical_contact__first_name` - Technical contact  first name (descending)\n* `technical_contact__last_name` - Technical contact  last name\n* `-technical_contact__last_name` - Technical contact  last name (descending)\n* `team_manager` - Team manager\n* `-team_manager` - Team manager (descending)\n* `team_manager__first_name` - Team manager  first name\n* `-team_manager__first_name` - Team manager  first name (descending)\n* `team_manager__last_name` - Team manager  last name\n* `-team_manager__last_name` - Team manager  last name (descending)\n* `prod_type` - Prod type\n* `-prod_type` - Prod type (descending)\n* `prod_type__name` - Prod type  name\n* `-prod_type__name` - Prod type  name (descending)\n* `updated` - Updated\n* `-updated` - Updated (descending)\n* `user_records` - User records\n* `-user_records` - User records (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"origin","schema":{"type":"array","items":{"type":"string","x-spec-enum-id":"435026afe6c513fa","nullable":true,"enum":["contractor","internal","open source","outsourced","purchased","third party library"]}},"description":"* `third party library` - Third Party Library\n* `purchased` - Purchased\n* `contractor` - Contractor Developed\n* `internal` - Internally Developed\n* `open source` - Open Source\n* `outsourced` - Outsourced","explode":true,"style":"form"},{"in":"query","name":"outside_of_sla","schema":{"type":"number"}},{"in":"query","name":"platform","schema":{"type":"array","items":{"type":"string","x-spec-enum-id":"48ed03cfd9c8641d","nullable":true,"enum":["desktop","iot","mobile","web","web service"]}},"description":"* `web service` - API\n* `desktop` - Desktop\n* `iot` - Internet of Things\n* `mobile` - Mobile\n* `web` - Web","explode":true,"style":"form"},{"in":"query","name":"prod_numeric_grade","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"prod_type","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"product_manager","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"regulations","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"revenue","schema":{"type":"number"}},{"in":"query","name":"tag","schema":{"type":"string"},"description":"Tag name contains"},{"in":"query","name":"tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags (uses OR for multiple values)","explode":false,"style":"form"},{"in":"query","name":"tags__and","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags to match with an AND expression","explode":false,"style":"form"},{"in":"query","name":"team_manager","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"technical_contact","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"tid","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"updated","schema":{"type":"string","format":"date-time","nullable":true,"enum":[1,2,3,4,5,6,7,null]},"description":"Time that the object was most recently saved to the database\n\n* `None` - Any date\n* `1` - Today\n* `2` - Past 7 days\n* `3` - Past 30 days\n* `4` - Past 90 days\n* `5` - Current month\n* `6` - Current year\n* `7` - Past year"},{"in":"query","name":"user_records","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"}],"tags":["products"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedAuditLogList"}}},"description":""}}}},"/api/v2/products/{id}/history/legacy/":{"get":{"operationId":"products_history_legacy_list","description":"Get legacy audit log for an object (django-auditlog entries) with pagination.\n\nSupports pagination, filtering, and sorting.\nAvailable at both /api/v2/ and /api/vue/ endpoints.","parameters":[{"in":"query","name":"business_criticality","schema":{"type":"array","items":{"type":"string","x-spec-enum-id":"ef412461eb271471","nullable":true,"enum":["high","low","medium","none","very high","very low"]}},"description":"* `very high` - Very High\n* `high` - High\n* `medium` - Medium\n* `low` - Low\n* `very low` - Very Low\n* `none` - None","explode":true,"style":"form"},{"in":"query","name":"created","schema":{"type":"string","format":"date-time","nullable":true,"enum":[1,2,3,4,5,6,7,null]},"description":"Time that the object was initially created, and saved to the database\n\n* `None` - Any date\n* `1` - Today\n* `2` - Past 7 days\n* `3` - Past 30 days\n* `4` - Past 90 days\n* `5` - Current month\n* `6` - Current year\n* `7` - Past year"},{"in":"query","name":"description","schema":{"type":"string"}},{"in":"query","name":"external_audience","schema":{"type":"boolean"}},{"in":"query","name":"has_tags","schema":{"type":"boolean"},"description":"Has tags"},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product.","required":true},{"in":"query","name":"id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"internet_accessible","schema":{"type":"boolean"}},{"in":"query","name":"lifecycle","schema":{"type":"array","items":{"type":"string","x-spec-enum-id":"65f9d93250b96377","nullable":true,"enum":["construction","production","retirement"]}},"description":"* `construction` - Construction\n* `production` - Production\n* `retirement` - Retirement","explode":true,"style":"form"},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"name","schema":{"type":"string"}},{"in":"query","name":"name_exact","schema":{"type":"string"}},{"in":"query","name":"not_tag","schema":{"type":"string"},"description":"Not Tag name contains"},{"in":"query","name":"not_tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags not present on Asset","explode":false,"style":"form"},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-business_criticality","-created","-external_audience","-id","-internet_accessible","-lifecycle","-name","-origin","-platform","-prod_numeric_grade","-prod_type","-prod_type__name","-product_manager","-product_manager__first_name","-product_manager__last_name","-revenue","-team_manager","-team_manager__first_name","-team_manager__last_name","-technical_contact","-technical_contact__first_name","-technical_contact__last_name","-tid","-updated","-user_records","business_criticality","created","external_audience","id","internet_accessible","lifecycle","name","origin","platform","prod_numeric_grade","prod_type","prod_type__name","product_manager","product_manager__first_name","product_manager__last_name","revenue","team_manager","team_manager__first_name","team_manager__last_name","technical_contact","technical_contact__first_name","technical_contact__last_name","tid","updated","user_records"]}},"description":"Ordering\n\n* `id` - Id\n* `-id` - Id (descending)\n* `tid` - Tid\n* `-tid` - Tid (descending)\n* `name` - Name\n* `-name` - Name (descending)\n* `created` - Created\n* `-created` - Created (descending)\n* `prod_numeric_grade` - Prod numeric grade\n* `-prod_numeric_grade` - Prod numeric grade (descending)\n* `business_criticality` - Business criticality\n* `-business_criticality` - Business criticality (descending)\n* `platform` - Platform\n* `-platform` - Platform (descending)\n* `lifecycle` - Lifecycle\n* `-lifecycle` - Lifecycle (descending)\n* `origin` - Origin\n* `-origin` - Origin (descending)\n* `revenue` - Revenue\n* `-revenue` - Revenue (descending)\n* `external_audience` - External audience\n* `-external_audience` - External audience (descending)\n* `internet_accessible` - Internet accessible\n* `-internet_accessible` - Internet accessible (descending)\n* `product_manager` - Product manager\n* `-product_manager` - Product manager (descending)\n* `product_manager__first_name` - Product manager  first name\n* `-product_manager__first_name` - Product manager  first name (descending)\n* `product_manager__last_name` - Product manager  last name\n* `-product_manager__last_name` - Product manager  last name (descending)\n* `technical_contact` - Technical contact\n* `-technical_contact` - Technical contact (descending)\n* `technical_contact__first_name` - Technical contact  first name\n* `-technical_contact__first_name` - Technical contact  first name (descending)\n* `technical_contact__last_name` - Technical contact  last name\n* `-technical_contact__last_name` - Technical contact  last name (descending)\n* `team_manager` - Team manager\n* `-team_manager` - Team manager (descending)\n* `team_manager__first_name` - Team manager  first name\n* `-team_manager__first_name` - Team manager  first name (descending)\n* `team_manager__last_name` - Team manager  last name\n* `-team_manager__last_name` - Team manager  last name (descending)\n* `prod_type` - Prod type\n* `-prod_type` - Prod type (descending)\n* `prod_type__name` - Prod type  name\n* `-prod_type__name` - Prod type  name (descending)\n* `updated` - Updated\n* `-updated` - Updated (descending)\n* `user_records` - User records\n* `-user_records` - User records (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"origin","schema":{"type":"array","items":{"type":"string","x-spec-enum-id":"435026afe6c513fa","nullable":true,"enum":["contractor","internal","open source","outsourced","purchased","third party library"]}},"description":"* `third party library` - Third Party Library\n* `purchased` - Purchased\n* `contractor` - Contractor Developed\n* `internal` - Internally Developed\n* `open source` - Open Source\n* `outsourced` - Outsourced","explode":true,"style":"form"},{"in":"query","name":"outside_of_sla","schema":{"type":"number"}},{"in":"query","name":"platform","schema":{"type":"array","items":{"type":"string","x-spec-enum-id":"48ed03cfd9c8641d","nullable":true,"enum":["desktop","iot","mobile","web","web service"]}},"description":"* `web service` - API\n* `desktop` - Desktop\n* `iot` - Internet of Things\n* `mobile` - Mobile\n* `web` - Web","explode":true,"style":"form"},{"in":"query","name":"prod_numeric_grade","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"prod_type","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"product_manager","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"regulations","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"revenue","schema":{"type":"number"}},{"in":"query","name":"tag","schema":{"type":"string"},"description":"Tag name contains"},{"in":"query","name":"tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags (uses OR for multiple values)","explode":false,"style":"form"},{"in":"query","name":"tags__and","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags to match with an AND expression","explode":false,"style":"form"},{"in":"query","name":"team_manager","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"technical_contact","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"tid","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"updated","schema":{"type":"string","format":"date-time","nullable":true,"enum":[1,2,3,4,5,6,7,null]},"description":"Time that the object was most recently saved to the database\n\n* `None` - Any date\n* `1` - Today\n* `2` - Past 7 days\n* `3` - Past 30 days\n* `4` - Past 90 days\n* `5` - Current month\n* `6` - Current year\n* `7` - Past year"},{"in":"query","name":"user_records","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"}],"tags":["products"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedLegacyAuditLogList"}}},"description":""}}}},"/api/v2/products/{id}/history/legacy/count/":{"get":{"operationId":"products_history_legacy_count_retrieve","description":"Get the total count of legacy audit log entries for an object.\n\nApplies the same filters as history_legacy (date filter, LegacyAuditLogFilter)\nto ensure the count matches what users will see when viewing the legacy history page.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this product.","required":true}],"tags":["products"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"integer"}}}}},"description":""}}}},"/api/v2/program_insights/cumulative_cost_savings/":{"get":{"operationId":"program_insights_cumulative_cost_savings_retrieve","description":"the cumulative cost saved monthly (assuming noise reduction saved $5 per\nfinding)","tags":["program_insights"],"security":[{"tokenAuth":[]}],"responses":{"200":{"description":"No response body"}}}},"/api/v2/program_insights/efficiency_increase/":{"get":{"operationId":"program_insights_efficiency_increase_retrieve","description":"the efficiency increased, calculated by the total sum of findings that are\nduplicates, false positives, or that were closed, reactivated, or left untouched\nby an import/reimport divided by the total number of findings","tags":["program_insights"],"security":[{"tokenAuth":[]}],"responses":{"200":{"description":"No response body"}}}},"/api/v2/program_insights/findings_fixed/":{"get":{"operationId":"program_insights_findings_fixed_retrieve","description":"the total number of findings fixed (mitigated)","tags":["program_insights"],"security":[{"tokenAuth":[]}],"responses":{"200":{"description":"No response body"}}}},"/api/v2/program_insights/noise_reduction_by_category/":{"get":{"operationId":"program_insights_noise_reduction_by_category_retrieve","description":"total findings grouped by noise reduction category, i.e. findings that were\nclosed, reactivated, or left untouched by an import/reimport or findings that\nare duplicates, false positives","tags":["program_insights"],"security":[{"tokenAuth":[]}],"responses":{"200":{"description":"No response body"}}}},"/api/v2/program_insights/noise_reduction_categories_over_time/":{"get":{"operationId":"program_insights_noise_reduction_categories_over_time_retrieve","description":"findings grouped monthly by noise reduction category, i.e. findings that were\nclosed, reactivated, or left untouched by an import/reimport or findings that\nhave a duplicate or false positive status","tags":["program_insights"],"security":[{"tokenAuth":[]}],"responses":{"200":{"description":"No response body"}}}},"/api/v2/program_insights/products_tested/":{"get":{"operationId":"program_insights_products_tested_retrieve","description":"the total number of products tested (findings were created)","tags":["program_insights"],"security":[{"tokenAuth":[]}],"responses":{"200":{"description":"No response body"}}}},"/api/v2/program_insights/tests_performed/":{"get":{"operationId":"program_insights_tests_performed_retrieve","description":"the total number of tests performed","tags":["program_insights"],"security":[{"tokenAuth":[]}],"responses":{"200":{"description":"No response body"}}}},"/api/v2/regulations/":{"get":{"operationId":"regulations_list","parameters":[{"in":"query","name":"description","schema":{"type":"string"}},{"in":"query","name":"id","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"name","schema":{"type":"string"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["regulations"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedRegulationList"}}},"description":""}}},"post":{"operationId":"regulations_create","tags":["regulations"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegulationRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/RegulationRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/RegulationRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Regulation"}}},"description":""}}}},"/api/v2/regulations/{id}/":{"get":{"operationId":"regulations_retrieve","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this regulation.","required":true}],"tags":["regulations"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Regulation"}}},"description":""}}},"put":{"operationId":"regulations_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this regulation.","required":true}],"tags":["regulations"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegulationRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/RegulationRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/RegulationRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Regulation"}}},"description":""}}},"patch":{"operationId":"regulations_partial_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this regulation.","required":true}],"tags":["regulations"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedRegulationRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedRegulationRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedRegulationRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Regulation"}}},"description":""}}},"delete":{"operationId":"regulations_destroy","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this regulation.","required":true}],"tags":["regulations"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/regulations/{id}/delete_preview/":{"get":{"operationId":"regulations_delete_preview_list","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this regulation.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["regulations"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/reimport-scan/":{"post":{"operationId":"reimport_scan_create","description":"Reimports a scan report into an existing test.\n\nBy ID:\n- Create a Product (or use an existing product)\n- Create an Engagement inside the product\n- Import a scan report and find the id of the Test\n- Provide this in the `test` parameter\n\nBy Names:\n- Create a Product (or use an existing product)\n- Create an Engagement inside the product\n- Import a report which will create a Test\n- Provide `product_name`\n- Provide `engagement_name`\n- Optional: Provide `test_title`\n\nIn this scenario Defect Dojo will look up the Test by the provided details.\nIf no `test_title` is provided, the latest test inside the engagement will be chosen based on scan_type.\n\nWhen using names you can let the importer automatically create Engagements, Products and Product_Types\nby using `auto_create_context=True`.\n\nWhen `auto_create_context` is set to `True` you can use `deduplication_on_engagement` to restrict deduplication for\nimported Findings to the newly created Engagement.","tags":["reimport-scan"],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/AsyncReImportScanRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AsyncReImportScan"}}},"description":""}}}},"/api/v2/reimport-scan/preview/":{"post":{"operationId":"reimport_scan_preview_create","description":"Parse a scan file against an existing test (by test id or engagement + scan_type) and return top-level reimport outcome counts without modifying the database.","summary":"Preview reimport scan","tags":["reimport-scan"],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ReImportPreviewRequestRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReImportPreviewResponse"}}},"description":""},"400":{"description":"Invalid payload, test/product not found, or engagement criteria could not be resolved."},"401":{"description":"Not authenticated."},"403":{"description":"Import preview is disabled for this site or the user lacks access."}}}},"/api/v2/remediation_insights/average_time_to_remediation/":{"get":{"operationId":"remediation_insights_average_time_to_remediation_retrieve","description":"the average time taken for a finding to go from open to mitigated by date","tags":["remediation_insights"],"security":[{"tokenAuth":[]}],"responses":{"200":{"description":"No response body"}}}},"/api/v2/remediation_insights/open_over_time/":{"get":{"operationId":"remediation_insights_open_over_time_retrieve","description":"the total number of findings opened by day since first finding creation","tags":["remediation_insights"],"security":[{"tokenAuth":[]}],"responses":{"200":{"description":"No response body"}}}},"/api/v2/remediation_insights/past_sla_by_product/":{"get":{"operationId":"remediation_insights_past_sla_by_product_retrieve","description":"total number of non-mitigated findings past sla, grouped by product/product manager","tags":["remediation_insights"],"security":[{"tokenAuth":[]}],"responses":{"200":{"description":"No response body"}}}},"/api/v2/remediation_insights/past_sla_by_product_type/":{"get":{"operationId":"remediation_insights_past_sla_by_product_type_retrieve","description":"total number of non-mitigated findings past sla, grouped by product type","tags":["remediation_insights"],"security":[{"tokenAuth":[]}],"responses":{"200":{"description":"No response body"}}}},"/api/v2/remediation_insights/past_sla_by_severity_by_product/":{"get":{"operationId":"remediation_insights_past_sla_by_severity_by_product_retrieve","description":"total number of non-mitigated findings past sla by severity, grouped by product","tags":["remediation_insights"],"security":[{"tokenAuth":[]}],"responses":{"200":{"description":"No response body"}}}},"/api/v2/remediation_insights/risk_accepted_over_time/":{"get":{"operationId":"remediation_insights_risk_accepted_over_time_retrieve","description":"total number of findings risk accepted over time by severity","tags":["remediation_insights"],"security":[{"tokenAuth":[]}],"responses":{"200":{"description":"No response body"}}}},"/api/v2/remediation_insights/summary/":{"get":{"operationId":"remediation_insights_summary_retrieve","description":"basic metrics counts","tags":["remediation_insights"],"security":[{"tokenAuth":[]}],"responses":{"200":{"description":"No response body"}}}},"/api/v2/report_blocks/":{"get":{"operationId":"report_blocks_list","parameters":[{"in":"query","name":"block_type","schema":{"type":"string"}},{"in":"query","name":"created","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"created_after","schema":{"type":"string","format":"date"}},{"in":"query","name":"created_before","schema":{"type":"string","format":"date"}},{"in":"query","name":"created_by","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"created_during","schema":{"type":"string"}},{"in":"query","name":"created_on","schema":{"type":"string"}},{"in":"query","name":"created_past_days","schema":{"type":"number"}},{"in":"query","name":"description","schema":{"type":"string"}},{"in":"query","name":"description_contains","schema":{"type":"string"}},{"in":"query","name":"description_ends_with","schema":{"type":"string"}},{"in":"query","name":"description_exact","schema":{"type":"string"}},{"in":"query","name":"description_not_contains","schema":{"type":"string"}},{"in":"query","name":"description_not_exact","schema":{"type":"string"}},{"in":"query","name":"description_not_regex","schema":{"type":"string"}},{"in":"query","name":"description_regex","schema":{"type":"string"}},{"in":"query","name":"description_starts_with","schema":{"type":"string"}},{"in":"query","name":"exclude_id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"header","schema":{"type":"string"}},{"in":"query","name":"header_contains","schema":{"type":"string"}},{"in":"query","name":"header_ends_with","schema":{"type":"string"}},{"in":"query","name":"header_exact","schema":{"type":"string"}},{"in":"query","name":"header_not_contains","schema":{"type":"string"}},{"in":"query","name":"header_not_exact","schema":{"type":"string"}},{"in":"query","name":"header_not_regex","schema":{"type":"string"}},{"in":"query","name":"header_regex","schema":{"type":"string"}},{"in":"query","name":"header_starts_with","schema":{"type":"string"}},{"in":"query","name":"id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"id_equals","schema":{"type":"integer"}},{"in":"query","name":"id_greater_than","schema":{"type":"integer"}},{"in":"query","name":"id_greater_than_equal_to","schema":{"type":"integer"}},{"in":"query","name":"id_in","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"id_less_than","schema":{"type":"integer"}},{"in":"query","name":"id_less_than_equal_to","schema":{"type":"integer"}},{"in":"query","name":"id_not_equals","schema":{"type":"integer"}},{"in":"query","name":"id_not_in","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"is_system","schema":{"type":"boolean"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"name","schema":{"type":"string"}},{"in":"query","name":"name_contains","schema":{"type":"string"}},{"in":"query","name":"name_ends_with","schema":{"type":"string"}},{"in":"query","name":"name_exact","schema":{"type":"string"}},{"in":"query","name":"name_not_contains","schema":{"type":"string"}},{"in":"query","name":"name_not_exact","schema":{"type":"string"}},{"in":"query","name":"name_not_regex","schema":{"type":"string"}},{"in":"query","name":"name_regex","schema":{"type":"string"}},{"in":"query","name":"name_starts_with","schema":{"type":"string"}},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-block_type","-created","-created_by","-id","-name","-updated","block_type","created","created_by","id","name","updated"]}},"description":"Ordering\n\n* `id` - Id\n* `-id` - Id (descending)\n* `name` - Name\n* `-name` - Name (descending)\n* `block_type` - Block type\n* `-block_type` - Block type (descending)\n* `created_by` - Created by\n* `-created_by` - Created by (descending)\n* `created` - Created\n* `-created` - Created (descending)\n* `updated` - Updated\n* `-updated` - Updated (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"search","schema":{"type":"string"},"description":"Search Across: name, block_type, created_by__username, created_by__first_name, created_by__last_name"},{"in":"query","name":"updated","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"updated_after","schema":{"type":"string","format":"date"}},{"in":"query","name":"updated_before","schema":{"type":"string","format":"date"}},{"in":"query","name":"updated_during","schema":{"type":"string"}},{"in":"query","name":"updated_on","schema":{"type":"string"}},{"in":"query","name":"updated_past_days","schema":{"type":"number"}}],"tags":["report_blocks"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedProReportBlockListList"}}},"description":""}}},"post":{"operationId":"report_blocks_create","tags":["report_blocks"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProReportBlockRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ProReportBlockRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ProReportBlockRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProReportBlock"}}},"description":""}}}},"/api/v2/report_blocks/{id}/":{"get":{"operationId":"report_blocks_retrieve","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Report Block.","required":true}],"tags":["report_blocks"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProReportBlock"}}},"description":""}}},"put":{"operationId":"report_blocks_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Report Block.","required":true}],"tags":["report_blocks"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProReportBlockRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ProReportBlockRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ProReportBlockRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProReportBlock"}}},"description":""}}},"patch":{"operationId":"report_blocks_partial_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Report Block.","required":true}],"tags":["report_blocks"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedProReportBlockRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedProReportBlockRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedProReportBlockRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProReportBlock"}}},"description":""}}},"delete":{"operationId":"report_blocks_destroy","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Report Block.","required":true}],"tags":["report_blocks"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/report_blocks/{id}/chart_data/":{"post":{"operationId":"report_blocks_chart_data_existing_create","description":"Aggregated series for a saved chart block — used to capture fresh snapshots at\ngeneration / template-preview time. Body may carry runtime_filters (Quick Report).","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Report Block.","required":true}],"tags":["report_blocks"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProReportBlockRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ProReportBlockRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ProReportBlockRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProReportBlock"}}},"description":""}}}},"/api/v2/report_blocks/{id}/duplicate/":{"post":{"operationId":"report_blocks_duplicate_create","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Report Block.","required":true}],"tags":["report_blocks"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProReportBlockRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ProReportBlockRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ProReportBlockRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProReportBlock"}}},"description":""}}}},"/api/v2/report_blocks/{id}/preview/":{"post":{"operationId":"report_blocks_preview_existing_create","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Report Block.","required":true}],"tags":["report_blocks"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProReportBlockRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ProReportBlockRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ProReportBlockRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProReportBlock"}}},"description":""}}}},"/api/v2/report_blocks/chart_data/":{"post":{"operationId":"report_blocks_chart_data_create","description":"Aggregated series for a transient (unsaved) chart config — drives the config-form\nlive preview. Body: {model_choice, chart_key, filter_entries, runtime_filters?}.","tags":["report_blocks"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProReportBlockRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ProReportBlockRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ProReportBlockRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProReportBlock"}}},"description":""}}}},"/api/v2/report_blocks/chart_options/":{"get":{"operationId":"report_blocks_chart_options_retrieve","description":"The catalog of available graphs for the chart-block config form.","tags":["report_blocks"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProReportBlock"}}},"description":""}}}},"/api/v2/report_blocks/field_options/":{"get":{"operationId":"report_blocks_field_options_retrieve","tags":["report_blocks"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProReportBlock"}}},"description":""}}}},"/api/v2/report_blocks/preview/":{"post":{"operationId":"report_blocks_preview_create","tags":["report_blocks"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProReportBlockRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ProReportBlockRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ProReportBlockRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProReportBlock"}}},"description":""}}}},"/api/v2/report_templates/":{"get":{"operationId":"report_templates_list","parameters":[{"in":"query","name":"created","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"created_after","schema":{"type":"string","format":"date"}},{"in":"query","name":"created_before","schema":{"type":"string","format":"date"}},{"in":"query","name":"created_by","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"created_during","schema":{"type":"string"}},{"in":"query","name":"created_on","schema":{"type":"string"}},{"in":"query","name":"created_past_days","schema":{"type":"number"}},{"in":"query","name":"description","schema":{"type":"string"}},{"in":"query","name":"description_contains","schema":{"type":"string"}},{"in":"query","name":"description_ends_with","schema":{"type":"string"}},{"in":"query","name":"description_exact","schema":{"type":"string"}},{"in":"query","name":"description_not_contains","schema":{"type":"string"}},{"in":"query","name":"description_not_exact","schema":{"type":"string"}},{"in":"query","name":"description_not_regex","schema":{"type":"string"}},{"in":"query","name":"description_regex","schema":{"type":"string"}},{"in":"query","name":"description_starts_with","schema":{"type":"string"}},{"in":"query","name":"exclude_id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"id_equals","schema":{"type":"integer"}},{"in":"query","name":"id_greater_than","schema":{"type":"integer"}},{"in":"query","name":"id_greater_than_equal_to","schema":{"type":"integer"}},{"in":"query","name":"id_in","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"id_less_than","schema":{"type":"integer"}},{"in":"query","name":"id_less_than_equal_to","schema":{"type":"integer"}},{"in":"query","name":"id_not_equals","schema":{"type":"integer"}},{"in":"query","name":"id_not_in","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"is_system","schema":{"type":"boolean"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"name","schema":{"type":"string"}},{"in":"query","name":"name_contains","schema":{"type":"string"}},{"in":"query","name":"name_ends_with","schema":{"type":"string"}},{"in":"query","name":"name_exact","schema":{"type":"string"}},{"in":"query","name":"name_not_contains","schema":{"type":"string"}},{"in":"query","name":"name_not_exact","schema":{"type":"string"}},{"in":"query","name":"name_not_regex","schema":{"type":"string"}},{"in":"query","name":"name_regex","schema":{"type":"string"}},{"in":"query","name":"name_starts_with","schema":{"type":"string"}},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-created","-created_by","-description","-id","-name","-updated","created","created_by","description","id","name","updated"]}},"description":"Ordering\n\n* `id` - Id\n* `-id` - Id (descending)\n* `name` - Name\n* `-name` - Name (descending)\n* `description` - Description\n* `-description` - Description (descending)\n* `created_by` - Created by\n* `-created_by` - Created by (descending)\n* `created` - Created\n* `-created` - Created (descending)\n* `updated` - Updated\n* `-updated` - Updated (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"search","schema":{"type":"string"},"description":"Search Across: name, description, created_by__username, created_by__first_name, created_by__last_name"},{"in":"query","name":"theme","schema":{"type":"integer"}},{"in":"query","name":"updated","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"updated_after","schema":{"type":"string","format":"date"}},{"in":"query","name":"updated_before","schema":{"type":"string","format":"date"}},{"in":"query","name":"updated_during","schema":{"type":"string"}},{"in":"query","name":"updated_on","schema":{"type":"string"}},{"in":"query","name":"updated_past_days","schema":{"type":"number"}}],"tags":["report_templates"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedProReportTemplateListList"}}},"description":""}}},"post":{"operationId":"report_templates_create","tags":["report_templates"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProReportTemplateRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ProReportTemplateRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ProReportTemplateRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProReportTemplate"}}},"description":""}}}},"/api/v2/report_templates/{id}/":{"get":{"operationId":"report_templates_retrieve","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Report Template.","required":true}],"tags":["report_templates"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProReportTemplate"}}},"description":""}}},"put":{"operationId":"report_templates_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Report Template.","required":true}],"tags":["report_templates"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProReportTemplateRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ProReportTemplateRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ProReportTemplateRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProReportTemplate"}}},"description":""}}},"patch":{"operationId":"report_templates_partial_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Report Template.","required":true}],"tags":["report_templates"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedProReportTemplateRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedProReportTemplateRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedProReportTemplateRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProReportTemplate"}}},"description":""}}},"delete":{"operationId":"report_templates_destroy","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Report Template.","required":true}],"tags":["report_templates"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/report_templates/{id}/duplicate/":{"post":{"operationId":"report_templates_duplicate_create","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Report Template.","required":true}],"tags":["report_templates"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProReportTemplateRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ProReportTemplateRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ProReportTemplateRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProReportTemplate"}}},"description":""}}}},"/api/v2/report_templates/{id}/preview/":{"post":{"operationId":"report_templates_preview_create","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Report Template.","required":true}],"tags":["report_templates"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProReportTemplateRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ProReportTemplateRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ProReportTemplateRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProReportTemplate"}}},"description":""}}}},"/api/v2/report_themes/":{"get":{"operationId":"report_themes_list","parameters":[{"in":"query","name":"accent_color","schema":{"type":"string"}},{"in":"query","name":"background_color","schema":{"type":"string"}},{"in":"query","name":"base_font_size","schema":{"type":"integer"}},{"in":"query","name":"created","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"created_after","schema":{"type":"string","format":"date"}},{"in":"query","name":"created_before","schema":{"type":"string","format":"date"}},{"in":"query","name":"created_by","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"created_during","schema":{"type":"string"}},{"in":"query","name":"created_on","schema":{"type":"string"}},{"in":"query","name":"created_past_days","schema":{"type":"number"}},{"in":"query","name":"exclude_id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"footer_image","schema":{"type":"integer"}},{"in":"query","name":"footer_text","schema":{"type":"string"}},{"in":"query","name":"footer_text_contains","schema":{"type":"string"}},{"in":"query","name":"footer_text_ends_with","schema":{"type":"string"}},{"in":"query","name":"footer_text_exact","schema":{"type":"string"}},{"in":"query","name":"footer_text_not_contains","schema":{"type":"string"}},{"in":"query","name":"footer_text_not_exact","schema":{"type":"string"}},{"in":"query","name":"footer_text_not_regex","schema":{"type":"string"}},{"in":"query","name":"footer_text_regex","schema":{"type":"string"}},{"in":"query","name":"footer_text_starts_with","schema":{"type":"string"}},{"in":"query","name":"header_image","schema":{"type":"integer"}},{"in":"query","name":"id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"id_equals","schema":{"type":"integer"}},{"in":"query","name":"id_greater_than","schema":{"type":"integer"}},{"in":"query","name":"id_greater_than_equal_to","schema":{"type":"integer"}},{"in":"query","name":"id_in","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"id_less_than","schema":{"type":"integer"}},{"in":"query","name":"id_less_than_equal_to","schema":{"type":"integer"}},{"in":"query","name":"id_not_equals","schema":{"type":"integer"}},{"in":"query","name":"id_not_in","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"name","schema":{"type":"string"}},{"in":"query","name":"name_contains","schema":{"type":"string"}},{"in":"query","name":"name_ends_with","schema":{"type":"string"}},{"in":"query","name":"name_exact","schema":{"type":"string"}},{"in":"query","name":"name_not_contains","schema":{"type":"string"}},{"in":"query","name":"name_not_exact","schema":{"type":"string"}},{"in":"query","name":"name_not_regex","schema":{"type":"string"}},{"in":"query","name":"name_regex","schema":{"type":"string"}},{"in":"query","name":"name_starts_with","schema":{"type":"string"}},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-created","-created_by","-footer_text","-id","-name","-updated","created","created_by","footer_text","id","name","updated"]}},"description":"Ordering\n\n* `id` - Id\n* `-id` - Id (descending)\n* `name` - Name\n* `-name` - Name (descending)\n* `footer_text` - Footer text\n* `-footer_text` - Footer text (descending)\n* `created_by` - Created by\n* `-created_by` - Created by (descending)\n* `created` - Created\n* `-created` - Created (descending)\n* `updated` - Updated\n* `-updated` - Updated (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"primary_color","schema":{"type":"string"}},{"in":"query","name":"search","schema":{"type":"string"},"description":"Search Across: name, footer_text"},{"in":"query","name":"secondary_color","schema":{"type":"string"}},{"in":"query","name":"show_page_numbers","schema":{"type":"boolean"}},{"in":"query","name":"text_color","schema":{"type":"string"}},{"in":"query","name":"updated","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"updated_after","schema":{"type":"string","format":"date"}},{"in":"query","name":"updated_before","schema":{"type":"string","format":"date"}},{"in":"query","name":"updated_during","schema":{"type":"string"}},{"in":"query","name":"updated_on","schema":{"type":"string"}},{"in":"query","name":"updated_past_days","schema":{"type":"number"}}],"tags":["report_themes"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedProReportThemeList"}}},"description":""}}},"post":{"operationId":"report_themes_create","tags":["report_themes"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProReportThemeRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ProReportThemeRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ProReportThemeRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProReportTheme"}}},"description":""}}}},"/api/v2/report_themes/{id}/":{"get":{"operationId":"report_themes_retrieve","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Report Theme.","required":true}],"tags":["report_themes"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProReportTheme"}}},"description":""}}},"put":{"operationId":"report_themes_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Report Theme.","required":true}],"tags":["report_themes"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProReportThemeRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ProReportThemeRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ProReportThemeRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProReportTheme"}}},"description":""}}},"patch":{"operationId":"report_themes_partial_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Report Theme.","required":true}],"tags":["report_themes"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedProReportThemeRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedProReportThemeRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedProReportThemeRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProReportTheme"}}},"description":""}}},"delete":{"operationId":"report_themes_destroy","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Report Theme.","required":true}],"tags":["report_themes"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/request_response_pairs/":{"get":{"operationId":"request_response_pairs_list","parameters":[{"in":"query","name":"finding","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["request_response_pairs"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedBurpRawRequestResponseMultiList"}}},"description":""}}},"post":{"operationId":"request_response_pairs_create","tags":["request_response_pairs"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BurpRawRequestResponseMultiRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/BurpRawRequestResponseMultiRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/BurpRawRequestResponseMultiRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BurpRawRequestResponseMulti"}}},"description":""}}}},"/api/v2/request_response_pairs/{id}/":{"get":{"operationId":"request_response_pairs_retrieve","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this burp raw request response.","required":true}],"tags":["request_response_pairs"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BurpRawRequestResponseMulti"}}},"description":""}}},"put":{"operationId":"request_response_pairs_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this burp raw request response.","required":true}],"tags":["request_response_pairs"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BurpRawRequestResponseMultiRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/BurpRawRequestResponseMultiRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/BurpRawRequestResponseMultiRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BurpRawRequestResponseMulti"}}},"description":""}}},"patch":{"operationId":"request_response_pairs_partial_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this burp raw request response.","required":true}],"tags":["request_response_pairs"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedBurpRawRequestResponseMultiRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedBurpRawRequestResponseMultiRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedBurpRawRequestResponseMultiRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BurpRawRequestResponseMulti"}}},"description":""}}},"delete":{"operationId":"request_response_pairs_destroy","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this burp raw request response.","required":true}],"tags":["request_response_pairs"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/request_response_pairs/{id}/delete_preview/":{"get":{"operationId":"request_response_pairs_delete_preview_list","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this burp raw request response.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["request_response_pairs"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/risk_acceptance/":{"get":{"operationId":"risk_acceptance_list","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"query","name":"accepted_by","schema":{"type":"string"}},{"in":"query","name":"accepted_findings","schema":{"type":"array","items":{"type":"integer"}},"explode":true,"style":"form"},{"in":"query","name":"decision","schema":{"type":"string","x-spec-enum-id":"8690fff015f0d4c3","enum":["A","F","M","T","V"]},"description":"Risk treatment decision by risk owner\n\n* `A` - Accept (The risk is acknowledged, yet remains)\n* `V` - Avoid (Do not engage with whatever creates the risk)\n* `M` - Mitigate (The risk still exists, yet compensating controls make it less of a threat)\n* `F` - Fix (The risk is eradicated)\n* `T` - Transfer (The risk is transferred to a 3rd party)"},{"in":"query","name":"decision_details","schema":{"type":"string"}},{"in":"query","name":"expiration_date","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"expiration_date_handled","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"expiration_date_warned","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"is_global","schema":{"type":"boolean"},"description":"is_global"},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"name","schema":{"type":"string"}},{"in":"query","name":"notes","schema":{"type":"array","items":{"type":"integer"}},"explode":true,"style":"form"},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-name","name"]}},"description":"Ordering\n\n* `name` - Name\n* `-name` - Name (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"owner","schema":{"type":"integer"}},{"in":"query","name":"reactivate_expired","schema":{"type":"boolean"}},{"in":"query","name":"recommendation","schema":{"type":"string","x-spec-enum-id":"8690fff015f0d4c3","title":"Security Recommendation","enum":["A","F","M","T","V"]},"description":"Recommendation from the security team.\n\n* `A` - Accept (The risk is acknowledged, yet remains)\n* `V` - Avoid (Do not engage with whatever creates the risk)\n* `M` - Mitigate (The risk still exists, yet compensating controls make it less of a threat)\n* `F` - Fix (The risk is eradicated)\n* `T` - Transfer (The risk is transferred to a 3rd party)"},{"in":"query","name":"recommendation_details","schema":{"type":"string"}},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"},{"in":"query","name":"restart_sla_expired","schema":{"type":"boolean"}}],"tags":["risk_acceptance"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedEnhancedRiskAcceptanceList"}}},"description":""}}},"post":{"operationId":"risk_acceptance_create","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","tags":["risk_acceptance"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedRiskAcceptanceRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/EnhancedRiskAcceptanceRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/EnhancedRiskAcceptanceRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedRiskAcceptance"}}},"description":""}}}},"/api/v2/risk_acceptance/{id}/":{"get":{"operationId":"risk_acceptance_retrieve","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this risk_ acceptance.","required":true},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"}],"tags":["risk_acceptance"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedRiskAcceptance"}}},"description":""}}},"put":{"operationId":"risk_acceptance_update","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this risk_ acceptance.","required":true}],"tags":["risk_acceptance"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedRiskAcceptanceRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/EnhancedRiskAcceptanceRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/EnhancedRiskAcceptanceRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedRiskAcceptance"}}},"description":""}}},"patch":{"operationId":"risk_acceptance_partial_update","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this risk_ acceptance.","required":true}],"tags":["risk_acceptance"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedEnhancedRiskAcceptanceRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedEnhancedRiskAcceptanceRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedEnhancedRiskAcceptanceRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedRiskAcceptance"}}},"description":""}}},"delete":{"operationId":"risk_acceptance_destroy","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this risk_ acceptance.","required":true}],"tags":["risk_acceptance"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/risk_acceptance/{id}/delete_preview/":{"get":{"operationId":"risk_acceptance_delete_preview_list","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this risk_ acceptance.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["risk_acceptance"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/risk_acceptance/{id}/download_proof/":{"get":{"operationId":"risk_acceptance_download_proof_retrieve","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this risk_ acceptance.","required":true}],"tags":["risk_acceptance"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RiskAcceptanceProof"}}},"description":""}}}},"/api/v2/risk_acceptance/{id}/history/":{"get":{"operationId":"risk_acceptance_history_list","description":"Get audit log entries for an object with pagination.\n\nUses DojoEvents.objects.tracks(obj) to get events for the object itself,\nand DojoEvents.objects.references(obj) to get events for related objects\n(objects with foreign keys pointing to this object). Supports pagination, filtering, and sorting.\nAvailable at both /api/v2/ and /api/vue/ endpoints.\n\nArgs:\n    field_filter: Optional field name to filter by (e.g., \"finding_enrichment_settings\").\n                Only entries with changes to this field will be returned.","parameters":[{"in":"query","name":"accepted_by","schema":{"type":"string"}},{"in":"query","name":"accepted_findings","schema":{"type":"array","items":{"type":"integer"}},"explode":true,"style":"form"},{"in":"query","name":"decision","schema":{"type":"string","x-spec-enum-id":"8690fff015f0d4c3","enum":["A","F","M","T","V"]},"description":"Risk treatment decision by risk owner\n\n* `A` - Accept (The risk is acknowledged, yet remains)\n* `V` - Avoid (Do not engage with whatever creates the risk)\n* `M` - Mitigate (The risk still exists, yet compensating controls make it less of a threat)\n* `F` - Fix (The risk is eradicated)\n* `T` - Transfer (The risk is transferred to a 3rd party)"},{"in":"query","name":"decision_details","schema":{"type":"string"}},{"in":"query","name":"expiration_date","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"expiration_date_handled","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"expiration_date_warned","schema":{"type":"string","format":"date-time"}},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this risk_ acceptance.","required":true},{"in":"query","name":"is_global","schema":{"type":"boolean"},"description":"is_global"},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"name","schema":{"type":"string"}},{"in":"query","name":"notes","schema":{"type":"array","items":{"type":"integer"}},"explode":true,"style":"form"},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-name","name"]}},"description":"Ordering\n\n* `name` - Name\n* `-name` - Name (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"owner","schema":{"type":"integer"}},{"in":"query","name":"reactivate_expired","schema":{"type":"boolean"}},{"in":"query","name":"recommendation","schema":{"type":"string","x-spec-enum-id":"8690fff015f0d4c3","title":"Security Recommendation","enum":["A","F","M","T","V"]},"description":"Recommendation from the security team.\n\n* `A` - Accept (The risk is acknowledged, yet remains)\n* `V` - Avoid (Do not engage with whatever creates the risk)\n* `M` - Mitigate (The risk still exists, yet compensating controls make it less of a threat)\n* `F` - Fix (The risk is eradicated)\n* `T` - Transfer (The risk is transferred to a 3rd party)"},{"in":"query","name":"recommendation_details","schema":{"type":"string"}},{"in":"query","name":"restart_sla_expired","schema":{"type":"boolean"}}],"tags":["risk_acceptance"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedAuditLogList"}}},"description":""}}}},"/api/v2/risk_acceptance/{id}/history/legacy/":{"get":{"operationId":"risk_acceptance_history_legacy_list","description":"Get legacy audit log for an object (django-auditlog entries) with pagination.\n\nSupports pagination, filtering, and sorting.\nAvailable at both /api/v2/ and /api/vue/ endpoints.","parameters":[{"in":"query","name":"accepted_by","schema":{"type":"string"}},{"in":"query","name":"accepted_findings","schema":{"type":"array","items":{"type":"integer"}},"explode":true,"style":"form"},{"in":"query","name":"decision","schema":{"type":"string","x-spec-enum-id":"8690fff015f0d4c3","enum":["A","F","M","T","V"]},"description":"Risk treatment decision by risk owner\n\n* `A` - Accept (The risk is acknowledged, yet remains)\n* `V` - Avoid (Do not engage with whatever creates the risk)\n* `M` - Mitigate (The risk still exists, yet compensating controls make it less of a threat)\n* `F` - Fix (The risk is eradicated)\n* `T` - Transfer (The risk is transferred to a 3rd party)"},{"in":"query","name":"decision_details","schema":{"type":"string"}},{"in":"query","name":"expiration_date","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"expiration_date_handled","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"expiration_date_warned","schema":{"type":"string","format":"date-time"}},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this risk_ acceptance.","required":true},{"in":"query","name":"is_global","schema":{"type":"boolean"},"description":"is_global"},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"name","schema":{"type":"string"}},{"in":"query","name":"notes","schema":{"type":"array","items":{"type":"integer"}},"explode":true,"style":"form"},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-name","name"]}},"description":"Ordering\n\n* `name` - Name\n* `-name` - Name (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"owner","schema":{"type":"integer"}},{"in":"query","name":"reactivate_expired","schema":{"type":"boolean"}},{"in":"query","name":"recommendation","schema":{"type":"string","x-spec-enum-id":"8690fff015f0d4c3","title":"Security Recommendation","enum":["A","F","M","T","V"]},"description":"Recommendation from the security team.\n\n* `A` - Accept (The risk is acknowledged, yet remains)\n* `V` - Avoid (Do not engage with whatever creates the risk)\n* `M` - Mitigate (The risk still exists, yet compensating controls make it less of a threat)\n* `F` - Fix (The risk is eradicated)\n* `T` - Transfer (The risk is transferred to a 3rd party)"},{"in":"query","name":"recommendation_details","schema":{"type":"string"}},{"in":"query","name":"restart_sla_expired","schema":{"type":"boolean"}}],"tags":["risk_acceptance"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedLegacyAuditLogList"}}},"description":""}}}},"/api/v2/risk_acceptance/{id}/history/legacy/count/":{"get":{"operationId":"risk_acceptance_history_legacy_count_retrieve","description":"Get the total count of legacy audit log entries for an object.\n\nApplies the same filters as history_legacy (date filter, LegacyAuditLogFilter)\nto ensure the count matches what users will see when viewing the legacy history page.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this risk_ acceptance.","required":true}],"tags":["risk_acceptance"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"integer"}}}}},"description":""}}}},"/api/v2/risk_acceptance/{id}/notes/":{"get":{"operationId":"risk_acceptance_notes_retrieve","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this risk_ acceptance.","required":true}],"tags":["risk_acceptance"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RiskAcceptanceToNotes"}}},"description":""}}},"post":{"operationId":"risk_acceptance_notes_create","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this risk_ acceptance.","required":true}],"tags":["risk_acceptance"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddNewNoteOptionRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/AddNewNoteOptionRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/AddNewNoteOptionRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Note"}}},"description":""}}}},"/api/v2/risk_acceptance/{id}/upload_proof/":{"post":{"operationId":"risk_acceptance_upload_proof_create","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this risk_ acceptance.","required":true}],"tags":["risk_acceptance"],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/EnhancedRiskAcceptanceProofRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedRiskAcceptanceProof"}}},"description":""}}}},"/api/v2/roles/":{"get":{"operationId":"roles_list","parameters":[{"in":"query","name":"id","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"name","schema":{"type":"string"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["roles"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedRoleList"}}},"description":""}}}},"/api/v2/roles/{id}/":{"get":{"operationId":"roles_retrieve","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this role.","required":true}],"tags":["roles"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Role"}}},"description":""}}}},"/api/v2/sbom-import/":{"post":{"operationId":"sbom_import_create","description":"Imports an SBOM or dependency manifest into a product.\n\nParses the file using the specified scan type parser, extracts all\ncomponent/dependency locations, and associates them with the product.\nNo findings, tests, or engagements are created.","tags":["sbom-import"],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/SbomImportRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SbomImport"}}},"description":""}}}},"/api/v2/sbom-import/status/{task_id}/":{"get":{"operationId":"sbom_import_status_retrieve","description":"Imports an SBOM or dependency manifest into a product.\n\nParses the file using the specified scan type parser, extracts all\ncomponent/dependency locations, and associates them with the product.\nNo findings, tests, or engagements are created.","parameters":[{"in":"path","name":"task_id","schema":{"type":"string"},"required":true}],"tags":["sbom-import"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SbomImport"}}},"description":""}}}},"/api/v2/sensei/fix_quota/":{"get":{"operationId":"sensei_fix_quota_retrieve","description":"Token-authenticated Sensei usage endpoints called by the\n``DefectDojo-Inc/defectdojo-scan-and-fix`` GitHub action — NOT the Vue UI.\n\nMounted on the public-facing ``/api/v2/`` API so the action authenticates\nwith the ``DEFECTDOJO_TOKEN`` it was configured with (same auth as\n``/api/v2/reimport-scan/``). Gated behind the ``sensei`` licensed feature.\n\n- ``GET  /api/v2/sensei/fix_quota/`` — pre-``/fix`` hard-block gate; returns\n  fix accounting so the action can refuse to run when the quota is spent.\n- ``POST /api/v2/sensei/fix_usage/`` — records the findings fixed by a ``/fix``\n  command (the billable unit) and echoes the refreshed quota.\n- ``GET  /api/v2/sensei/push_token/?repo=owner/name`` — mints a short-lived\n  GitHub App installation token so the workflow can ``git push`` a ``/fix``\n  commit. Replaces the stored ``PAT_TOKEN`` secret (Sensei v2 is App-only); an\n  App-token push re-triggers the PR scan, which is the only thing the PAT did.","tags":["sensei"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"description":"No response body"}}}},"/api/v2/sensei/fix_usage/":{"post":{"operationId":"sensei_fix_usage_create","description":"Token-authenticated Sensei usage endpoints called by the\n``DefectDojo-Inc/defectdojo-scan-and-fix`` GitHub action — NOT the Vue UI.\n\nMounted on the public-facing ``/api/v2/`` API so the action authenticates\nwith the ``DEFECTDOJO_TOKEN`` it was configured with (same auth as\n``/api/v2/reimport-scan/``). Gated behind the ``sensei`` licensed feature.\n\n- ``GET  /api/v2/sensei/fix_quota/`` — pre-``/fix`` hard-block gate; returns\n  fix accounting so the action can refuse to run when the quota is spent.\n- ``POST /api/v2/sensei/fix_usage/`` — records the findings fixed by a ``/fix``\n  command (the billable unit) and echoes the refreshed quota.\n- ``GET  /api/v2/sensei/push_token/?repo=owner/name`` — mints a short-lived\n  GitHub App installation token so the workflow can ``git push`` a ``/fix``\n  commit. Replaces the stored ``PAT_TOKEN`` secret (Sensei v2 is App-only); an\n  App-token push re-triggers the PR scan, which is the only thing the PAT did.","tags":["sensei"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FixUsageReportRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/FixUsageReportRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/FixUsageReportRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"description":"No response body"}}}},"/api/v2/sensei/push_token/":{"get":{"operationId":"sensei_push_token_retrieve","description":"Return a short-lived App installation token scoped to ``?repo=``'s account.","tags":["sensei"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"description":"No response body"}}}},"/api/v2/sensei/scan_status/":{"post":{"operationId":"sensei_scan_status_create","description":"Record a server-side run's terminal status. The engine POSTs this when\na job finishes; ``scan_run_id`` echoes the id carried on the job so we can\nflip the right ``SenseiScanRun`` to SUCCEEDED/FAILED (with root cause).","tags":["sensei"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanStatusReportRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ScanStatusReportRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ScanStatusReportRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"description":"No response body"}}}},"/api/v2/sla_configurations/":{"get":{"operationId":"sla_configurations_list","parameters":[{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["sla_configurations"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedSLAConfigurationList"}}},"description":""}}},"post":{"operationId":"sla_configurations_create","tags":["sla_configurations"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SLAConfigurationRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/SLAConfigurationRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/SLAConfigurationRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SLAConfiguration"}}},"description":""}}}},"/api/v2/sla_configurations/{id}/":{"get":{"operationId":"sla_configurations_retrieve","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this enhanced sl a_ configuration.","required":true}],"tags":["sla_configurations"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SLAConfiguration"}}},"description":""}}},"put":{"operationId":"sla_configurations_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this enhanced sl a_ configuration.","required":true}],"tags":["sla_configurations"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SLAConfigurationRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/SLAConfigurationRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/SLAConfigurationRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SLAConfiguration"}}},"description":""}}},"patch":{"operationId":"sla_configurations_partial_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this enhanced sl a_ configuration.","required":true}],"tags":["sla_configurations"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedSLAConfigurationRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedSLAConfigurationRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedSLAConfigurationRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SLAConfiguration"}}},"description":""}}},"delete":{"operationId":"sla_configurations_destroy","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this enhanced sl a_ configuration.","required":true}],"tags":["sla_configurations"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/sla_configurations/{id}/delete_preview/":{"get":{"operationId":"sla_configurations_delete_preview_list","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this sl a_ configuration.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["sla_configurations"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/smart_upload_import/":{"post":{"operationId":"smart_upload_import_create","tags":["smart_upload_import"],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/SmartUploadRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SmartUpload"}}},"description":""}}}},"/api/v2/smart_upload_import/unassigned_findings/":{"get":{"operationId":"smart_upload_import_unassigned_findings_list","parameters":[{"in":"query","name":"date","schema":{"type":"string","format":"date"}},{"in":"query","name":"id","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["reporter","test_type"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"severity","schema":{"type":"string"}},{"in":"query","name":"title","schema":{"type":"string"}}],"tags":["smart_upload_import"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedUnassignedFindingList"}}},"description":""}}}},"/api/v2/smart_upload_import/unassigned_findings/{id}/":{"get":{"operationId":"smart_upload_import_unassigned_findings_retrieve","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this unassigned finding.","required":true},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["reporter","test_type"]}},"description":"List of fields for which to prefetch model instances and add those to the response"}],"tags":["smart_upload_import"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnassignedFinding"}}},"description":""}}},"delete":{"operationId":"smart_upload_import_unassigned_findings_destroy","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this unassigned finding.","required":true}],"tags":["smart_upload_import"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/smart_upload_import/unassigned_findings/assign_existing_product/":{"post":{"operationId":"smart_upload_import_unassigned_findings_assign_existing_product_create","tags":["smart_upload_import"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssignExistingProductRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/AssignExistingProductRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/AssignExistingProductRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssignExistingProduct"}}},"description":""}}}},"/api/v2/smart_upload_import/unassigned_findings/assign_new_product/":{"post":{"operationId":"smart_upload_import_unassigned_findings_assign_new_product_create","tags":["smart_upload_import"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssignNewProductRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/AssignNewProductRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/AssignNewProductRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssignNewProduct"}}},"description":""}}}},"/api/v2/smart_upload_import/unassigned_findings/disregard_all_unassigned_findings/":{"delete":{"operationId":"smart_upload_import_unassigned_findings_disregard_all_unassigned_findings_destroy","tags":["smart_upload_import"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/smart_upload_import/unassigned_findings/disregard_unassigned_findings/":{"post":{"operationId":"smart_upload_import_unassigned_findings_disregard_unassigned_findings_create","tags":["smart_upload_import"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DisregardUnassignedFindingRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/DisregardUnassignedFindingRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/DisregardUnassignedFindingRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DisregardUnassignedFinding"}}},"description":""}}}},"/api/v2/sonarqube_issues/":{"get":{"operationId":"sonarqube_issues_list","parameters":[{"in":"query","name":"finding_status","schema":{"type":"string"}},{"in":"query","name":"id","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"sonarqube_issue","schema":{"type":"integer"}},{"in":"query","name":"sonarqube_status","schema":{"type":"string"}},{"in":"query","name":"transitions","schema":{"type":"string"}}],"tags":["sonarqube_issues"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedSonarqubeIssueTransitionList"}}},"description":""}}},"post":{"operationId":"sonarqube_issues_create","tags":["sonarqube_issues"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SonarqubeIssueTransitionRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/SonarqubeIssueTransitionRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/SonarqubeIssueTransitionRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SonarqubeIssueTransition"}}},"description":""}}}},"/api/v2/sonarqube_issues/{id}/":{"get":{"operationId":"sonarqube_issues_retrieve","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this sonarqube_ issue_ transition.","required":true}],"tags":["sonarqube_issues"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SonarqubeIssueTransition"}}},"description":""}}},"put":{"operationId":"sonarqube_issues_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this sonarqube_ issue_ transition.","required":true}],"tags":["sonarqube_issues"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SonarqubeIssueTransitionRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/SonarqubeIssueTransitionRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/SonarqubeIssueTransitionRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SonarqubeIssueTransition"}}},"description":""}}},"patch":{"operationId":"sonarqube_issues_partial_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this sonarqube_ issue_ transition.","required":true}],"tags":["sonarqube_issues"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedSonarqubeIssueTransitionRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedSonarqubeIssueTransitionRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedSonarqubeIssueTransitionRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SonarqubeIssueTransition"}}},"description":""}}},"delete":{"operationId":"sonarqube_issues_destroy","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this sonarqube_ issue_ transition.","required":true}],"tags":["sonarqube_issues"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/sonarqube_issues/{id}/delete_preview/":{"get":{"operationId":"sonarqube_issues_delete_preview_list","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this sonarqube_ issue_ transition.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["sonarqube_issues"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/sonarqube_transitions/":{"get":{"operationId":"sonarqube_transitions_list","parameters":[{"in":"query","name":"id","schema":{"type":"integer"}},{"in":"query","name":"key","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"status","schema":{"type":"string"}},{"in":"query","name":"type","schema":{"type":"string"}}],"tags":["sonarqube_transitions"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedSonarqubeIssueList"}}},"description":""}}},"post":{"operationId":"sonarqube_transitions_create","tags":["sonarqube_transitions"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SonarqubeIssueRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/SonarqubeIssueRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/SonarqubeIssueRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SonarqubeIssue"}}},"description":""}}}},"/api/v2/sonarqube_transitions/{id}/":{"get":{"operationId":"sonarqube_transitions_retrieve","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this sonarqube_ issue.","required":true}],"tags":["sonarqube_transitions"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SonarqubeIssue"}}},"description":""}}},"put":{"operationId":"sonarqube_transitions_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this sonarqube_ issue.","required":true}],"tags":["sonarqube_transitions"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SonarqubeIssueRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/SonarqubeIssueRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/SonarqubeIssueRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SonarqubeIssue"}}},"description":""}}},"patch":{"operationId":"sonarqube_transitions_partial_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this sonarqube_ issue.","required":true}],"tags":["sonarqube_transitions"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedSonarqubeIssueRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedSonarqubeIssueRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedSonarqubeIssueRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SonarqubeIssue"}}},"description":""}}},"delete":{"operationId":"sonarqube_transitions_destroy","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this sonarqube_ issue.","required":true}],"tags":["sonarqube_transitions"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/sonarqube_transitions/{id}/delete_preview/":{"get":{"operationId":"sonarqube_transitions_delete_preview_list","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this sonarqube_ issue.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["sonarqube_transitions"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/survey_questions/":{"get":{"operationId":"survey_questions_list","parameters":[{"in":"query","name":"exclude_id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"id_equals","schema":{"type":"integer"}},{"in":"query","name":"id_greater_than","schema":{"type":"integer"}},{"in":"query","name":"id_greater_than_equal_to","schema":{"type":"integer"}},{"in":"query","name":"id_in","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"id_less_than","schema":{"type":"integer"}},{"in":"query","name":"id_less_than_equal_to","schema":{"type":"integer"}},{"in":"query","name":"id_not_equals","schema":{"type":"integer"}},{"in":"query","name":"id_not_in","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-id","-optional","-text","-type","id","optional","text","type"]}},"description":"Ordering\n\n* `id` - Id\n* `-id` - Id (descending)\n* `type` - Type\n* `-type` - Type (descending)\n* `text` - Text\n* `-text` - Text (descending)\n* `optional` - Optional\n* `-optional` - Optional (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"optional","schema":{"type":"boolean"}},{"in":"query","name":"search","schema":{"type":"string"},"description":"Search Across: type, text"},{"in":"query","name":"text_contains","schema":{"type":"string"}},{"in":"query","name":"text_ends_with","schema":{"type":"string"}},{"in":"query","name":"text_exact","schema":{"type":"string"}},{"in":"query","name":"text_not_contains","schema":{"type":"string"}},{"in":"query","name":"text_not_exact","schema":{"type":"string"}},{"in":"query","name":"text_not_regex","schema":{"type":"string"}},{"in":"query","name":"text_regex","schema":{"type":"string"}},{"in":"query","name":"text_starts_with","schema":{"type":"string"}},{"in":"query","name":"type","schema":{"type":"string"}}],"tags":["survey_questions"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedProQuestionList"}}},"description":""}}},"post":{"operationId":"survey_questions_create","tags":["survey_questions"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProQuestionRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ProQuestionRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ProQuestionRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProQuestion"}}},"description":""}}}},"/api/v2/survey_questions/{id}/":{"get":{"operationId":"survey_questions_retrieve","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this question.","required":true}],"tags":["survey_questions"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProQuestion"}}},"description":""}}},"put":{"operationId":"survey_questions_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this question.","required":true}],"tags":["survey_questions"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProQuestionRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ProQuestionRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ProQuestionRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProQuestion"}}},"description":""}}},"patch":{"operationId":"survey_questions_partial_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this question.","required":true}],"tags":["survey_questions"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedProQuestionRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedProQuestionRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedProQuestionRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProQuestion"}}},"description":""}}},"delete":{"operationId":"survey_questions_destroy","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this question.","required":true}],"tags":["survey_questions"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/survey_questions/{id}/history/":{"get":{"operationId":"survey_questions_history_list","description":"Get audit log entries for an object with pagination.\n\nUses DojoEvents.objects.tracks(obj) to get events for the object itself,\nand DojoEvents.objects.references(obj) to get events for related objects\n(objects with foreign keys pointing to this object). Supports pagination, filtering, and sorting.\nAvailable at both /api/v2/ and /api/vue/ endpoints.\n\nArgs:\n    field_filter: Optional field name to filter by (e.g., \"finding_enrichment_settings\").\n                Only entries with changes to this field will be returned.","parameters":[{"in":"query","name":"exclude_id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this question.","required":true},{"in":"query","name":"id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"id_equals","schema":{"type":"integer"}},{"in":"query","name":"id_greater_than","schema":{"type":"integer"}},{"in":"query","name":"id_greater_than_equal_to","schema":{"type":"integer"}},{"in":"query","name":"id_in","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"id_less_than","schema":{"type":"integer"}},{"in":"query","name":"id_less_than_equal_to","schema":{"type":"integer"}},{"in":"query","name":"id_not_equals","schema":{"type":"integer"}},{"in":"query","name":"id_not_in","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-id","-optional","-text","-type","id","optional","text","type"]}},"description":"Ordering\n\n* `id` - Id\n* `-id` - Id (descending)\n* `type` - Type\n* `-type` - Type (descending)\n* `text` - Text\n* `-text` - Text (descending)\n* `optional` - Optional\n* `-optional` - Optional (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"optional","schema":{"type":"boolean"}},{"in":"query","name":"search","schema":{"type":"string"},"description":"Search Across: type, text"},{"in":"query","name":"text_contains","schema":{"type":"string"}},{"in":"query","name":"text_ends_with","schema":{"type":"string"}},{"in":"query","name":"text_exact","schema":{"type":"string"}},{"in":"query","name":"text_not_contains","schema":{"type":"string"}},{"in":"query","name":"text_not_exact","schema":{"type":"string"}},{"in":"query","name":"text_not_regex","schema":{"type":"string"}},{"in":"query","name":"text_regex","schema":{"type":"string"}},{"in":"query","name":"text_starts_with","schema":{"type":"string"}},{"in":"query","name":"type","schema":{"type":"string"}}],"tags":["survey_questions"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedAuditLogList"}}},"description":""}}}},"/api/v2/survey_questions/{id}/history/legacy/":{"get":{"operationId":"survey_questions_history_legacy_list","description":"Get legacy audit log for an object (django-auditlog entries) with pagination.\n\nSupports pagination, filtering, and sorting.\nAvailable at both /api/v2/ and /api/vue/ endpoints.","parameters":[{"in":"query","name":"exclude_id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this question.","required":true},{"in":"query","name":"id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"id_equals","schema":{"type":"integer"}},{"in":"query","name":"id_greater_than","schema":{"type":"integer"}},{"in":"query","name":"id_greater_than_equal_to","schema":{"type":"integer"}},{"in":"query","name":"id_in","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"id_less_than","schema":{"type":"integer"}},{"in":"query","name":"id_less_than_equal_to","schema":{"type":"integer"}},{"in":"query","name":"id_not_equals","schema":{"type":"integer"}},{"in":"query","name":"id_not_in","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-id","-optional","-text","-type","id","optional","text","type"]}},"description":"Ordering\n\n* `id` - Id\n* `-id` - Id (descending)\n* `type` - Type\n* `-type` - Type (descending)\n* `text` - Text\n* `-text` - Text (descending)\n* `optional` - Optional\n* `-optional` - Optional (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"optional","schema":{"type":"boolean"}},{"in":"query","name":"search","schema":{"type":"string"},"description":"Search Across: type, text"},{"in":"query","name":"text_contains","schema":{"type":"string"}},{"in":"query","name":"text_ends_with","schema":{"type":"string"}},{"in":"query","name":"text_exact","schema":{"type":"string"}},{"in":"query","name":"text_not_contains","schema":{"type":"string"}},{"in":"query","name":"text_not_exact","schema":{"type":"string"}},{"in":"query","name":"text_not_regex","schema":{"type":"string"}},{"in":"query","name":"text_regex","schema":{"type":"string"}},{"in":"query","name":"text_starts_with","schema":{"type":"string"}},{"in":"query","name":"type","schema":{"type":"string"}}],"tags":["survey_questions"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedLegacyAuditLogList"}}},"description":""}}}},"/api/v2/survey_questions/{id}/history/legacy/count/":{"get":{"operationId":"survey_questions_history_legacy_count_retrieve","description":"Get the total count of legacy audit log entries for an object.\n\nApplies the same filters as history_legacy (date filter, LegacyAuditLogFilter)\nto ensure the count matches what users will see when viewing the legacy history page.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this question.","required":true}],"tags":["survey_questions"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"integer"}}}}},"description":""}}}},"/api/v2/surveys/":{"get":{"operationId":"surveys_list","parameters":[{"in":"query","name":"active","schema":{"type":"boolean"}},{"in":"query","name":"description_contains","schema":{"type":"string"}},{"in":"query","name":"description_ends_with","schema":{"type":"string"}},{"in":"query","name":"description_exact","schema":{"type":"string"}},{"in":"query","name":"description_not_contains","schema":{"type":"string"}},{"in":"query","name":"description_not_exact","schema":{"type":"string"}},{"in":"query","name":"description_not_regex","schema":{"type":"string"}},{"in":"query","name":"description_regex","schema":{"type":"string"}},{"in":"query","name":"description_starts_with","schema":{"type":"string"}},{"in":"query","name":"exclude_id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"id_equals","schema":{"type":"integer"}},{"in":"query","name":"id_greater_than","schema":{"type":"integer"}},{"in":"query","name":"id_greater_than_equal_to","schema":{"type":"integer"}},{"in":"query","name":"id_in","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"id_less_than","schema":{"type":"integer"}},{"in":"query","name":"id_less_than_equal_to","schema":{"type":"integer"}},{"in":"query","name":"id_not_equals","schema":{"type":"integer"}},{"in":"query","name":"id_not_in","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"name_contains","schema":{"type":"string"}},{"in":"query","name":"name_ends_with","schema":{"type":"string"}},{"in":"query","name":"name_exact","schema":{"type":"string"}},{"in":"query","name":"name_not_contains","schema":{"type":"string"}},{"in":"query","name":"name_not_exact","schema":{"type":"string"}},{"in":"query","name":"name_not_regex","schema":{"type":"string"}},{"in":"query","name":"name_regex","schema":{"type":"string"}},{"in":"query","name":"name_starts_with","schema":{"type":"string"}},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-active","-description","-id","-name","active","description","id","name"]}},"description":"Ordering\n\n* `id` - Id\n* `-id` - Id (descending)\n* `name` - Name\n* `-name` - Name (descending)\n* `description` - Description\n* `-description` - Description (descending)\n* `active` - Active\n* `-active` - Active (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"search","schema":{"type":"string"},"description":"Search Across: name, description"}],"tags":["surveys"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedProSurveyList"}}},"description":""}}},"post":{"operationId":"surveys_create","tags":["surveys"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProSurveyRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ProSurveyRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ProSurveyRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProSurvey"}}},"description":""}}}},"/api/v2/surveys/{id}/":{"get":{"operationId":"surveys_retrieve","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Engagement Survey.","required":true}],"tags":["surveys"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProSurvey"}}},"description":""}}},"put":{"operationId":"surveys_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Engagement Survey.","required":true}],"tags":["surveys"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProSurveyRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ProSurveyRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ProSurveyRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProSurvey"}}},"description":""}}},"patch":{"operationId":"surveys_partial_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Engagement Survey.","required":true}],"tags":["surveys"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedProSurveyRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedProSurveyRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedProSurveyRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProSurvey"}}},"description":""}}},"delete":{"operationId":"surveys_destroy","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Engagement Survey.","required":true}],"tags":["surveys"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/surveys/{id}/history/":{"get":{"operationId":"surveys_history_list","description":"Get audit log entries for an object with pagination.\n\nUses DojoEvents.objects.tracks(obj) to get events for the object itself,\nand DojoEvents.objects.references(obj) to get events for related objects\n(objects with foreign keys pointing to this object). Supports pagination, filtering, and sorting.\nAvailable at both /api/v2/ and /api/vue/ endpoints.\n\nArgs:\n    field_filter: Optional field name to filter by (e.g., \"finding_enrichment_settings\").\n                Only entries with changes to this field will be returned.","parameters":[{"in":"query","name":"active","schema":{"type":"boolean"}},{"in":"query","name":"description_contains","schema":{"type":"string"}},{"in":"query","name":"description_ends_with","schema":{"type":"string"}},{"in":"query","name":"description_exact","schema":{"type":"string"}},{"in":"query","name":"description_not_contains","schema":{"type":"string"}},{"in":"query","name":"description_not_exact","schema":{"type":"string"}},{"in":"query","name":"description_not_regex","schema":{"type":"string"}},{"in":"query","name":"description_regex","schema":{"type":"string"}},{"in":"query","name":"description_starts_with","schema":{"type":"string"}},{"in":"query","name":"exclude_id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Engagement Survey.","required":true},{"in":"query","name":"id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"id_equals","schema":{"type":"integer"}},{"in":"query","name":"id_greater_than","schema":{"type":"integer"}},{"in":"query","name":"id_greater_than_equal_to","schema":{"type":"integer"}},{"in":"query","name":"id_in","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"id_less_than","schema":{"type":"integer"}},{"in":"query","name":"id_less_than_equal_to","schema":{"type":"integer"}},{"in":"query","name":"id_not_equals","schema":{"type":"integer"}},{"in":"query","name":"id_not_in","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"name_contains","schema":{"type":"string"}},{"in":"query","name":"name_ends_with","schema":{"type":"string"}},{"in":"query","name":"name_exact","schema":{"type":"string"}},{"in":"query","name":"name_not_contains","schema":{"type":"string"}},{"in":"query","name":"name_not_exact","schema":{"type":"string"}},{"in":"query","name":"name_not_regex","schema":{"type":"string"}},{"in":"query","name":"name_regex","schema":{"type":"string"}},{"in":"query","name":"name_starts_with","schema":{"type":"string"}},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-active","-description","-id","-name","active","description","id","name"]}},"description":"Ordering\n\n* `id` - Id\n* `-id` - Id (descending)\n* `name` - Name\n* `-name` - Name (descending)\n* `description` - Description\n* `-description` - Description (descending)\n* `active` - Active\n* `-active` - Active (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"search","schema":{"type":"string"},"description":"Search Across: name, description"}],"tags":["surveys"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedAuditLogList"}}},"description":""}}}},"/api/v2/surveys/{id}/history/legacy/":{"get":{"operationId":"surveys_history_legacy_list","description":"Get legacy audit log for an object (django-auditlog entries) with pagination.\n\nSupports pagination, filtering, and sorting.\nAvailable at both /api/v2/ and /api/vue/ endpoints.","parameters":[{"in":"query","name":"active","schema":{"type":"boolean"}},{"in":"query","name":"description_contains","schema":{"type":"string"}},{"in":"query","name":"description_ends_with","schema":{"type":"string"}},{"in":"query","name":"description_exact","schema":{"type":"string"}},{"in":"query","name":"description_not_contains","schema":{"type":"string"}},{"in":"query","name":"description_not_exact","schema":{"type":"string"}},{"in":"query","name":"description_not_regex","schema":{"type":"string"}},{"in":"query","name":"description_regex","schema":{"type":"string"}},{"in":"query","name":"description_starts_with","schema":{"type":"string"}},{"in":"query","name":"exclude_id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Engagement Survey.","required":true},{"in":"query","name":"id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"id_equals","schema":{"type":"integer"}},{"in":"query","name":"id_greater_than","schema":{"type":"integer"}},{"in":"query","name":"id_greater_than_equal_to","schema":{"type":"integer"}},{"in":"query","name":"id_in","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"id_less_than","schema":{"type":"integer"}},{"in":"query","name":"id_less_than_equal_to","schema":{"type":"integer"}},{"in":"query","name":"id_not_equals","schema":{"type":"integer"}},{"in":"query","name":"id_not_in","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"name_contains","schema":{"type":"string"}},{"in":"query","name":"name_ends_with","schema":{"type":"string"}},{"in":"query","name":"name_exact","schema":{"type":"string"}},{"in":"query","name":"name_not_contains","schema":{"type":"string"}},{"in":"query","name":"name_not_exact","schema":{"type":"string"}},{"in":"query","name":"name_not_regex","schema":{"type":"string"}},{"in":"query","name":"name_regex","schema":{"type":"string"}},{"in":"query","name":"name_starts_with","schema":{"type":"string"}},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-active","-description","-id","-name","active","description","id","name"]}},"description":"Ordering\n\n* `id` - Id\n* `-id` - Id (descending)\n* `name` - Name\n* `-name` - Name (descending)\n* `description` - Description\n* `-description` - Description (descending)\n* `active` - Active\n* `-active` - Active (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"search","schema":{"type":"string"},"description":"Search Across: name, description"}],"tags":["surveys"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedLegacyAuditLogList"}}},"description":""}}}},"/api/v2/surveys/{id}/history/legacy/count/":{"get":{"operationId":"surveys_history_legacy_count_retrieve","description":"Get the total count of legacy audit log entries for an object.\n\nApplies the same filters as history_legacy (date filter, LegacyAuditLogFilter)\nto ensure the count matches what users will see when viewing the legacy history page.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Engagement Survey.","required":true}],"tags":["surveys"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"integer"}}}}},"description":""}}}},"/api/v2/surveys/{id}/open/":{"post":{"operationId":"surveys_open_create","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Engagement Survey.","required":true}],"tags":["surveys"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProSurveyRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ProSurveyRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ProSurveyRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProSurvey"}}},"description":""}}}},"/api/v2/system_settings/":{"get":{"operationId":"system_settings_list","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"}],"tags":["system_settings"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedEnhancedSystemSettingsList"}}},"description":""}}}},"/api/v2/system_settings/{id}/":{"get":{"operationId":"system_settings_retrieve","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this system_ settings.","required":true},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"}],"tags":["system_settings"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedSystemSettings"}}},"description":""}}},"put":{"operationId":"system_settings_update","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this system_ settings.","required":true}],"tags":["system_settings"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedSystemSettingsRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/EnhancedSystemSettingsRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/EnhancedSystemSettingsRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedSystemSettings"}}},"description":""}}},"patch":{"operationId":"system_settings_partial_update","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this system_ settings.","required":true}],"tags":["system_settings"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedEnhancedSystemSettingsRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedEnhancedSystemSettingsRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedEnhancedSystemSettingsRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedSystemSettings"}}},"description":""}}}},"/api/v2/technologies/":{"get":{"operationId":"technologies_list","parameters":[{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"name","schema":{"type":"string"}},{"in":"query","name":"not_tag","schema":{"type":"string"},"description":"Not Tag name contains"},{"in":"query","name":"not_tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags not present on model","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["product","user"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"product","schema":{"type":"integer"}},{"in":"query","name":"tag","schema":{"type":"string"},"description":"Tag name contains"},{"in":"query","name":"tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags (uses OR for multiple values)","explode":false,"style":"form"},{"in":"query","name":"tags__and","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags to match with an AND expression","explode":false,"style":"form"},{"in":"query","name":"user","schema":{"type":"integer"}},{"in":"query","name":"version","schema":{"type":"string"}}],"tags":["technologies"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedAppAnalysisList"}}},"description":""}}},"post":{"operationId":"technologies_create","tags":["technologies"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppAnalysisRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/AppAnalysisRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/AppAnalysisRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppAnalysis"}}},"description":""}}}},"/api/v2/technologies/{id}/":{"get":{"operationId":"technologies_retrieve","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this app_ analysis.","required":true},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["product","user"]}},"description":"List of fields for which to prefetch model instances and add those to the response"}],"tags":["technologies"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppAnalysis"}}},"description":""}}},"put":{"operationId":"technologies_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this app_ analysis.","required":true}],"tags":["technologies"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppAnalysisRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/AppAnalysisRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/AppAnalysisRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppAnalysis"}}},"description":""}}},"patch":{"operationId":"technologies_partial_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this app_ analysis.","required":true}],"tags":["technologies"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedAppAnalysisRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedAppAnalysisRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedAppAnalysisRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppAnalysis"}}},"description":""}}},"delete":{"operationId":"technologies_destroy","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this app_ analysis.","required":true}],"tags":["technologies"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/technologies/{id}/delete_preview/":{"get":{"operationId":"technologies_delete_preview_list","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this app_ analysis.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["technologies"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/test_imports/":{"get":{"operationId":"test_imports_list","parameters":[{"in":"query","name":"branch_tag","schema":{"type":"string"}},{"in":"query","name":"build_id","schema":{"type":"string"}},{"in":"query","name":"commit_hash","schema":{"type":"string"}},{"in":"query","name":"findings_affected","schema":{"type":"array","items":{"type":"integer"}},"explode":true,"style":"form"},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-branch_tag","-build_id","-commit_hash","-created","-id","-modified","-version","branch_tag","build_id","commit_hash","created","id","modified","version"]}},"description":"Ordering\n\n* `id` - Id\n* `-id` - Id (descending)\n* `created` - Created\n* `-created` - Created (descending)\n* `modified` - Modified\n* `-modified` - Modified (descending)\n* `version` - Version\n* `-version` - Version (descending)\n* `branch_tag` - Branch tag\n* `-branch_tag` - Branch tag (descending)\n* `build_id` - Build id\n* `-build_id` - Build id (descending)\n* `commit_hash` - Commit hash\n* `-commit_hash` - Commit hash (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"test","schema":{"type":"integer"}},{"in":"query","name":"test_import_finding_action__action","schema":{"type":"string","x-spec-enum-id":"630f6e89cd3cf0b8","nullable":true,"enum":["C","N","R","U"]},"description":"* `N` - created\n* `C` - closed\n* `R` - reactivated\n* `U` - untouched"},{"in":"query","name":"test_import_finding_action__created","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"test_import_finding_action__finding","schema":{"type":"integer"}},{"in":"query","name":"version","schema":{"type":"string"}}],"tags":["test_imports"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedTestImportList"}}},"description":""}}},"post":{"operationId":"test_imports_create","tags":["test_imports"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestImportRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/TestImportRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/TestImportRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestImport"}}},"description":""}}}},"/api/v2/test_imports/{id}/":{"get":{"operationId":"test_imports_retrieve","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this test_ import.","required":true}],"tags":["test_imports"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestImport"}}},"description":""}}},"put":{"operationId":"test_imports_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this test_ import.","required":true}],"tags":["test_imports"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestImportRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/TestImportRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/TestImportRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestImport"}}},"description":""}}},"patch":{"operationId":"test_imports_partial_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this test_ import.","required":true}],"tags":["test_imports"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedTestImportRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedTestImportRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedTestImportRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestImport"}}},"description":""}}},"delete":{"operationId":"test_imports_destroy","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this test_ import.","required":true}],"tags":["test_imports"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/test_imports/{id}/delete_preview/":{"get":{"operationId":"test_imports_delete_preview_list","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this test_ import.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["test_imports"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/test_types/":{"get":{"operationId":"test_types_list","parameters":[{"in":"query","name":"active","schema":{"type":"boolean"}},{"in":"query","name":"dynamic_tool","schema":{"type":"boolean"}},{"in":"query","name":"id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"in_use","schema":{"type":"boolean"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"name","schema":{"type":"string"}},{"in":"query","name":"name_ends","schema":{"type":"string"}},{"in":"query","name":"name_starts","schema":{"type":"string"}},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-active","-active_findings_count","-dynamic_tool","-id","-name","-soc","-static_tool","-verified_findings_count","active","active_findings_count","dynamic_tool","id","name","soc","static_tool","verified_findings_count"]}},"description":"Ordering\n\n* `id` - Id\n* `-id` - Id (descending)\n* `name` - Name\n* `-name` - Name (descending)\n* `active_findings_count` - Active findings count\n* `-active_findings_count` - Active findings count (descending)\n* `verified_findings_count` - Verified findings count\n* `-verified_findings_count` - Verified findings count (descending)\n* `static_tool` - Static tool\n* `-static_tool` - Static tool (descending)\n* `dynamic_tool` - Dynamic tool\n* `-dynamic_tool` - Dynamic tool (descending)\n* `active` - Active\n* `-active` - Active (descending)\n* `soc` - Soc\n* `-soc` - Soc (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"soc","schema":{"type":"boolean"}},{"in":"query","name":"static_tool","schema":{"type":"boolean"}}],"tags":["test_types"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedTestTypeList"}}},"description":""}}},"post":{"operationId":"test_types_create","tags":["test_types"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestTypeCreateRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/TestTypeCreateRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/TestTypeCreateRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestTypeCreate"}}},"description":""}}}},"/api/v2/test_types/{id}/":{"get":{"operationId":"test_types_retrieve","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this test_ type.","required":true}],"tags":["test_types"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestType"}}},"description":""}}},"put":{"operationId":"test_types_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this test_ type.","required":true}],"tags":["test_types"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestTypeRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/TestTypeRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/TestTypeRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestType"}}},"description":""}}},"patch":{"operationId":"test_types_partial_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this test_ type.","required":true}],"tags":["test_types"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedTestTypeRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedTestTypeRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedTestTypeRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestType"}}},"description":""}}}},"/api/v2/test_types/{id}/history/":{"get":{"operationId":"test_types_history_list","description":"Get audit log entries for an object with pagination.\n\nUses DojoEvents.objects.tracks(obj) to get events for the object itself,\nand DojoEvents.objects.references(obj) to get events for related objects\n(objects with foreign keys pointing to this object). Supports pagination, filtering, and sorting.\nAvailable at both /api/v2/ and /api/vue/ endpoints.\n\nArgs:\n    field_filter: Optional field name to filter by (e.g., \"finding_enrichment_settings\").\n                Only entries with changes to this field will be returned.","parameters":[{"in":"query","name":"active","schema":{"type":"boolean"}},{"in":"query","name":"dynamic_tool","schema":{"type":"boolean"}},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this test_ type.","required":true},{"in":"query","name":"id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"in_use","schema":{"type":"boolean"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"name","schema":{"type":"string"}},{"in":"query","name":"name_ends","schema":{"type":"string"}},{"in":"query","name":"name_starts","schema":{"type":"string"}},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-active","-active_findings_count","-dynamic_tool","-id","-name","-soc","-static_tool","-verified_findings_count","active","active_findings_count","dynamic_tool","id","name","soc","static_tool","verified_findings_count"]}},"description":"Ordering\n\n* `id` - Id\n* `-id` - Id (descending)\n* `name` - Name\n* `-name` - Name (descending)\n* `active_findings_count` - Active findings count\n* `-active_findings_count` - Active findings count (descending)\n* `verified_findings_count` - Verified findings count\n* `-verified_findings_count` - Verified findings count (descending)\n* `static_tool` - Static tool\n* `-static_tool` - Static tool (descending)\n* `dynamic_tool` - Dynamic tool\n* `-dynamic_tool` - Dynamic tool (descending)\n* `active` - Active\n* `-active` - Active (descending)\n* `soc` - Soc\n* `-soc` - Soc (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"soc","schema":{"type":"boolean"}},{"in":"query","name":"static_tool","schema":{"type":"boolean"}}],"tags":["test_types"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedAuditLogList"}}},"description":""}}}},"/api/v2/test_types/{id}/history/legacy/":{"get":{"operationId":"test_types_history_legacy_list","description":"Get legacy audit log for an object (django-auditlog entries) with pagination.\n\nSupports pagination, filtering, and sorting.\nAvailable at both /api/v2/ and /api/vue/ endpoints.","parameters":[{"in":"query","name":"active","schema":{"type":"boolean"}},{"in":"query","name":"dynamic_tool","schema":{"type":"boolean"}},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this test_ type.","required":true},{"in":"query","name":"id","schema":{"type":"array","items":{"type":"integer"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"in_use","schema":{"type":"boolean"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"name","schema":{"type":"string"}},{"in":"query","name":"name_ends","schema":{"type":"string"}},{"in":"query","name":"name_starts","schema":{"type":"string"}},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-active","-active_findings_count","-dynamic_tool","-id","-name","-soc","-static_tool","-verified_findings_count","active","active_findings_count","dynamic_tool","id","name","soc","static_tool","verified_findings_count"]}},"description":"Ordering\n\n* `id` - Id\n* `-id` - Id (descending)\n* `name` - Name\n* `-name` - Name (descending)\n* `active_findings_count` - Active findings count\n* `-active_findings_count` - Active findings count (descending)\n* `verified_findings_count` - Verified findings count\n* `-verified_findings_count` - Verified findings count (descending)\n* `static_tool` - Static tool\n* `-static_tool` - Static tool (descending)\n* `dynamic_tool` - Dynamic tool\n* `-dynamic_tool` - Dynamic tool (descending)\n* `active` - Active\n* `-active` - Active (descending)\n* `soc` - Soc\n* `-soc` - Soc (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"soc","schema":{"type":"boolean"}},{"in":"query","name":"static_tool","schema":{"type":"boolean"}}],"tags":["test_types"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedLegacyAuditLogList"}}},"description":""}}}},"/api/v2/test_types/{id}/history/legacy/count/":{"get":{"operationId":"test_types_history_legacy_count_retrieve","description":"Get the total count of legacy audit log entries for an object.\n\nApplies the same filters as history_legacy (date filter, LegacyAuditLogFilter)\nto ensure the count matches what users will see when viewing the legacy history page.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this test_ type.","required":true}],"tags":["test_types"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"integer"}}}}},"description":""}}}},"/api/v2/tests/":{"get":{"operationId":"tests_list","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"query","name":"api_scan_configuration","schema":{"type":"integer"}},{"in":"query","name":"branch_tag","schema":{"type":"string"}},{"in":"query","name":"build_id","schema":{"type":"string"}},{"in":"query","name":"commit_hash","schema":{"type":"string"}},{"in":"query","name":"deduplication","schema":{"type":"boolean"},"description":"deduplication"},{"in":"query","name":"engagement","schema":{"type":"integer"}},{"in":"query","name":"engagement__product__tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags present on Asset (uses OR for multiple values)","explode":false,"style":"form"},{"in":"query","name":"engagement__product__tags__and","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags to match with an AND expression present on Asset","explode":false,"style":"form"},{"in":"query","name":"engagement__tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags present on engagement (uses OR for multiple values)","explode":false,"style":"form"},{"in":"query","name":"engagement__tags__and","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags to match with an AND expression present on engagement","explode":false,"style":"form"},{"in":"query","name":"false_positive_history","schema":{"type":"boolean"},"description":"false_positive_history"},{"in":"query","name":"has_tags","schema":{"type":"boolean"},"description":"Has tags"},{"in":"query","name":"id","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"not_engagement__product__tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags not present on Asset","explode":false,"style":"form"},{"in":"query","name":"not_engagement__tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags not present on engagement","explode":false,"style":"form"},{"in":"query","name":"not_tag","schema":{"type":"string"},"description":"Not Tag name contains"},{"in":"query","name":"not_tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags not present on model","explode":false,"style":"form"},{"in":"query","name":"notes","schema":{"type":"array","items":{"type":"integer"}},"explode":true,"style":"form"},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-api_scan_configuration","-branch_tag","-build_id","-commit_hash","-created","-engagement","-lead","-target_end","-target_start","-test_type","-title","-updated","-version","api_scan_configuration","branch_tag","build_id","commit_hash","created","engagement","lead","target_end","target_start","test_type","title","updated","version"]}},"description":"Ordering\n\n* `title` - Title\n* `-title` - Title (descending)\n* `version` - Version\n* `-version` - Version (descending)\n* `target_start` - Target start\n* `-target_start` - Target start (descending)\n* `target_end` - Target end\n* `-target_end` - Target end (descending)\n* `test_type` - Test type\n* `-test_type` - Test type (descending)\n* `lead` - Lead\n* `-lead` - Lead (descending)\n* `branch_tag` - Branch tag\n* `-branch_tag` - Branch tag (descending)\n* `build_id` - Build id\n* `-build_id` - Build id (descending)\n* `commit_hash` - Commit hash\n* `-commit_hash` - Commit hash (descending)\n* `api_scan_configuration` - Api scan configuration\n* `-api_scan_configuration` - Api scan configuration (descending)\n* `engagement` - Engagement\n* `-engagement` - Engagement (descending)\n* `created` - Created\n* `-created` - Created (descending)\n* `updated` - Updated\n* `-updated` - Updated (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"percent_complete","schema":{"type":"integer"}},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["api_scan_configuration","engagement","environment","files","lead","notes","test_type"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"processing","schema":{"type":"boolean"},"description":"processing"},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"},{"in":"query","name":"scan_type","schema":{"type":"string"}},{"in":"query","name":"tag","schema":{"type":"string"},"description":"Tag name contains"},{"in":"query","name":"tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags (uses OR for multiple values)","explode":false,"style":"form"},{"in":"query","name":"tags__and","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags to match with an AND expression","explode":false,"style":"form"},{"in":"query","name":"target_end","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"target_start","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"test_type","schema":{"type":"integer"}},{"in":"query","name":"title","schema":{"type":"string"}},{"in":"query","name":"version","schema":{"type":"string"}}],"tags":["tests"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedTestsList"}}},"description":""}}},"post":{"operationId":"tests_create","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","tags":["tests"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestCreateRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/TestCreateRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/TestCreateRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestCreate"}}},"description":""}}}},"/api/v2/tests/{id}/":{"get":{"operationId":"tests_retrieve","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this test.","required":true},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["api_scan_configuration","engagement","environment","files","lead","notes","test_type"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"}],"tags":["tests"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tests"}}},"description":""}}},"put":{"operationId":"tests_update","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this test.","required":true}],"tags":["tests"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestsRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/TestsRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/TestsRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tests"}}},"description":""}}},"patch":{"operationId":"tests_partial_update","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this test.","required":true}],"tags":["tests"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedTestsRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedTestsRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedTestsRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tests"}}},"description":""}}},"delete":{"operationId":"tests_destroy","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this test.","required":true}],"tags":["tests"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/tests/{id}/accept_risks/":{"post":{"operationId":"tests_accept_risks_create","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this test.","required":true}],"tags":["tests"],"requestBody":{"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AcceptedRiskRequest"}}},"application/x-www-form-urlencoded":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AcceptedRiskRequest"}}},"multipart/form-data":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AcceptedRiskRequest"}}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/RiskAcceptance"}}}},"description":""}}}},"/api/v2/tests/{id}/delete_preview/":{"get":{"operationId":"tests_delete_preview_list","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this test.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["tests"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/tests/{id}/files/":{"get":{"operationId":"tests_files_retrieve","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this test.","required":true}],"tags":["tests"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestToFiles"}}},"description":""}}},"post":{"operationId":"tests_files_create","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this test.","required":true}],"tags":["tests"],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/AddNewFileOptionRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/File"}}},"description":""}}}},"/api/v2/tests/{id}/files/{file_id}/":{"delete":{"operationId":"tests_files_destroy","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"file_id","schema":{"type":"string","pattern":"^\\d+$"},"required":true},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this test.","required":true}],"tags":["tests"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/tests/{id}/files/change_name/{file_id}/":{"patch":{"operationId":"tests_files_change_name_partial_update","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"file_id","schema":{"type":"string","pattern":"^\\d+$"},"required":true},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this test.","required":true}],"tags":["tests"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedFileNameRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedFileNameRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedFileNameRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"description":"No response body"}}}},"/api/v2/tests/{id}/files/download/{file_id}/":{"get":{"operationId":"tests_files_download_retrieve","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"file_id","schema":{"type":"string","pattern":"^\\d+$"},"required":true},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this test.","required":true}],"tags":["tests"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RawFile"}}},"description":""}}}},"/api/v2/tests/{id}/finding_diff/{other_id}/":{"get":{"operationId":"tests_finding_diff_retrieve","description":"Compares the findings associated with the two objects and returns\nadded, removed, equality, and improvement information.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this test.","required":true},{"in":"path","name":"other_id","schema":{"type":"string","pattern":"^\\d+$"},"required":true}],"tags":["tests"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindingDiff"}}},"description":""}}}},"/api/v2/tests/{id}/generate_report/":{"post":{"operationId":"tests_generate_report_create","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this test.","required":true}],"tags":["tests"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportGenerateOptionRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ReportGenerateOptionRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ReportGenerateOptionRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportGenerate"}}},"description":""}}}},"/api/v2/tests/{id}/history/":{"get":{"operationId":"tests_history_list","description":"Get audit log entries for an object with pagination.\n\nUses DojoEvents.objects.tracks(obj) to get events for the object itself,\nand DojoEvents.objects.references(obj) to get events for related objects\n(objects with foreign keys pointing to this object). Supports pagination, filtering, and sorting.\nAvailable at both /api/v2/ and /api/vue/ endpoints.\n\nArgs:\n    field_filter: Optional field name to filter by (e.g., \"finding_enrichment_settings\").\n                Only entries with changes to this field will be returned.","parameters":[{"in":"query","name":"api_scan_configuration","schema":{"type":"integer"}},{"in":"query","name":"branch_tag","schema":{"type":"string"}},{"in":"query","name":"build_id","schema":{"type":"string"}},{"in":"query","name":"commit_hash","schema":{"type":"string"}},{"in":"query","name":"deduplication","schema":{"type":"boolean"},"description":"deduplication"},{"in":"query","name":"engagement","schema":{"type":"integer"}},{"in":"query","name":"engagement__product__tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags present on Asset (uses OR for multiple values)","explode":false,"style":"form"},{"in":"query","name":"engagement__product__tags__and","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags to match with an AND expression present on Asset","explode":false,"style":"form"},{"in":"query","name":"engagement__tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags present on engagement (uses OR for multiple values)","explode":false,"style":"form"},{"in":"query","name":"engagement__tags__and","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags to match with an AND expression present on engagement","explode":false,"style":"form"},{"in":"query","name":"false_positive_history","schema":{"type":"boolean"},"description":"false_positive_history"},{"in":"query","name":"has_tags","schema":{"type":"boolean"},"description":"Has tags"},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this test.","required":true},{"in":"query","name":"id","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"not_engagement__product__tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags not present on Asset","explode":false,"style":"form"},{"in":"query","name":"not_engagement__tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags not present on engagement","explode":false,"style":"form"},{"in":"query","name":"not_tag","schema":{"type":"string"},"description":"Not Tag name contains"},{"in":"query","name":"not_tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags not present on model","explode":false,"style":"form"},{"in":"query","name":"notes","schema":{"type":"array","items":{"type":"integer"}},"explode":true,"style":"form"},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-api_scan_configuration","-branch_tag","-build_id","-commit_hash","-created","-engagement","-lead","-target_end","-target_start","-test_type","-title","-updated","-version","api_scan_configuration","branch_tag","build_id","commit_hash","created","engagement","lead","target_end","target_start","test_type","title","updated","version"]}},"description":"Ordering\n\n* `title` - Title\n* `-title` - Title (descending)\n* `version` - Version\n* `-version` - Version (descending)\n* `target_start` - Target start\n* `-target_start` - Target start (descending)\n* `target_end` - Target end\n* `-target_end` - Target end (descending)\n* `test_type` - Test type\n* `-test_type` - Test type (descending)\n* `lead` - Lead\n* `-lead` - Lead (descending)\n* `branch_tag` - Branch tag\n* `-branch_tag` - Branch tag (descending)\n* `build_id` - Build id\n* `-build_id` - Build id (descending)\n* `commit_hash` - Commit hash\n* `-commit_hash` - Commit hash (descending)\n* `api_scan_configuration` - Api scan configuration\n* `-api_scan_configuration` - Api scan configuration (descending)\n* `engagement` - Engagement\n* `-engagement` - Engagement (descending)\n* `created` - Created\n* `-created` - Created (descending)\n* `updated` - Updated\n* `-updated` - Updated (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"percent_complete","schema":{"type":"integer"}},{"in":"query","name":"processing","schema":{"type":"boolean"},"description":"processing"},{"in":"query","name":"scan_type","schema":{"type":"string"}},{"in":"query","name":"tag","schema":{"type":"string"},"description":"Tag name contains"},{"in":"query","name":"tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags (uses OR for multiple values)","explode":false,"style":"form"},{"in":"query","name":"tags__and","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags to match with an AND expression","explode":false,"style":"form"},{"in":"query","name":"target_end","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"target_start","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"test_type","schema":{"type":"integer"}},{"in":"query","name":"title","schema":{"type":"string"}},{"in":"query","name":"version","schema":{"type":"string"}}],"tags":["tests"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedAuditLogList"}}},"description":""}}}},"/api/v2/tests/{id}/history/legacy/":{"get":{"operationId":"tests_history_legacy_list","description":"Get legacy audit log for an object (django-auditlog entries) with pagination.\n\nSupports pagination, filtering, and sorting.\nAvailable at both /api/v2/ and /api/vue/ endpoints.","parameters":[{"in":"query","name":"api_scan_configuration","schema":{"type":"integer"}},{"in":"query","name":"branch_tag","schema":{"type":"string"}},{"in":"query","name":"build_id","schema":{"type":"string"}},{"in":"query","name":"commit_hash","schema":{"type":"string"}},{"in":"query","name":"deduplication","schema":{"type":"boolean"},"description":"deduplication"},{"in":"query","name":"engagement","schema":{"type":"integer"}},{"in":"query","name":"engagement__product__tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags present on Asset (uses OR for multiple values)","explode":false,"style":"form"},{"in":"query","name":"engagement__product__tags__and","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags to match with an AND expression present on Asset","explode":false,"style":"form"},{"in":"query","name":"engagement__tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags present on engagement (uses OR for multiple values)","explode":false,"style":"form"},{"in":"query","name":"engagement__tags__and","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags to match with an AND expression present on engagement","explode":false,"style":"form"},{"in":"query","name":"false_positive_history","schema":{"type":"boolean"},"description":"false_positive_history"},{"in":"query","name":"has_tags","schema":{"type":"boolean"},"description":"Has tags"},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this test.","required":true},{"in":"query","name":"id","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"not_engagement__product__tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags not present on Asset","explode":false,"style":"form"},{"in":"query","name":"not_engagement__tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags not present on engagement","explode":false,"style":"form"},{"in":"query","name":"not_tag","schema":{"type":"string"},"description":"Not Tag name contains"},{"in":"query","name":"not_tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags not present on model","explode":false,"style":"form"},{"in":"query","name":"notes","schema":{"type":"array","items":{"type":"integer"}},"explode":true,"style":"form"},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-api_scan_configuration","-branch_tag","-build_id","-commit_hash","-created","-engagement","-lead","-target_end","-target_start","-test_type","-title","-updated","-version","api_scan_configuration","branch_tag","build_id","commit_hash","created","engagement","lead","target_end","target_start","test_type","title","updated","version"]}},"description":"Ordering\n\n* `title` - Title\n* `-title` - Title (descending)\n* `version` - Version\n* `-version` - Version (descending)\n* `target_start` - Target start\n* `-target_start` - Target start (descending)\n* `target_end` - Target end\n* `-target_end` - Target end (descending)\n* `test_type` - Test type\n* `-test_type` - Test type (descending)\n* `lead` - Lead\n* `-lead` - Lead (descending)\n* `branch_tag` - Branch tag\n* `-branch_tag` - Branch tag (descending)\n* `build_id` - Build id\n* `-build_id` - Build id (descending)\n* `commit_hash` - Commit hash\n* `-commit_hash` - Commit hash (descending)\n* `api_scan_configuration` - Api scan configuration\n* `-api_scan_configuration` - Api scan configuration (descending)\n* `engagement` - Engagement\n* `-engagement` - Engagement (descending)\n* `created` - Created\n* `-created` - Created (descending)\n* `updated` - Updated\n* `-updated` - Updated (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"percent_complete","schema":{"type":"integer"}},{"in":"query","name":"processing","schema":{"type":"boolean"},"description":"processing"},{"in":"query","name":"scan_type","schema":{"type":"string"}},{"in":"query","name":"tag","schema":{"type":"string"},"description":"Tag name contains"},{"in":"query","name":"tags","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags (uses OR for multiple values)","explode":false,"style":"form"},{"in":"query","name":"tags__and","schema":{"type":"array","items":{"type":"string"}},"description":"Comma separated list of exact tags to match with an AND expression","explode":false,"style":"form"},{"in":"query","name":"target_end","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"target_start","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"test_type","schema":{"type":"integer"}},{"in":"query","name":"title","schema":{"type":"string"}},{"in":"query","name":"version","schema":{"type":"string"}}],"tags":["tests"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedLegacyAuditLogList"}}},"description":""}}}},"/api/v2/tests/{id}/history/legacy/count/":{"get":{"operationId":"tests_history_legacy_count_retrieve","description":"Get the total count of legacy audit log entries for an object.\n\nApplies the same filters as history_legacy (date filter, LegacyAuditLogFilter)\nto ensure the count matches what users will see when viewing the legacy history page.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this test.","required":true}],"tags":["tests"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"integer"}}}}},"description":""}}}},"/api/v2/tests/{id}/notes/":{"get":{"operationId":"tests_notes_retrieve","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this test.","required":true}],"tags":["tests"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestToNotes"}}},"description":""}}},"post":{"operationId":"tests_notes_create","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this test.","required":true}],"tags":["tests"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddNewNoteOptionRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/AddNewNoteOptionRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/AddNewNoteOptionRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Note"}}},"description":""}}}},"/api/v2/tool_configurations/":{"get":{"operationId":"tool_configurations_list","parameters":[{"in":"query","name":"authentication_type","schema":{"type":"string","x-spec-enum-id":"e1a582895a9e03b4","nullable":true,"enum":["API","Password","SSH"]},"description":"* `API` - API Key\n* `Password` - Username/Password\n* `SSH` - SSH"},{"in":"query","name":"id","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"name","schema":{"type":"string"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["tool_type"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"tool_type","schema":{"type":"integer"}},{"in":"query","name":"url","schema":{"type":"string"}}],"tags":["tool_configurations"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedToolConfigurationList"}}},"description":""}}},"post":{"operationId":"tool_configurations_create","tags":["tool_configurations"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolConfigurationRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ToolConfigurationRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ToolConfigurationRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolConfiguration"}}},"description":""}}}},"/api/v2/tool_configurations/{id}/":{"get":{"operationId":"tool_configurations_retrieve","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this tool_ configuration.","required":true},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["tool_type"]}},"description":"List of fields for which to prefetch model instances and add those to the response"}],"tags":["tool_configurations"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolConfiguration"}}},"description":""}}},"put":{"operationId":"tool_configurations_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this tool_ configuration.","required":true}],"tags":["tool_configurations"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolConfigurationRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ToolConfigurationRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ToolConfigurationRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolConfiguration"}}},"description":""}}},"patch":{"operationId":"tool_configurations_partial_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this tool_ configuration.","required":true}],"tags":["tool_configurations"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedToolConfigurationRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedToolConfigurationRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedToolConfigurationRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolConfiguration"}}},"description":""}}},"delete":{"operationId":"tool_configurations_destroy","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this tool_ configuration.","required":true}],"tags":["tool_configurations"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/tool_configurations/{id}/delete_preview/":{"get":{"operationId":"tool_configurations_delete_preview_list","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this tool_ configuration.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["tool_configurations"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/tool_insights/epss_score_by_tool/":{"get":{"operationId":"tool_insights_epss_score_by_tool_retrieve","description":"the average epss score across all findings, grouped by test type name","tags":["tool_insights"],"security":[{"tokenAuth":[]}],"responses":{"200":{"description":"No response body"}}}},"/api/v2/tool_insights/false_positive_by_tool/":{"get":{"operationId":"tool_insights_false_positive_by_tool_retrieve","description":"the total number of false postive findings, grouped by test type name","tags":["tool_insights"],"security":[{"tokenAuth":[]}],"responses":{"200":{"description":"No response body"}}}},"/api/v2/tool_insights/severity_by_tool_over_time/":{"get":{"operationId":"tool_insights_severity_by_tool_over_time_retrieve","description":"the total number of findings by severity, imported by a tool, grouped by\nmonth","tags":["tool_insights"],"security":[{"tokenAuth":[]}],"responses":{"200":{"description":"No response body"}}}},"/api/v2/tool_insights/severity_by_tool_over_time_counts/":{"get":{"operationId":"tool_insights_severity_by_tool_over_time_counts_retrieve","description":"the total number of findings by severity to display as a cumulative sum\nwithin the severity by tool monthly table","tags":["tool_insights"],"security":[{"tokenAuth":[]}],"responses":{"200":{"description":"No response body"}}}},"/api/v2/tool_insights/tools_in_use_count/":{"get":{"operationId":"tool_insights_tools_in_use_count_retrieve","description":"the total number of tools currently in use (i.e. some number of findings have\nthis tool type as a test type)","tags":["tool_insights"],"security":[{"tokenAuth":[]}],"responses":{"200":{"description":"No response body"}}}},"/api/v2/tool_insights/top_ten_tools_by_severity/":{"get":{"operationId":"tool_insights_top_ten_tools_by_severity_retrieve","description":"the total number of findings by severity within a given test type, grouped\nby test type name","tags":["tool_insights"],"security":[{"tokenAuth":[]}],"responses":{"200":{"description":"No response body"}}}},"/api/v2/tool_product_settings/":{"get":{"operationId":"tool_product_settings_list","parameters":[{"in":"query","name":"id","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"name","schema":{"type":"string"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["notes","product","tool_configuration"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"product","schema":{"type":"integer"}},{"in":"query","name":"tool_configuration","schema":{"type":"integer"}},{"in":"query","name":"tool_project_id","schema":{"type":"string"}},{"in":"query","name":"url","schema":{"type":"string"}}],"tags":["tool_product_settings"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedToolProductSettingsList"}}},"description":""}}},"post":{"operationId":"tool_product_settings_create","tags":["tool_product_settings"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolProductSettingsRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ToolProductSettingsRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ToolProductSettingsRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolProductSettings"}}},"description":""}}}},"/api/v2/tool_product_settings/{id}/":{"get":{"operationId":"tool_product_settings_retrieve","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this tool_ product_ settings.","required":true},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["notes","product","tool_configuration"]}},"description":"List of fields for which to prefetch model instances and add those to the response"}],"tags":["tool_product_settings"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolProductSettings"}}},"description":""}}},"put":{"operationId":"tool_product_settings_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this tool_ product_ settings.","required":true}],"tags":["tool_product_settings"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolProductSettingsRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ToolProductSettingsRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ToolProductSettingsRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolProductSettings"}}},"description":""}}},"patch":{"operationId":"tool_product_settings_partial_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this tool_ product_ settings.","required":true}],"tags":["tool_product_settings"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedToolProductSettingsRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedToolProductSettingsRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedToolProductSettingsRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolProductSettings"}}},"description":""}}},"delete":{"operationId":"tool_product_settings_destroy","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this tool_ product_ settings.","required":true}],"tags":["tool_product_settings"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/tool_product_settings/{id}/delete_preview/":{"get":{"operationId":"tool_product_settings_delete_preview_list","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this tool_ product_ settings.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["tool_product_settings"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/tool_types/":{"get":{"operationId":"tool_types_list","parameters":[{"in":"query","name":"description","schema":{"type":"string"}},{"in":"query","name":"id","schema":{"type":"integer"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"name","schema":{"type":"string"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["tool_types"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedToolTypeList"}}},"description":""}}},"post":{"operationId":"tool_types_create","tags":["tool_types"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolTypeRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ToolTypeRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ToolTypeRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolType"}}},"description":""}}}},"/api/v2/tool_types/{id}/":{"get":{"operationId":"tool_types_retrieve","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this tool_ type.","required":true}],"tags":["tool_types"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolType"}}},"description":""}}},"put":{"operationId":"tool_types_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this tool_ type.","required":true}],"tags":["tool_types"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolTypeRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ToolTypeRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ToolTypeRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolType"}}},"description":""}}},"patch":{"operationId":"tool_types_partial_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this tool_ type.","required":true}],"tags":["tool_types"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedToolTypeRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedToolTypeRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedToolTypeRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolType"}}},"description":""}}},"delete":{"operationId":"tool_types_destroy","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this tool_ type.","required":true}],"tags":["tool_types"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/tool_types/{id}/delete_preview/":{"get":{"operationId":"tool_types_delete_preview_list","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this tool_ type.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["tool_types"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/url/":{"get":{"operationId":"url_list","description":"A simple ViewSet for viewing and editing Locations.","parameters":[{"in":"query","name":"fragment_contains","schema":{"type":"string"},"description":"Fragment: Contains"},{"in":"query","name":"fragment_ends_with","schema":{"type":"string"},"description":"Fragment: Ends With"},{"in":"query","name":"fragment_exact","schema":{"type":"string"},"description":"Fragment: Exact Match"},{"in":"query","name":"fragment_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Fragment: Included in List","explode":false,"style":"form"},{"in":"query","name":"fragment_not_contains","schema":{"type":"string"},"description":"Fragment: Not Contains"},{"in":"query","name":"fragment_not_exact","schema":{"type":"string"},"description":"Fragment: Not Exact Match"},{"in":"query","name":"fragment_not_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Fragment: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"fragment_starts_with","schema":{"type":"string"},"description":"Fragment: Starts With"},{"in":"query","name":"host","schema":{"type":"string"},"description":"Host: Exact Match"},{"in":"query","name":"host_contains","schema":{"type":"string"},"description":"Host: Contains"},{"in":"query","name":"host_ends_with","schema":{"type":"string"},"description":"Host: Ends With"},{"in":"query","name":"host_exact","schema":{"type":"string"},"description":"Host: Exact Match"},{"in":"query","name":"host_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Host: Included in List","explode":false,"style":"form"},{"in":"query","name":"host_not_contains","schema":{"type":"string"},"description":"Host: Not Contains"},{"in":"query","name":"host_not_exact","schema":{"type":"string"},"description":"Host: Not Exact Match"},{"in":"query","name":"host_not_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Host: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"host_starts_with","schema":{"type":"string"},"description":"Host: Starts With"},{"in":"query","name":"id_equals","schema":{"type":"integer"},"description":"ID: Equals"},{"in":"query","name":"id_greater_than_or_equal_to","schema":{"type":"integer"},"description":"ID: Greater Than or Equal To"},{"in":"query","name":"id_includes","schema":{"type":"array","items":{"type":"integer"}},"description":"ID: Included in List","explode":false,"style":"form"},{"in":"query","name":"id_less_than_or_equal_to","schema":{"type":"integer"},"description":"ID: Less Than or Equal To"},{"in":"query","name":"id_not_equals","schema":{"type":"integer"},"description":"ID: Not Equals"},{"in":"query","name":"id_not_includes","schema":{"type":"array","items":{"type":"integer"}},"description":"ID: Not Included in List","explode":false,"style":"form"},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"location__created_at_contains","schema":{"type":"string"},"description":"Created At: Contains"},{"in":"query","name":"location__created_at_ends_with","schema":{"type":"string"},"description":"Created At: Ends With"},{"in":"query","name":"location__created_at_exact","schema":{"type":"string"},"description":"Created At: Exact Match"},{"in":"query","name":"location__created_at_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Created At: Included in List","explode":false,"style":"form"},{"in":"query","name":"location__created_at_not_contains","schema":{"type":"string"},"description":"Created At: Not Contains"},{"in":"query","name":"location__created_at_not_exact","schema":{"type":"string"},"description":"Created At: Not Exact Match"},{"in":"query","name":"location__created_at_not_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Created At: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"location__created_at_starts_with","schema":{"type":"string"},"description":"Created At: Starts With"},{"in":"query","name":"location__findings__finding_equals","schema":{"type":"integer"},"description":"Finding ID: Equals"},{"in":"query","name":"location__findings__finding_greater_than_or_equal_to","schema":{"type":"integer"},"description":"Finding ID: Greater Than or Equal To"},{"in":"query","name":"location__findings__finding_includes","schema":{"type":"array","items":{"type":"integer"}},"description":"Finding ID: Included in List","explode":false,"style":"form"},{"in":"query","name":"location__findings__finding_less_than_or_equal_to","schema":{"type":"integer"},"description":"Finding ID: Less Than or Equal To"},{"in":"query","name":"location__findings__finding_not_equals","schema":{"type":"integer"},"description":"Finding ID: Not Equals"},{"in":"query","name":"location__findings__finding_not_includes","schema":{"type":"array","items":{"type":"integer"}},"description":"Finding ID: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"location__products__product_equals","schema":{"type":"integer"},"description":"Product ID: Equals"},{"in":"query","name":"location__products__product_greater_than_or_equal_to","schema":{"type":"integer"},"description":"Product ID: Greater Than or Equal To"},{"in":"query","name":"location__products__product_includes","schema":{"type":"array","items":{"type":"integer"}},"description":"Product ID: Included in List","explode":false,"style":"form"},{"in":"query","name":"location__products__product_less_than_or_equal_to","schema":{"type":"integer"},"description":"Product ID: Less Than or Equal To"},{"in":"query","name":"location__products__product_not_equals","schema":{"type":"integer"},"description":"Product ID: Not Equals"},{"in":"query","name":"location__products__product_not_includes","schema":{"type":"array","items":{"type":"integer"}},"description":"Product ID: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"location__tags__name_contains","schema":{"type":"string"},"description":"Tags: Contains"},{"in":"query","name":"location__tags__name_ends_with","schema":{"type":"string"},"description":"Tags: Ends With"},{"in":"query","name":"location__tags__name_exact","schema":{"type":"string"},"description":"Tags: Exact Match"},{"in":"query","name":"location__tags__name_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Tags: Included in List","explode":false,"style":"form"},{"in":"query","name":"location__tags__name_not_contains","schema":{"type":"string"},"description":"Tags: Not Contains"},{"in":"query","name":"location__tags__name_not_exact","schema":{"type":"string"},"description":"Tags: Not Exact Match"},{"in":"query","name":"location__tags__name_not_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Tags: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"location__tags__name_starts_with","schema":{"type":"string"},"description":"Tags: Starts With"},{"in":"query","name":"location__updated_at_contains","schema":{"type":"string"},"description":"Updated At: Contains"},{"in":"query","name":"location__updated_at_ends_with","schema":{"type":"string"},"description":"Updated At: Ends With"},{"in":"query","name":"location__updated_at_exact","schema":{"type":"string"},"description":"Updated At: Exact Match"},{"in":"query","name":"location__updated_at_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Updated At: Included in List","explode":false,"style":"form"},{"in":"query","name":"location__updated_at_not_contains","schema":{"type":"string"},"description":"Updated At: Not Contains"},{"in":"query","name":"location__updated_at_not_exact","schema":{"type":"string"},"description":"Updated At: Not Exact Match"},{"in":"query","name":"location__updated_at_not_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Updated At: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"location__updated_at_starts_with","schema":{"type":"string"},"description":"Updated At: Starts With"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"ordering","schema":{"type":"array","items":{"type":"string","enum":["-active_findings","-created_at","-fragment","-host","-id","-path","-port","-protocol","-query","-updated_at","-user_info","active_findings","created_at","fragment","host","id","path","port","protocol","query","updated_at","user_info"]}},"description":"Ordering\n\n* `id` - Id\n* `-id` - Id (descending)\n* `protocol` - Protocol\n* `-protocol` - Protocol (descending)\n* `host` - Host\n* `-host` - Host (descending)\n* `user_info` - User info\n* `-user_info` - User info (descending)\n* `path` - Path\n* `-path` - Path (descending)\n* `port` - Port\n* `-port` - Port (descending)\n* `query` - Query\n* `-query` - Query (descending)\n* `fragment` - Fragment\n* `-fragment` - Fragment (descending)\n* `created_at` - Created at\n* `-created_at` - Created at (descending)\n* `updated_at` - Updated at\n* `-updated_at` - Updated at (descending)\n* `active_findings` - Active findings\n* `-active_findings` - Active findings (descending)","explode":false,"style":"form"},{"in":"query","name":"path_contains","schema":{"type":"string"},"description":"Path: Contains"},{"in":"query","name":"path_ends_with","schema":{"type":"string"},"description":"Path: Ends With"},{"in":"query","name":"path_exact","schema":{"type":"string"},"description":"Path: Exact Match"},{"in":"query","name":"path_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Path: Included in List","explode":false,"style":"form"},{"in":"query","name":"path_not_contains","schema":{"type":"string"},"description":"Path: Not Contains"},{"in":"query","name":"path_not_exact","schema":{"type":"string"},"description":"Path: Not Exact Match"},{"in":"query","name":"path_not_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Path: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"path_starts_with","schema":{"type":"string"},"description":"Path: Starts With"},{"in":"query","name":"port_equals","schema":{"type":"integer"},"description":"Port: Equals"},{"in":"query","name":"port_greater_than_or_equal_to","schema":{"type":"integer"},"description":"Port: Greater Than or Equal To"},{"in":"query","name":"port_includes","schema":{"type":"array","items":{"type":"integer"}},"description":"Port: Included in List","explode":false,"style":"form"},{"in":"query","name":"port_less_than_or_equal_to","schema":{"type":"integer"},"description":"Port: Less Than or Equal To"},{"in":"query","name":"port_not_equals","schema":{"type":"integer"},"description":"Port: Not Equals"},{"in":"query","name":"port_not_includes","schema":{"type":"array","items":{"type":"integer"}},"description":"Port: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"product","schema":{"type":"integer"},"description":"Product ID: Equals"},{"in":"query","name":"protocol_contains","schema":{"type":"string"},"description":"Protocol: Contains"},{"in":"query","name":"protocol_ends_with","schema":{"type":"string"},"description":"Protocol: Ends With"},{"in":"query","name":"protocol_exact","schema":{"type":"string"},"description":"Protocol: Exact Match"},{"in":"query","name":"protocol_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Protocol: Included in List","explode":false,"style":"form"},{"in":"query","name":"protocol_not_contains","schema":{"type":"string"},"description":"Protocol: Not Contains"},{"in":"query","name":"protocol_not_exact","schema":{"type":"string"},"description":"Protocol: Not Exact Match"},{"in":"query","name":"protocol_not_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Protocol: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"protocol_starts_with","schema":{"type":"string"},"description":"Protocol: Starts With"},{"in":"query","name":"query_contains","schema":{"type":"string"},"description":"Query Parameters: Contains"},{"in":"query","name":"query_ends_with","schema":{"type":"string"},"description":"Query Parameters: Ends With"},{"in":"query","name":"query_exact","schema":{"type":"string"},"description":"Query Parameters: Exact Match"},{"in":"query","name":"query_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Query Parameters: Included in List","explode":false,"style":"form"},{"in":"query","name":"query_not_contains","schema":{"type":"string"},"description":"Query Parameters: Not Contains"},{"in":"query","name":"query_not_exact","schema":{"type":"string"},"description":"Query Parameters: Not Exact Match"},{"in":"query","name":"query_not_includes","schema":{"type":"array","items":{"type":"string"}},"description":"Query Parameters: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"query_starts_with","schema":{"type":"string"},"description":"Query Parameters: Starts With"},{"in":"query","name":"user_info_contains","schema":{"type":"string"},"description":"User Info: Contains"},{"in":"query","name":"user_info_ends_with","schema":{"type":"string"},"description":"User Info: Ends With"},{"in":"query","name":"user_info_exact","schema":{"type":"string"},"description":"User Info: Exact Match"},{"in":"query","name":"user_info_includes","schema":{"type":"array","items":{"type":"string"}},"description":"User Info: Included in List","explode":false,"style":"form"},{"in":"query","name":"user_info_not_contains","schema":{"type":"string"},"description":"User Info: Not Contains"},{"in":"query","name":"user_info_not_exact","schema":{"type":"string"},"description":"User Info: Not Exact Match"},{"in":"query","name":"user_info_not_includes","schema":{"type":"array","items":{"type":"string"}},"description":"User Info: Not Included in List","explode":false,"style":"form"},{"in":"query","name":"user_info_starts_with","schema":{"type":"string"},"description":"User Info: Starts With"}],"tags":["url"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedURLList"}}},"description":""}}},"post":{"operationId":"url_create","description":"A simple ViewSet for viewing and editing Locations.","tags":["url"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/URLRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/URLRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/URLRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/URL"}}},"description":""}}}},"/api/v2/url/{id}/":{"get":{"operationId":"url_retrieve","description":"A simple ViewSet for viewing and editing Locations.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Locations - URL.","required":true}],"tags":["url"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/URL"}}},"description":""}}},"put":{"operationId":"url_update","description":"A simple ViewSet for viewing and editing Locations.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Locations - URL.","required":true}],"tags":["url"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/URLRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/URLRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/URLRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/URL"}}},"description":""}}},"patch":{"operationId":"url_partial_update","description":"A simple ViewSet for viewing and editing Locations.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Locations - URL.","required":true}],"tags":["url"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedURLRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedURLRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedURLRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/URL"}}},"description":""}}},"delete":{"operationId":"url_destroy","description":"A simple ViewSet for viewing and editing Locations.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Locations - URL.","required":true}],"tags":["url"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/url/{id}/delete_preview/":{"get":{"operationId":"url_delete_preview_list","description":"A simple ViewSet for viewing and editing Locations.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this Locations - URL.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["url"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/usage_records/":{"get":{"operationId":"usage_records_list","description":"Read-only list of usage metering events (imports, reimports, bulk deletes).","parameters":[{"in":"query","name":"event_type","schema":{"type":"string","x-spec-enum-id":"d40bda02ffa99825","enum":["bulk_finding_delete","import","import_preview","reimport","reimport_preview","sensei_fix","sensei_repo"]},"description":"* `import` - Import\n* `reimport` - Reimport\n* `import_preview` - Import Preview\n* `reimport_preview` - Reimport Preview\n* `bulk_finding_delete` - Bulk finding delete\n* `sensei_repo` - Sensei Repo Onboarded\n* `sensei_fix` - Sensei Fix Applied"},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"name":"ordering","required":false,"in":"query","description":"Which field to use when ordering the results.","schema":{"type":"string"}},{"in":"query","name":"product_id","schema":{"type":"integer"}},{"name":"search","required":false,"in":"query","description":"A search term.","schema":{"type":"string"}},{"in":"query","name":"timestamp_after","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"timestamp_before","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"user_id","schema":{"type":"integer"}}],"tags":["usage_records"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedUsageRecordList"}}},"description":""}}}},"/api/v2/usage_records/{id}/":{"get":{"operationId":"usage_records_retrieve","description":"Read-only list of usage metering events (imports, reimports, bulk deletes).","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this usage record.","required":true}],"tags":["usage_records"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsageRecord"}}},"description":""}}}},"/api/v2/user_contact_infos/":{"get":{"operationId":"user_contact_infos_list","parameters":[{"in":"query","name":"block_execution","schema":{"type":"boolean"}},{"in":"query","name":"cell_number","schema":{"type":"string"}},{"in":"query","name":"deduplication_execution_mode","schema":{"type":"string","x-spec-enum-id":"bf7fb8ff28520a46","nullable":true,"enum":["async","async_wait","sync"]},"description":"Controls how import/reimport deduplication post-processing is executed. 'Async' dispatches it to the background and returns immediately (default). 'Async, wait for deduplication' dispatches to the background but waits for deduplication to finish before responding, so notifications and statistics reflect the deduplicated state. 'Synchronous' runs the import deduplication inline. Can be overridden per request. Independent of block_execution, which forces all async tasks (notifications, jira, ...) to the foreground.\n\n* `async` - Async (do not wait)\n* `async_wait` - Async, wait for deduplication\n* `sync` - Synchronous (block)"},{"in":"query","name":"force_password_reset","schema":{"type":"boolean"}},{"in":"query","name":"github_username","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"password_last_reset","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"phone_number","schema":{"type":"string"}},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["user"]}},"description":"List of fields for which to prefetch model instances and add those to the response"},{"in":"query","name":"slack_user_id","schema":{"type":"string"}},{"in":"query","name":"slack_username","schema":{"type":"string"}},{"in":"query","name":"title","schema":{"type":"string"}},{"in":"query","name":"token_last_reset","schema":{"type":"string","format":"date-time"}},{"in":"query","name":"twitter_username","schema":{"type":"string"}},{"in":"query","name":"ui_use_tailwind","schema":{"type":"boolean"}},{"in":"query","name":"user","schema":{"type":"integer"}}],"tags":["user_contact_infos"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedExtendedUserContactInfoList"}}},"description":""}}},"post":{"operationId":"user_contact_infos_create","tags":["user_contact_infos"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtendedUserContactInfoRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ExtendedUserContactInfoRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ExtendedUserContactInfoRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtendedUserContactInfo"}}},"description":""}}}},"/api/v2/user_contact_infos/{id}/":{"get":{"operationId":"user_contact_infos_retrieve","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this user contact info.","required":true},{"in":"query","name":"prefetch","schema":{"type":"array","items":{"type":"string","enum":["user"]}},"description":"List of fields for which to prefetch model instances and add those to the response"}],"tags":["user_contact_infos"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtendedUserContactInfo"}}},"description":""}}},"put":{"operationId":"user_contact_infos_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this user contact info.","required":true}],"tags":["user_contact_infos"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtendedUserContactInfoRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ExtendedUserContactInfoRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ExtendedUserContactInfoRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtendedUserContactInfo"}}},"description":""}}},"patch":{"operationId":"user_contact_infos_partial_update","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this user contact info.","required":true}],"tags":["user_contact_infos"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedExtendedUserContactInfoRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedExtendedUserContactInfoRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedExtendedUserContactInfoRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtendedUserContactInfo"}}},"description":""}}},"delete":{"operationId":"user_contact_infos_destroy","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this user contact info.","required":true}],"tags":["user_contact_infos"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/user_contact_infos/{id}/delete_preview/":{"get":{"operationId":"user_contact_infos_delete_preview_list","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this user contact info.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["user_contact_infos"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/user_profile/":{"get":{"operationId":"user_profile_retrieve","description":"Pro override of the OSS ``/api/v2/user_profile/`` endpoint.\n\nMirrors OSS ``UserProfileView`` but repopulates the RBAC nested fields that\nthe OSS serializer no longer exposes. Registered ahead of the OSS route via\n``urlpatterns_preload`` so it takes precedence.","tags":["user_profile"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProUserProfile"}}},"description":""}}}},"/api/v2/users/":{"get":{"operationId":"users_list","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"query","name":"date_joined_after","schema":{"type":"string","format":"date"}},{"in":"query","name":"date_joined_before","schema":{"type":"string","format":"date"}},{"in":"query","name":"email","schema":{"type":"string"}},{"in":"query","name":"first_name","schema":{"type":"string"}},{"in":"query","name":"id","schema":{"type":"integer"}},{"in":"query","name":"is_active","schema":{"type":"boolean"}},{"in":"query","name":"is_superuser","schema":{"type":"boolean"}},{"in":"query","name":"last_login_after","schema":{"type":"string","format":"date"}},{"in":"query","name":"last_login_before","schema":{"type":"string","format":"date"}},{"in":"query","name":"last_name","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-date_joined","-email","-first_name","-is_active","-is_superuser","-last_login","-last_name","-username","date_joined","email","first_name","is_active","is_superuser","last_login","last_name","username"]}},"description":"Ordering\n\n* `username` - Username\n* `-username` - Username (descending)\n* `last_name` - Last name\n* `-last_name` - Last name (descending)\n* `first_name` - First name\n* `-first_name` - First name (descending)\n* `email` - Email\n* `-email` - Email (descending)\n* `is_active` - Is active\n* `-is_active` - Is active (descending)\n* `is_superuser` - Is superuser\n* `-is_superuser` - Is superuser (descending)\n* `date_joined` - Date joined\n* `-date_joined` - Date joined (descending)\n* `last_login` - Last login\n* `-last_login` - Last login (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"},{"in":"query","name":"username","schema":{"type":"string"}}],"tags":["users"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedEnhancedUserList"}}},"description":""}}},"post":{"operationId":"users_create","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","tags":["users"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedUserRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/EnhancedUserRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/EnhancedUserRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedUser"}}},"description":""}}}},"/api/v2/users/{id}/":{"get":{"operationId":"users_retrieve","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this dojo_ user.","required":true},{"in":"query","name":"response_fields","schema":{"type":"string"},"description":"Comma-separated list of fields to include in the response (ex. field_a,field_b)"}],"tags":["users"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedUser"}}},"description":""}}},"put":{"operationId":"users_update","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this dojo_ user.","required":true}],"tags":["users"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedUserRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/EnhancedUserRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/EnhancedUserRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedUser"}}},"description":""}}},"patch":{"operationId":"users_partial_update","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this dojo_ user.","required":true}],"tags":["users"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedEnhancedUserRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedEnhancedUserRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedEnhancedUserRequest"}}}},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedUser"}}},"description":""}}},"delete":{"operationId":"users_destroy","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this dojo_ user.","required":true}],"tags":["users"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"204":{"description":"No response body"}}}},"/api/v2/users/{id}/delete_preview/":{"get":{"operationId":"users_delete_preview_list","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this dojo_ user.","required":true},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}}],"tags":["users"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeletePreviewList"}}},"description":""}}}},"/api/v2/users/{id}/history/":{"get":{"operationId":"users_history_list","description":"Get audit log entries for an object with pagination.\n\nUses DojoEvents.objects.tracks(obj) to get events for the object itself,\nand DojoEvents.objects.references(obj) to get events for related objects\n(objects with foreign keys pointing to this object). Supports pagination, filtering, and sorting.\nAvailable at both /api/v2/ and /api/vue/ endpoints.\n\nArgs:\n    field_filter: Optional field name to filter by (e.g., \"finding_enrichment_settings\").\n                Only entries with changes to this field will be returned.","parameters":[{"in":"query","name":"date_joined_after","schema":{"type":"string","format":"date"}},{"in":"query","name":"date_joined_before","schema":{"type":"string","format":"date"}},{"in":"query","name":"email","schema":{"type":"string"}},{"in":"query","name":"first_name","schema":{"type":"string"}},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this dojo_ user.","required":true},{"in":"query","name":"id","schema":{"type":"integer"}},{"in":"query","name":"is_active","schema":{"type":"boolean"}},{"in":"query","name":"is_superuser","schema":{"type":"boolean"}},{"in":"query","name":"last_login_after","schema":{"type":"string","format":"date"}},{"in":"query","name":"last_login_before","schema":{"type":"string","format":"date"}},{"in":"query","name":"last_name","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-date_joined","-email","-first_name","-is_active","-is_superuser","-last_login","-last_name","-username","date_joined","email","first_name","is_active","is_superuser","last_login","last_name","username"]}},"description":"Ordering\n\n* `username` - Username\n* `-username` - Username (descending)\n* `last_name` - Last name\n* `-last_name` - Last name (descending)\n* `first_name` - First name\n* `-first_name` - First name (descending)\n* `email` - Email\n* `-email` - Email (descending)\n* `is_active` - Is active\n* `-is_active` - Is active (descending)\n* `is_superuser` - Is superuser\n* `-is_superuser` - Is superuser (descending)\n* `date_joined` - Date joined\n* `-date_joined` - Date joined (descending)\n* `last_login` - Last login\n* `-last_login` - Last login (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"username","schema":{"type":"string"}}],"tags":["users"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedAuditLogList"}}},"description":""}}}},"/api/v2/users/{id}/history/legacy/":{"get":{"operationId":"users_history_legacy_list","description":"Get legacy audit log for an object (django-auditlog entries) with pagination.\n\nSupports pagination, filtering, and sorting.\nAvailable at both /api/v2/ and /api/vue/ endpoints.","parameters":[{"in":"query","name":"date_joined_after","schema":{"type":"string","format":"date"}},{"in":"query","name":"date_joined_before","schema":{"type":"string","format":"date"}},{"in":"query","name":"email","schema":{"type":"string"}},{"in":"query","name":"first_name","schema":{"type":"string"}},{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this dojo_ user.","required":true},{"in":"query","name":"id","schema":{"type":"integer"}},{"in":"query","name":"is_active","schema":{"type":"boolean"}},{"in":"query","name":"is_superuser","schema":{"type":"boolean"}},{"in":"query","name":"last_login_after","schema":{"type":"string","format":"date"}},{"in":"query","name":"last_login_before","schema":{"type":"string","format":"date"}},{"in":"query","name":"last_name","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"o","schema":{"type":"array","items":{"type":"string","enum":["-date_joined","-email","-first_name","-is_active","-is_superuser","-last_login","-last_name","-username","date_joined","email","first_name","is_active","is_superuser","last_login","last_name","username"]}},"description":"Ordering\n\n* `username` - Username\n* `-username` - Username (descending)\n* `last_name` - Last name\n* `-last_name` - Last name (descending)\n* `first_name` - First name\n* `-first_name` - First name (descending)\n* `email` - Email\n* `-email` - Email (descending)\n* `is_active` - Is active\n* `-is_active` - Is active (descending)\n* `is_superuser` - Is superuser\n* `-is_superuser` - Is superuser (descending)\n* `date_joined` - Date joined\n* `-date_joined` - Date joined (descending)\n* `last_login` - Last login\n* `-last_login` - Last login (descending)","explode":false,"style":"form"},{"name":"offset","required":false,"in":"query","description":"The initial index from which to return the results.","schema":{"type":"integer"}},{"in":"query","name":"username","schema":{"type":"string"}}],"tags":["users"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedLegacyAuditLogList"}}},"description":""}}}},"/api/v2/users/{id}/history/legacy/count/":{"get":{"operationId":"users_history_legacy_count_retrieve","description":"Get the total count of legacy audit log entries for an object.\n\nApplies the same filters as history_legacy (date filter, LegacyAuditLogFilter)\nto ensure the count matches what users will see when viewing the legacy history page.","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this dojo_ user.","required":true}],"tags":["users"],"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"integer"}}}}},"description":""}}}},"/api/v2/users/{id}/reset_api_token/":{"post":{"operationId":"users_reset_api_token_create","description":"View mixin that optimizes querysets based on the response_fields query parameter.\n\nWhen response_fields is specified on a GET request, this mixin:\n\n1. Strips all ``prefetch_related`` lookups and re-adds only those needed\n   by the requested fields.\n2. Applies ``.only()`` to limit the SQL SELECT to the model columns\n   actually required by the requested fields.\n\nColumn detection is automatic for concrete model fields (field name matches\nmodel field name). Only ``SerializerMethodField``s that access multiple\nmodel attributes need explicit entries in ``response_field_columns_map``.\n\nUsage::\n\n    class MyViewSet(ResponseFieldsOptimizationMixin, SomeBaseViewSet):\n        # Only needed for fields with prefetch dependencies\n        response_field_prefetch_map = {\n            \"tags\": [\"tags\"],\n            \"owners\": [\"enhancedfinding__owners\"],\n        }\n        # Only needed for SerializerMethodFields that access model columns.\n        # Concrete model fields and M2M/prefetch fields are auto-detected.\n        response_field_columns_map = {\n            \"display_status\": [\"active\", \"verified\", \"false_p\", ...],\n        }\n\n        def get_queryset(self):\n            return self.optimize_queryset(super().get_queryset())","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"description":"A unique integer value identifying this dojo_ user.","required":true}],"tags":["users"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedUserRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/EnhancedUserRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/EnhancedUserRequest"}}},"required":true},"security":[{"cookieAuth":[]},{"tokenAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedUser"}}},"description":""}}}}},"components":{"schemas":{"AcceptedRiskRequest":{"type":"object","properties":{"vulnerability_id":{"type":"string","minLength":1,"description":"An id of a vulnerability in a security advisory associated with this finding. Can be a Common Vulnerabilities and Exposure (CVE) or from other sources.","maxLength":50},"justification":{"type":"string","minLength":1,"description":"Justification for accepting findings with this vulnerability id"},"accepted_by":{"type":"string","minLength":1,"description":"Name or email of person who accepts the risk","maxLength":200}},"required":["accepted_by","justification","vulnerability_id"]},"Actor":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"username":{"type":"string","description":"Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.","pattern":"^[\\w.@+-]+$","maxLength":150},"first_name":{"type":"string","maxLength":150},"last_name":{"type":"string","maxLength":150}},"required":["id","username"]},"AddNewFileOptionRequest":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":100},"file":{"type":"string","format":"binary"}},"required":["file","title"]},"AddNewNoteOptionRequest":{"type":"object","properties":{"entry":{"type":"string","minLength":1},"private":{"type":"boolean"},"note_type":{"type":"integer","nullable":true}},"required":["entry"]},"Announcement":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"message":{"type":"string","description":"This dismissable message will be displayed on all pages for authenticated users. It can contain basic html tags, for example <a href='https://www.fred.com' style='color: #337ab7;' target='_blank'>https://example.com</a>","maxLength":500},"style":{"enum":["info","success","warning","danger"],"type":"string","x-spec-enum-id":"6f65abe0aab2c78c","description":"The style of banner to display. (info, success, warning, danger)\n\n* `info` - Info\n* `success` - Success\n* `warning` - Warning\n* `danger` - Danger"},"dismissable":{"type":"boolean","title":"Dismissable?","description":"Ticking this box allows users to dismiss the current announcement"}},"required":["id"]},"AnnouncementRequest":{"type":"object","properties":{"message":{"type":"string","minLength":1,"description":"This dismissable message will be displayed on all pages for authenticated users. It can contain basic html tags, for example <a href='https://www.fred.com' style='color: #337ab7;' target='_blank'>https://example.com</a>","maxLength":500},"style":{"enum":["info","success","warning","danger"],"type":"string","x-spec-enum-id":"6f65abe0aab2c78c","description":"The style of banner to display. (info, success, warning, danger)\n\n* `info` - Info\n* `success` - Success\n* `warning` - Warning\n* `danger` - Danger"},"dismissable":{"type":"boolean","title":"Dismissable?","description":"Ticking this box allows users to dismiss the current announcement"}}},"AppAnalysis":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"tags":{"type":"array","items":{"type":"string"}},"name":{"type":"string","maxLength":200},"confidence":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true,"title":"Confidence level"},"version":{"type":"string","nullable":true,"title":"Version Number","maxLength":200},"icon":{"type":"string","nullable":true,"maxLength":200},"website":{"type":"string","format":"uri","nullable":true,"maxLength":400},"website_found":{"type":"string","format":"uri","nullable":true,"maxLength":400},"created":{"type":"string","format":"date-time","readOnly":true},"product":{"type":"integer"},"user":{"type":"integer"},"prefetch":{"type":"object","properties":{"product":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/Product"}},"user":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}}}}},"required":["created","id","name","product","user"]},"AppAnalysisRequest":{"type":"object","properties":{"tags":{"type":"array","items":{"type":"string","minLength":1}},"name":{"type":"string","minLength":1,"maxLength":200},"confidence":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true,"title":"Confidence level"},"version":{"type":"string","nullable":true,"title":"Version Number","maxLength":200},"icon":{"type":"string","nullable":true,"maxLength":200},"website":{"type":"string","format":"uri","nullable":true,"maxLength":400},"website_found":{"type":"string","format":"uri","nullable":true,"maxLength":400},"product":{"type":"integer"},"user":{"type":"integer"}},"required":["name","product","user"]},"AssetAPIScanConfiguration":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"asset":{"type":"integer"},"service_key_1":{"type":"string","nullable":true,"maxLength":200},"service_key_2":{"type":"string","nullable":true,"maxLength":200},"service_key_3":{"type":"string","nullable":true,"maxLength":200},"tool_configuration":{"type":"integer"},"prefetch":{"type":"object","properties":{"product":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/Product"}},"tool_configuration":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/ToolConfiguration"}}}}},"required":["asset","id","tool_configuration"]},"AssetAPIScanConfigurationRequest":{"type":"object","properties":{"asset":{"type":"integer"},"service_key_1":{"type":"string","nullable":true,"maxLength":200},"service_key_2":{"type":"string","nullable":true,"maxLength":200},"service_key_3":{"type":"string","nullable":true,"maxLength":200},"tool_configuration":{"type":"integer"}},"required":["asset","tool_configuration"]},"Assets":{"type":"object","description":"Extend from the BaseModelSerializer to allow for generalized extensions.","properties":{"id":{"type":"integer","readOnly":true},"findings_count":{"type":"integer","readOnly":true},"findings_list":{"type":"array","items":{"type":"integer"},"readOnly":true},"tags":{"type":"array","items":{"type":"string"}},"asset_meta":{"type":"array","items":{"$ref":"#/components/schemas/ProductMeta"},"readOnly":true},"organization":{"type":"integer"},"asset_numeric_grade":{"type":"integer","nullable":true},"enable_asset_tag_inheritance":{"type":"boolean","default":false},"asset_managers":{"type":"integer","nullable":true},"business_criticality":{"enum":["very high","high","medium","low","very low","none","",null],"type":"string","description":"* `very high` - Very High\n* `high` - High\n* `medium` - Medium\n* `low` - Low\n* `very low` - Very Low\n* `none` - None","x-spec-enum-id":"ef412461eb271471","nullable":true},"platform":{"enum":["web service","desktop","iot","mobile","web","",null],"type":"string","description":"* `web service` - API\n* `desktop` - Desktop\n* `iot` - Internet of Things\n* `mobile` - Mobile\n* `web` - Web","x-spec-enum-id":"48ed03cfd9c8641d","nullable":true},"lifecycle":{"enum":["construction","production","retirement","",null],"type":"string","description":"* `construction` - Construction\n* `production` - Production\n* `retirement` - Retirement","x-spec-enum-id":"65f9d93250b96377","nullable":true},"origin":{"enum":["third party library","purchased","contractor","internal","open source","outsourced","",null],"type":"string","description":"* `third party library` - Third Party Library\n* `purchased` - Purchased\n* `contractor` - Contractor Developed\n* `internal` - Internally Developed\n* `open source` - Open Source\n* `outsourced` - Outsourced","x-spec-enum-id":"435026afe6c513fa","nullable":true},"parent":{"type":"integer","nullable":true},"members":{"type":"array","items":{"type":"integer"},"readOnly":true},"authorization_groups":{"type":"array","items":{"type":"integer"},"readOnly":true},"prioritization_engine":{"type":"integer","nullable":true},"created":{"type":"string","format":"date-time","readOnly":true,"nullable":true,"description":"Time that the object was initially created, and saved to the database"},"name":{"type":"string","maxLength":255},"description":{"type":"string","maxLength":4000},"user_records":{"type":"integer","maximum":2147483647,"minimum":0,"nullable":true,"description":"Estimate the number of user records within the application."},"revenue":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$","nullable":true,"description":"Estimate the application's revenue."},"external_audience":{"type":"boolean","description":"Specify if the application is used by people outside the organization."},"internet_accessible":{"type":"boolean","description":"Specify if the application is accessible from the public internet."},"enable_simple_risk_acceptance":{"type":"boolean","description":"Allows simple risk acceptance by checking/unchecking a checkbox."},"enable_full_risk_acceptance":{"type":"boolean","description":"Allows full risk acceptance using a risk acceptance form, expiration date, uploaded proof, etc."},"disable_sla_breach_notifications":{"type":"boolean","description":"Disable SLA breach notifications if configured in the global settings"},"technical_contact":{"type":"integer","nullable":true},"team_manager":{"type":"integer","nullable":true},"sla_configuration":{"type":"integer"},"regulations":{"type":"array","items":{"type":"integer"}},"prefetch":{"type":"object","properties":{"authorized_users":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}},"prod_type":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/ProductType"}},"product_manager":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}},"regulations":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/Regulation"}},"sla_configuration":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/SLAConfiguration"}},"team_manager":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}},"technical_contact":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}}}}},"required":["asset_meta","authorization_groups","created","description","findings_count","findings_list","id","members","name","organization"]},"AssetsRequest":{"type":"object","description":"Extend from the BaseModelSerializer to allow for generalized extensions.","properties":{"tags":{"type":"array","items":{"type":"string","minLength":1}},"organization":{"type":"integer"},"asset_numeric_grade":{"type":"integer","nullable":true},"enable_asset_tag_inheritance":{"type":"boolean","default":false},"asset_managers":{"type":"integer","nullable":true},"business_criticality":{"enum":["very high","high","medium","low","very low","none","",null],"type":"string","description":"* `very high` - Very High\n* `high` - High\n* `medium` - Medium\n* `low` - Low\n* `very low` - Very Low\n* `none` - None","x-spec-enum-id":"ef412461eb271471","nullable":true},"platform":{"enum":["web service","desktop","iot","mobile","web","",null],"type":"string","description":"* `web service` - API\n* `desktop` - Desktop\n* `iot` - Internet of Things\n* `mobile` - Mobile\n* `web` - Web","x-spec-enum-id":"48ed03cfd9c8641d","nullable":true},"lifecycle":{"enum":["construction","production","retirement","",null],"type":"string","description":"* `construction` - Construction\n* `production` - Production\n* `retirement` - Retirement","x-spec-enum-id":"65f9d93250b96377","nullable":true},"origin":{"enum":["third party library","purchased","contractor","internal","open source","outsourced","",null],"type":"string","description":"* `third party library` - Third Party Library\n* `purchased` - Purchased\n* `contractor` - Contractor Developed\n* `internal` - Internally Developed\n* `open source` - Open Source\n* `outsourced` - Outsourced","x-spec-enum-id":"435026afe6c513fa","nullable":true},"parent":{"type":"integer","nullable":true},"prioritization_engine":{"type":"integer","nullable":true},"name":{"type":"string","minLength":1,"maxLength":255},"description":{"type":"string","minLength":1,"maxLength":4000},"user_records":{"type":"integer","maximum":2147483647,"minimum":0,"nullable":true,"description":"Estimate the number of user records within the application."},"revenue":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$","nullable":true,"description":"Estimate the application's revenue."},"external_audience":{"type":"boolean","description":"Specify if the application is used by people outside the organization."},"internet_accessible":{"type":"boolean","description":"Specify if the application is accessible from the public internet."},"enable_simple_risk_acceptance":{"type":"boolean","description":"Allows simple risk acceptance by checking/unchecking a checkbox."},"enable_full_risk_acceptance":{"type":"boolean","description":"Allows full risk acceptance using a risk acceptance form, expiration date, uploaded proof, etc."},"disable_sla_breach_notifications":{"type":"boolean","description":"Disable SLA breach notifications if configured in the global settings"},"technical_contact":{"type":"integer","nullable":true},"team_manager":{"type":"integer","nullable":true},"sla_configuration":{"type":"integer"},"regulations":{"type":"array","items":{"type":"integer"}}},"required":["description","name","organization"]},"AssignExistingProduct":{"type":"object","properties":{"unassigned_findings":{"type":"array","items":{"type":"integer"}},"product_id":{"type":"integer"}},"required":["product_id","unassigned_findings"]},"AssignExistingProductRequest":{"type":"object","properties":{"unassigned_findings":{"type":"array","items":{"type":"integer"}},"product_id":{"type":"integer"}},"required":["product_id","unassigned_findings"]},"AssignNewProduct":{"type":"object","properties":{"unassigned_findings":{"type":"array","items":{"type":"integer"}},"product_name":{"type":"string","maxLength":4000},"product_description":{"type":"string","maxLength":255},"product_type_id":{"type":"integer"}},"required":["product_description","product_name","product_type_id","unassigned_findings"]},"AssignNewProductRequest":{"type":"object","properties":{"unassigned_findings":{"type":"array","items":{"type":"integer"}},"product_name":{"type":"string","minLength":1,"maxLength":4000},"product_description":{"type":"string","minLength":1,"maxLength":255},"product_type_id":{"type":"integer"}},"required":["product_description","product_name","product_type_id","unassigned_findings"]},"AsyncImportScan":{"type":"object","properties":{"scan_date":{"type":"string","format":"date","description":"Scan completion date will be used on all findings."},"minimum_severity":{"enum":["Info","Low","Medium","High","Critical"],"type":"string","x-spec-enum-id":"fc5d16a20ed06136","default":"Info","description":"Minimum severity level to be imported\n\n* `Info` - Info\n* `Low` - Low\n* `Medium` - Medium\n* `High` - High\n* `Critical` - Critical"},"active":{"type":"boolean","description":"Force findings to be active/inactive or default to the original tool (None)"},"verified":{"type":"boolean","description":"Force findings to be verified/not verified or default to the original tool (None)"},"endpoint_to_add":{"type":"integer","description":"Enter the ID of a Location that is associated with the target Product. New Findings will be added to that Location."},"file":{"type":"string","format":"uri","pattern":"(?:xml|csv|nessus|json|jsonl|html|js|zip|xlsx|txt|sarif|fpr|md|log|fvdl)$"},"product_type_name":{"type":"string","description":"Also referred to as 'Organization' name."},"product_name":{"type":"string","description":"Also referred to as 'Asset' name."},"engagement_name":{"type":"string"},"engagement_end_date":{"type":"string","format":"date","description":"End Date for Engagement. Default is current time + 365 days. Required format year-month-day"},"source_code_management_uri":{"type":"string","format":"uri","description":"Resource link to source code","maxLength":600},"test_title":{"type":"string"},"auto_create_context":{"type":"boolean"},"deduplication_on_engagement":{"type":"boolean"},"lead":{"type":"integer","nullable":true},"push_to_jira":{"type":"boolean","default":false},"deduplication_execution_mode":{"enum":["async","async_wait","sync",null],"type":"string","x-spec-enum-id":"bf7fb8ff28520a46","nullable":true,"description":"Override how import post-processing (deduplication, jira push, grading, ...) is executed for this request. 'async' dispatches post-processing to the background and responds immediately (default). 'async_wait' dispatches to the background but waits for deduplication to finish before responding, so notifications and the returned statistics reflect the deduplicated state. 'sync' runs everything inline. If omitted, falls back to the user's profile setting (deduplication_execution_mode).\n\n* `async` - Async (do not wait)\n* `async_wait` - Async, wait for deduplication\n* `sync` - Synchronous (block)"},"environment":{"type":"string"},"build_id":{"type":"string","description":"ID of the build that was scanned."},"branch_tag":{"type":"string","description":"Branch or Tag that was scanned."},"commit_hash":{"type":"string","description":"Commit that was scanned."},"api_scan_configuration":{"type":"integer","nullable":true},"service":{"type":"string","description":"A service is a self-contained piece of functionality within a Product. This is an optional field which is used in deduplication and closing of old findings when set. This affects the whole engagement/product depending on your deduplication scope."},"group_by":{"enum":["component_name","component_name+component_version","file_path","finding_title","vuln_id_from_tool"],"type":"string","x-spec-enum-id":"a9b19a914dcfbd21","description":"Choose an option to automatically group new findings by the chosen option.\n\n* `component_name` - Component Name\n* `component_name+component_version` - Component Name + Version\n* `file_path` - File path\n* `finding_title` - Finding Title\n* `vuln_id_from_tool` - Vulnerability ID from Tool"},"create_finding_groups_for_all_findings":{"type":"boolean","default":true,"description":"If set to false, finding groups will only be created when there is more than one grouped finding"},"test_id":{"type":"integer","readOnly":true},"engagement_id":{"type":"integer","readOnly":true},"product_id":{"type":"integer","readOnly":true,"description":"Also referred to as 'Asset' ID."},"product_type_id":{"type":"integer","readOnly":true,"description":"Also referred to as 'Organization' ID."},"statistics":{"allOf":[{"$ref":"#/components/schemas/ImportStatistics"}],"readOnly":true},"deduplication_complete":{"type":"boolean","readOnly":true,"description":"Whether deduplication had finished by the time this response was produced. True for 'sync' and for 'async_wait' when deduplication completed within the timeout; False for 'async' (deduplication is still running in the background) or when an 'async_wait' import timed out waiting for it."},"pro":{"type":"array","items":{},"readOnly":true},"apply_tags_to_findings":{"type":"boolean","description":"If set to True, the tags will be applied to the findings"},"apply_tags_to_endpoints":{"type":"boolean","description":"If set to True, the tags will be applied to the locations"},"scan_type":{"enum":["Acunetix Scan","Alert Logic Scan","Anchore Engine Scan","Anchore Enterprise Policy Check","Anchore Grype","Anchore Grype detailed","AnchoreCTL Policies Report","AnchoreCTL Vuln Report","AppCheck Web Application Scanner","AppSpider Scan","Aqua Scan","Arachni Scan","AuditJS Scan","AWS Inspector2 Scan","AWS Prowler Scan","AWS Prowler V3","AWS Security Finding Format (ASFF) Scan","AWS Security Hub Scan","Azure Security Center Recommendations Scan","Bandit Scan","Bearer CLI","BlackDuck API","Blackduck Binary Analysis","Blackduck Component Risk","Blackduck Hub Scan","Brakeman Scan","Bugcrowd API Import","BugCrowd Scan","Bundler-Audit Scan","Burp Dastardly Scan","Burp Enterprise Scan","Burp REST API","Burp Scan","Burp GraphQL API","Burp Suite DAST Scan","CargoAudit Scan","Checkmarx CxFlow SAST","Checkmarx One Scan","Checkmarx OSA","Checkmarx Scan","Checkmarx Scan detailed","Checkov Scan","Chef Inspect Log","Choctaw Hog Scan","Clair Scan","Cloudflare Insights","Cloudsploit Scan","Cobalt.io API Import","Cobalt.io Scan","Codechecker Report native","Contrast Scan","Coverity API","Coverity Scan JSON Report","Crashtest Security JSON File","Crashtest Security XML File","CredScan Scan","Crunch42 Scan","Cyberwatch scan (Galeax)","CycloneDX Scan","Cycognito Scan","DawnScanner Scan","Deepfence Threatmapper Report","Dependency Check Scan","Dependency Track Finding Packaging Format (FPF) Export","Detect-secrets Scan","docker-bench-security Scan","Dockle Scan","DrHeader JSON Importer","DSOP Scan","Duroc Hog Scan","Edgescan Scan","ESLint Scan","Essex Hog Scan","Fortify Scan","Garak Scan","Generic Findings Import","Ggshield Scan","Github SAST Scan","Github Secrets Detection Report Scan","Github Vulnerability Scan","GitLab API Fuzzing Report Scan","GitLab Container Scan","GitLab DAST Report","GitLab Dependency Scanning Report","GitLab SAST Report","GitLab Secret Detection Report","Gitleaks Scan","Google Cloud Artifact Vulnerability Scan","Gosec Scanner","Gottingen Hog Scan","Govulncheck Scanner","Govulncheck Scanner V2","HackerOne Cases","Hadolint Dockerfile check","Harbor Vulnerability Scan","HCL AppScan on Cloud SAST XML","HCLAppScan XML","Horusec Scan","Humble Json Importer","HuskyCI Report","Hydra Scan","IBM AppScan DAST","Immuniweb Scan","IntSights Report","Invicti Scan","IriusRisk Threats Scan","JFrog Xray API Summary Artifact Scan","JFrog Xray On Demand Binary Scan","JFrog Xray Scan","JFrog Xray Unified Scan","KICS Scan","Kiuwan SCA Scan","Kiuwan Scan","KrakenD Audit Scan","kube-bench Scan","Kubeaudit Scan","KubeHunter Scan","Kubescape JSON Importer","Legitify Scan","Mayhem SARIF Report","Mend Scan","Meterian Scan","Microfocus Webinspect Scan","MobSF Scan","Mobsfscan Scan","MobSF Scorecard Scan","Mozilla Observatory Scan","MSDefender Parser","n0s1 Scanner","Nancy Scan","Netsparker Scan","NeuVector (compliance)","NeuVector (REST)","Nexpose Scan","Nikto Scan","Nmap Scan","Node Security Platform Scan","Nosey Parker Scan","NPM Audit Scan","NPM Audit v7+ Scan","Nuclei Scan","OpenReports","Openscap Vulnerability Scan","OpenVAS Parser","OpenVAS Parser v2","Orca Security Alerts","ORT evaluated model Importer","OssIndex Devaudit SCA Scan Importer","OSV Scan","Outpost24 Scan","PHP Security Audit v2","PHP Symfony Security Check","PICUS Scan","PingCastle","pip-audit Scan","PMD Scan","Popeye Scan","Progpilot Scan","Prowler Scan","PTART Report","PWN SAST","Qualys Hacker Guardian Scan","Qualys Infrastructure Scan (WebGUI XML)","Qualys Scan","Qualys VMDR","Qualys Webapp Scan","Rapplex Scan","Red Hat Satellite","Retire.js Scan","ReversingLabs Spectra Assure","Risk Recon API Importer","Rubocop Scan","Rusty Hog Scan","SARIF","Scantist Scan","Scout Suite Scan","Semgrep JSON Report","Semgrep Pro JSON Report","SKF Scan","Snyk Code Scan","Snyk Issue API Scan","Snyk Scan","Solar Appscreener Scan","SonarQube API Import","SonarQube Scan","SonarQube Scan detailed","Sonatype Application Scan","SpotBugs Scan","SSH Audit Importer","SSL Labs Scan","Sslscan","Sslyze Scan","SSLyze Scan (JSON)","StackHawk HawkScan","Sysdig CLI Report","Sysdig Vulnerability Report","Talisman Scan","Tenable Scan","Terrascan Scan","Testssl Scan","TFSec Scan","Threagile risks report","ThreatComposer Scan","Trivy Operator Scan","Trivy Scan","Trufflehog Scan","Trufflehog3 Scan","Trustwave Fusion API Scan","Trustwave Scan (CSV)","Twistlock Image Scan","VCG Scan","Veracode Scan","Veracode SourceClear Scan","Vulners","Wapiti Scan","Wazuh","WFuzz JSON report","Whispers Scan","WhiteHat Sentinel","Wiz Scan","Wizcli Dir Scan","Wizcli IaC Scan","Wizcli Img Scan","Wpscan","Xanitizer Scan","Xeol Parser","Xygeni SAST Scan","Xygeni SCA Scan","Xygeni Secrets Scan","Yarn Audit Scan","ZAP Scan","Zora Parser"],"type":"string","description":"* `Acunetix Scan` - Acunetix Scanner\n* `Alert Logic Scan` - Alert Logic Scan\n* `Anchore Engine Scan` - Anchore Engine Scan\n* `Anchore Enterprise Policy Check` - Anchore Enterprise Policy Check\n* `Anchore Grype` - Anchore Grype\n* `Anchore Grype detailed` - Anchore Grype detailed\n* `AnchoreCTL Policies Report` - AnchoreCTL Policies Report\n* `AnchoreCTL Vuln Report` - AnchoreCTL Vuln Report\n* `AppCheck Web Application Scanner` - AppCheck Web Application Scanner\n* `AppSpider Scan` - AppSpider Scan\n* `Aqua Scan` - Aqua Scan\n* `Arachni Scan` - Arachni Scan\n* `AuditJS Scan` - AuditJS Scan\n* `AWS Inspector2 Scan` - AWS Inspector2 Scan\n* `AWS Prowler Scan` - AWS Prowler Scan\n* `AWS Prowler V3` - AWS Prowler V3\n* `AWS Security Finding Format (ASFF) Scan` - AWS Security Finding Format (ASFF)\n* `AWS Security Hub Scan` - AWS Security Hub Scan\n* `Azure Security Center Recommendations Scan` - Azure Security Center Recommendations Scan\n* `Bandit Scan` - Bandit Scan\n* `Bearer CLI` - Bearer CLI\n* `BlackDuck API` - BlackDuck API\n* `Blackduck Binary Analysis` - Blackduck Binary Analysis\n* `Blackduck Component Risk` - Blackduck Component Risk\n* `Blackduck Hub Scan` - Blackduck Hub Scan\n* `Brakeman Scan` - Brakeman Scan\n* `Bugcrowd API Import` - Bugcrowd API Import\n* `BugCrowd Scan` - BugCrowd Scan\n* `Bundler-Audit Scan` - Bundler-Audit Scan\n* `Burp Dastardly Scan` - Burp Dastardly Scan\n* `Burp Enterprise Scan` - Burp Enterprise Scan (RENAMED to Burp Suite DAST Scan)\n* `Burp REST API` - Burp REST API\n* `Burp Scan` - Burp Scan\n* `Burp GraphQL API` - Burp Suite DAST GraphQL API\n* `Burp Suite DAST Scan` - Burp Suite DAST Scan\n* `CargoAudit Scan` - CargoAudit Scan\n* `Checkmarx CxFlow SAST` - Checkmarx CxFlow SAST\n* `Checkmarx One Scan` - Checkmarx One Scan\n* `Checkmarx OSA` - Checkmarx OSA\n* `Checkmarx Scan` - Checkmarx Scan\n* `Checkmarx Scan detailed` - Checkmarx Scan detailed\n* `Checkov Scan` - Checkov Scan\n* `Chef Inspect Log` - Chef Inspect Log\n* `Choctaw Hog Scan` - Choctaw Hog Scan\n* `Clair Scan` - Clair Scan\n* `Cloudflare Insights` - Cloudflare Insights\n* `Cloudsploit Scan` - Cloudsploit Scan\n* `Cobalt.io API Import` - Cobalt.io API Import\n* `Cobalt.io Scan` - Cobalt.io Scan\n* `Codechecker Report native` - Codechecker Report native\n* `Contrast Scan` - Contrast Scan\n* `Coverity API` - Coverity API\n* `Coverity Scan JSON Report` - Coverity Scan JSON Report\n* `Crashtest Security JSON File` - Crashtest Security JSON File\n* `Crashtest Security XML File` - Crashtest Security XML File\n* `CredScan Scan` - CredScan Scan\n* `Crunch42 Scan` - Crunch42 Scan\n* `Cyberwatch scan (Galeax)` - Cyberwatch scan (Galeax)\n* `CycloneDX Scan` - CycloneDX Scan\n* `Cycognito Scan` - Cycognito Scan\n* `DawnScanner Scan` - DawnScanner Scan\n* `Deepfence Threatmapper Report` - Deepfence Threatmapper Report\n* `Dependency Check Scan` - Dependency Check Scan\n* `Dependency Track Finding Packaging Format (FPF) Export` - Dependency Track Finding Packaging Format (FPF) Export\n* `Detect-secrets Scan` - Detect-secrets Scan\n* `docker-bench-security Scan` - docker-bench-security Scan\n* `Dockle Scan` - Dockle Scan\n* `DrHeader JSON Importer` - DrHeader JSON Importer\n* `DSOP Scan` - DSOP Scan\n* `Duroc Hog Scan` - Duroc Hog Scan\n* `Edgescan Scan` - Edgescan Scan\n* `ESLint Scan` - ESLint Scan\n* `Essex Hog Scan` - Essex Hog Scan\n* `Fortify Scan` - Fortify Scan\n* `Garak Scan` - Garak Scan\n* `Generic Findings Import` - Generic Findings Import\n* `Ggshield Scan` - Ggshield Scan\n* `Github SAST Scan` - Github SAST Scan\n* `Github Secrets Detection Report Scan` - Github Secrets Detection Report Scan\n* `Github Vulnerability Scan` - Github Vulnerability Scan\n* `GitLab API Fuzzing Report Scan` - GitLab API Fuzzing Report Scan\n* `GitLab Container Scan` - GitLab Container Scan Scan\n* `GitLab DAST Report` - GitLab DAST Report\n* `GitLab Dependency Scanning Report` - GitLab Dependency Scanning Report\n* `GitLab SAST Report` - GitLab SAST Report\n* `GitLab Secret Detection Report` - GitLab Secret Detection Report\n* `Gitleaks Scan` - Gitleaks Scan\n* `Google Cloud Artifact Vulnerability Scan` - Google Cloud Artifact Vulnerability Scan\n* `Gosec Scanner` - Gosec Scanner\n* `Gottingen Hog Scan` - Gottingen Hog Scan\n* `Govulncheck Scanner` - Govulncheck Scanner\n* `Govulncheck Scanner V2` - Govulncheck Scanner V2\n* `HackerOne Cases` - HackerOne Cases\n* `Hadolint Dockerfile check` - Hadolint Dockerfile check\n* `Harbor Vulnerability Scan` - Harbor Vulnerability Scan\n* `HCL AppScan on Cloud SAST XML` - HCL AppScan on Cloud SAST XML\n* `HCLAppScan XML` - HCLAppScan XML\n* `Horusec Scan` - Horusec Scan\n* `Humble Json Importer` - Humble Json Importer\n* `HuskyCI Report` - HuskyCI Report\n* `Hydra Scan` - Hydra Scan\n* `IBM AppScan DAST` - IBM AppScan DAST\n* `Immuniweb Scan` - Immuniweb Scan\n* `IntSights Report` - IntSights Report\n* `Invicti Scan` - Invicti Scan\n* `IriusRisk Threats Scan` - IriusRisk Threats Scan\n* `JFrog Xray API Summary Artifact Scan` - JFrog Xray API Summary Artifact Scan\n* `JFrog Xray On Demand Binary Scan` - JFrog Xray On Demand Binary Scan\n* `JFrog Xray Scan` - JFrog Xray Scan\n* `JFrog Xray Unified Scan` - JFrog Xray Unified Scan\n* `KICS Scan` - KICS Scan\n* `Kiuwan SCA Scan` - Kiuwan SCA Scan\n* `Kiuwan Scan` - Kiuwan Scan\n* `KrakenD Audit Scan` - KrakenD Audit Scan\n* `kube-bench Scan` - kube-bench Scan\n* `Kubeaudit Scan` - Kubeaudit Scan\n* `KubeHunter Scan` - KubeHunter Scan\n* `Kubescape JSON Importer` - Kubescape JSON Importer\n* `Legitify Scan` - Legitify Scan\n* `Mayhem SARIF Report` - Mayhem SARIF Report\n* `Mend Scan` - Mend Scan\n* `Meterian Scan` - Meterian Scan\n* `Microfocus Webinspect Scan` - Microfocus Webinspect Scan\n* `MobSF Scan` - MobSF Scan\n* `Mobsfscan Scan` - MobSF Scan\n* `MobSF Scorecard Scan` - MobSF Scorecard Scan\n* `Mozilla Observatory Scan` - Mozilla Observatory Scan\n* `MSDefender Parser` - MSDefender Parser\n* `n0s1 Scanner` - n0s1 Scanner\n* `Nancy Scan` - Nancy Scan\n* `Netsparker Scan` - Netsparker Scan\n* `NeuVector (compliance)` - NeuVector (compliance)\n* `NeuVector (REST)` - NeuVector (REST)\n* `Nexpose Scan` - Nexpose Scan\n* `Nikto Scan` - Nikto Scan\n* `Nmap Scan` - Nmap Scan\n* `Node Security Platform Scan` - Node Security Platform Scan\n* `Nosey Parker Scan` - Nosey Parker Scan\n* `NPM Audit Scan` - NPM Audit Scan\n* `NPM Audit v7+ Scan` - NPM Audit v7+ Scan\n* `Nuclei Scan` - Nuclei Scan\n* `OpenReports` - OpenReports\n* `Openscap Vulnerability Scan` - Openscap Vulnerability Scan\n* `OpenVAS Parser` - OpenVAS Parser\n* `OpenVAS Parser v2` - OpenVAS Parser v2\n* `Orca Security Alerts` - Orca Security Alerts\n* `ORT evaluated model Importer` - ORT evaluated model Importer\n* `OssIndex Devaudit SCA Scan Importer` - OssIndex Devaudit SCA Scan Importer\n* `OSV Scan` - OSV Scan\n* `Outpost24 Scan` - Outpost24 Scan\n* `PHP Security Audit v2` - PHP Security Audit v2\n* `PHP Symfony Security Check` - PHP Symfony Security Check\n* `PICUS Scan` - PICUS Scan\n* `PingCastle` - PingCastle\n* `pip-audit Scan` - pip-audit Scan\n* `PMD Scan` - PMD Scan\n* `Popeye Scan` - Popeye Scan\n* `Progpilot Scan` - Progpilot Scan\n* `Prowler Scan` - Prowler Scan\n* `PTART Report` - PTART Report\n* `PWN SAST` - PWN SAST\n* `Qualys Hacker Guardian Scan` - Qualys Hacker Guardian Scan\n* `Qualys Infrastructure Scan (WebGUI XML)` - Qualys Infrastructure Scan (WebGUI XML)\n* `Qualys Scan` - Qualys Scan\n* `Qualys VMDR` - Qualys VMDR\n* `Qualys Webapp Scan` - Qualys Webapp Scan\n* `Rapplex Scan` - Rapplex Scan\n* `Red Hat Satellite` - Red Hat Satellite\n* `Retire.js Scan` - Retire.js Scan\n* `ReversingLabs Spectra Assure` - ReversingLabs Spectra Assure\n* `Risk Recon API Importer` - Risk Recon API Importer\n* `Rubocop Scan` - Rubocop Scan\n* `Rusty Hog Scan` - Rusty Hog Scan\n* `SARIF` - SARIF\n* `Scantist Scan` - Scantist Scan\n* `Scout Suite Scan` - Scout Suite Scan\n* `Semgrep JSON Report` - Semgrep JSON Report\n* `Semgrep Pro JSON Report` - Semgrep Pro JSON Report\n* `SKF Scan` - SKF Scan\n* `Snyk Code Scan` - Snyk Code Scan\n* `Snyk Issue API Scan` - Snyk Issue API Scan\n* `Snyk Scan` - Snyk Scan\n* `Solar Appscreener Scan` - Solar Appscreener Scan Detailed_Results.csv\n* `SonarQube API Import` - SonarQube API Import\n* `SonarQube Scan` - SonarQube Scan\n* `SonarQube Scan detailed` - SonarQube Scan detailed\n* `Sonatype Application Scan` - Sonatype Application Scan\n* `SpotBugs Scan` - SpotBugs Scan\n* `SSH Audit Importer` - SSH Audit Importer\n* `SSL Labs Scan` - SSL Labs Scan\n* `Sslscan` - Sslscan\n* `Sslyze Scan` - Sslyze Scan\n* `SSLyze Scan (JSON)` - SSLyze Scan (JSON)\n* `StackHawk HawkScan` - StackHawk HawkScan\n* `Sysdig CLI Report` - Sysdig CLI Report Scan\n* `Sysdig Vulnerability Report` - Sysdig Vulnerability Report Scan\n* `Talisman Scan` - Talisman Scan\n* `Tenable Scan` - Tenable Scan\n* `Terrascan Scan` - Terrascan Scan\n* `Testssl Scan` - Testssl Scan\n* `TFSec Scan` - TFSec Scan\n* `Threagile risks report` - Threagile risks report\n* `ThreatComposer Scan` - ThreatComposer Scan\n* `Trivy Operator Scan` - Trivy Operator Scan\n* `Trivy Scan` - Trivy Scan\n* `Trufflehog Scan` - Trufflehog Scan\n* `Trufflehog3 Scan` - Trufflehog3 Scan\n* `Trustwave Fusion API Scan` - Trustwave Fusion API Scan\n* `Trustwave Scan (CSV)` - Trustwave Scan (CSV)\n* `Twistlock Image Scan` - Twistlock Image Scan\n* `VCG Scan` - VCG Scan\n* `Veracode Scan` - Veracode Scan\n* `Veracode SourceClear Scan` - Veracode SourceClear Scan\n* `Vulners` - Vulners\n* `Wapiti Scan` - Wapiti Scan\n* `Wazuh` - Wazuh\n* `WFuzz JSON report` - WFuzz JSON report\n* `Whispers Scan` - Whispers Scan\n* `WhiteHat Sentinel` - WhiteHat Sentinel\n* `Wiz Scan` - Wiz Scan\n* `Wizcli Dir Scan` - Wizcli Dir Scan\n* `Wizcli IaC Scan` - Wizcli IaC Scan\n* `Wizcli Img Scan` - Wizcli Img Scan\n* `Wpscan` - Wpscan\n* `Xanitizer Scan` - Xanitizer Scan\n* `Xeol Parser` - Xeol Parser\n* `Xygeni SAST Scan` - Xygeni SAST Scan\n* `Xygeni SCA Scan` - Xygeni SCA Scan\n* `Xygeni Secrets Scan` - Xygeni Secrets Scan\n* `Yarn Audit Scan` - Yarn Audit Scan\n* `ZAP Scan` - ZAP Scan\n* `Zora Parser` - Zora Parser","x-spec-enum-id":"467435d774cf7d2d"},"engagement":{"type":"integer"},"tags":{"type":"array","items":{"type":"string"},"description":"Add tags that help describe this scan."},"close_old_findings":{"type":"boolean","default":false,"description":"Old findings no longer present in the new report get closed as mitigated when importing. If service has been set, only the findings for this service will be closed; if no service is set, only findings without a service will be closed. This only affects findings within the same engagement."},"close_old_findings_product_scope":{"type":"boolean","default":false,"description":"Old findings no longer present in the new report get closed as mitigated when importing. If service has been set, only the findings for this service will be closed; if no service is set, only findings without a service will be closed. This only affects findings within the same product.By default, it is false meaning that only old findings of the same type in the engagement are in scope."},"version":{"type":"string","description":"Version that was scanned."},"test":{"type":"integer","readOnly":true},"background_import":{"type":"boolean","nullable":true,"description":"Selecting to import in the background will modify the import process to first parse the file for any errors, return the response, and then create findings in the background"},"push_to_integrator":{"type":"boolean","default":false,"description":"Dictates whether this object will be dispatched to the associated integrator, and override the configured setting that decides if the object should be pushed or not."},"message":{"type":"string","readOnly":true,"default":"Import processed successfully"}},"required":["deduplication_complete","engagement_id","message","pro","product_id","product_type_id","scan_type","statistics","test","test_id"]},"AsyncImportScanRequest":{"type":"object","properties":{"scan_date":{"type":"string","format":"date","description":"Scan completion date will be used on all findings."},"minimum_severity":{"enum":["Info","Low","Medium","High","Critical"],"type":"string","x-spec-enum-id":"fc5d16a20ed06136","default":"Info","description":"Minimum severity level to be imported\n\n* `Info` - Info\n* `Low` - Low\n* `Medium` - Medium\n* `High` - High\n* `Critical` - Critical"},"active":{"type":"boolean","description":"Force findings to be active/inactive or default to the original tool (None)"},"verified":{"type":"boolean","description":"Force findings to be verified/not verified or default to the original tool (None)"},"endpoint_to_add":{"type":"integer","description":"Enter the ID of a Location that is associated with the target Product. New Findings will be added to that Location."},"file":{"type":"string","format":"binary","pattern":"(?:xml|csv|nessus|json|jsonl|html|js|zip|xlsx|txt|sarif|fpr|md|log|fvdl)$"},"product_type_name":{"type":"string","minLength":1,"description":"Also referred to as 'Organization' name."},"product_name":{"type":"string","minLength":1,"description":"Also referred to as 'Asset' name."},"engagement_name":{"type":"string","minLength":1},"engagement_end_date":{"type":"string","format":"date","description":"End Date for Engagement. Default is current time + 365 days. Required format year-month-day"},"source_code_management_uri":{"type":"string","format":"uri","minLength":1,"description":"Resource link to source code","maxLength":600},"test_title":{"type":"string","minLength":1},"auto_create_context":{"type":"boolean"},"deduplication_on_engagement":{"type":"boolean"},"lead":{"type":"integer","nullable":true},"push_to_jira":{"type":"boolean","default":false},"deduplication_execution_mode":{"enum":["async","async_wait","sync",null],"type":"string","x-spec-enum-id":"bf7fb8ff28520a46","nullable":true,"description":"Override how import post-processing (deduplication, jira push, grading, ...) is executed for this request. 'async' dispatches post-processing to the background and responds immediately (default). 'async_wait' dispatches to the background but waits for deduplication to finish before responding, so notifications and the returned statistics reflect the deduplicated state. 'sync' runs everything inline. If omitted, falls back to the user's profile setting (deduplication_execution_mode).\n\n* `async` - Async (do not wait)\n* `async_wait` - Async, wait for deduplication\n* `sync` - Synchronous (block)"},"environment":{"type":"string","minLength":1},"build_id":{"type":"string","minLength":1,"description":"ID of the build that was scanned."},"branch_tag":{"type":"string","minLength":1,"description":"Branch or Tag that was scanned."},"commit_hash":{"type":"string","minLength":1,"description":"Commit that was scanned."},"api_scan_configuration":{"type":"integer","nullable":true},"service":{"type":"string","minLength":1,"description":"A service is a self-contained piece of functionality within a Product. This is an optional field which is used in deduplication and closing of old findings when set. This affects the whole engagement/product depending on your deduplication scope."},"group_by":{"enum":["component_name","component_name+component_version","file_path","finding_title","vuln_id_from_tool"],"type":"string","x-spec-enum-id":"a9b19a914dcfbd21","description":"Choose an option to automatically group new findings by the chosen option.\n\n* `component_name` - Component Name\n* `component_name+component_version` - Component Name + Version\n* `file_path` - File path\n* `finding_title` - Finding Title\n* `vuln_id_from_tool` - Vulnerability ID from Tool"},"create_finding_groups_for_all_findings":{"type":"boolean","default":true,"description":"If set to false, finding groups will only be created when there is more than one grouped finding"},"apply_tags_to_findings":{"type":"boolean","description":"If set to True, the tags will be applied to the findings"},"apply_tags_to_endpoints":{"type":"boolean","description":"If set to True, the tags will be applied to the locations"},"scan_type":{"enum":["Acunetix Scan","Alert Logic Scan","Anchore Engine Scan","Anchore Enterprise Policy Check","Anchore Grype","Anchore Grype detailed","AnchoreCTL Policies Report","AnchoreCTL Vuln Report","AppCheck Web Application Scanner","AppSpider Scan","Aqua Scan","Arachni Scan","AuditJS Scan","AWS Inspector2 Scan","AWS Prowler Scan","AWS Prowler V3","AWS Security Finding Format (ASFF) Scan","AWS Security Hub Scan","Azure Security Center Recommendations Scan","Bandit Scan","Bearer CLI","BlackDuck API","Blackduck Binary Analysis","Blackduck Component Risk","Blackduck Hub Scan","Brakeman Scan","Bugcrowd API Import","BugCrowd Scan","Bundler-Audit Scan","Burp Dastardly Scan","Burp Enterprise Scan","Burp REST API","Burp Scan","Burp GraphQL API","Burp Suite DAST Scan","CargoAudit Scan","Checkmarx CxFlow SAST","Checkmarx One Scan","Checkmarx OSA","Checkmarx Scan","Checkmarx Scan detailed","Checkov Scan","Chef Inspect Log","Choctaw Hog Scan","Clair Scan","Cloudflare Insights","Cloudsploit Scan","Cobalt.io API Import","Cobalt.io Scan","Codechecker Report native","Contrast Scan","Coverity API","Coverity Scan JSON Report","Crashtest Security JSON File","Crashtest Security XML File","CredScan Scan","Crunch42 Scan","Cyberwatch scan (Galeax)","CycloneDX Scan","Cycognito Scan","DawnScanner Scan","Deepfence Threatmapper Report","Dependency Check Scan","Dependency Track Finding Packaging Format (FPF) Export","Detect-secrets Scan","docker-bench-security Scan","Dockle Scan","DrHeader JSON Importer","DSOP Scan","Duroc Hog Scan","Edgescan Scan","ESLint Scan","Essex Hog Scan","Fortify Scan","Garak Scan","Generic Findings Import","Ggshield Scan","Github SAST Scan","Github Secrets Detection Report Scan","Github Vulnerability Scan","GitLab API Fuzzing Report Scan","GitLab Container Scan","GitLab DAST Report","GitLab Dependency Scanning Report","GitLab SAST Report","GitLab Secret Detection Report","Gitleaks Scan","Google Cloud Artifact Vulnerability Scan","Gosec Scanner","Gottingen Hog Scan","Govulncheck Scanner","Govulncheck Scanner V2","HackerOne Cases","Hadolint Dockerfile check","Harbor Vulnerability Scan","HCL AppScan on Cloud SAST XML","HCLAppScan XML","Horusec Scan","Humble Json Importer","HuskyCI Report","Hydra Scan","IBM AppScan DAST","Immuniweb Scan","IntSights Report","Invicti Scan","IriusRisk Threats Scan","JFrog Xray API Summary Artifact Scan","JFrog Xray On Demand Binary Scan","JFrog Xray Scan","JFrog Xray Unified Scan","KICS Scan","Kiuwan SCA Scan","Kiuwan Scan","KrakenD Audit Scan","kube-bench Scan","Kubeaudit Scan","KubeHunter Scan","Kubescape JSON Importer","Legitify Scan","Mayhem SARIF Report","Mend Scan","Meterian Scan","Microfocus Webinspect Scan","MobSF Scan","Mobsfscan Scan","MobSF Scorecard Scan","Mozilla Observatory Scan","MSDefender Parser","n0s1 Scanner","Nancy Scan","Netsparker Scan","NeuVector (compliance)","NeuVector (REST)","Nexpose Scan","Nikto Scan","Nmap Scan","Node Security Platform Scan","Nosey Parker Scan","NPM Audit Scan","NPM Audit v7+ Scan","Nuclei Scan","OpenReports","Openscap Vulnerability Scan","OpenVAS Parser","OpenVAS Parser v2","Orca Security Alerts","ORT evaluated model Importer","OssIndex Devaudit SCA Scan Importer","OSV Scan","Outpost24 Scan","PHP Security Audit v2","PHP Symfony Security Check","PICUS Scan","PingCastle","pip-audit Scan","PMD Scan","Popeye Scan","Progpilot Scan","Prowler Scan","PTART Report","PWN SAST","Qualys Hacker Guardian Scan","Qualys Infrastructure Scan (WebGUI XML)","Qualys Scan","Qualys VMDR","Qualys Webapp Scan","Rapplex Scan","Red Hat Satellite","Retire.js Scan","ReversingLabs Spectra Assure","Risk Recon API Importer","Rubocop Scan","Rusty Hog Scan","SARIF","Scantist Scan","Scout Suite Scan","Semgrep JSON Report","Semgrep Pro JSON Report","SKF Scan","Snyk Code Scan","Snyk Issue API Scan","Snyk Scan","Solar Appscreener Scan","SonarQube API Import","SonarQube Scan","SonarQube Scan detailed","Sonatype Application Scan","SpotBugs Scan","SSH Audit Importer","SSL Labs Scan","Sslscan","Sslyze Scan","SSLyze Scan (JSON)","StackHawk HawkScan","Sysdig CLI Report","Sysdig Vulnerability Report","Talisman Scan","Tenable Scan","Terrascan Scan","Testssl Scan","TFSec Scan","Threagile risks report","ThreatComposer Scan","Trivy Operator Scan","Trivy Scan","Trufflehog Scan","Trufflehog3 Scan","Trustwave Fusion API Scan","Trustwave Scan (CSV)","Twistlock Image Scan","VCG Scan","Veracode Scan","Veracode SourceClear Scan","Vulners","Wapiti Scan","Wazuh","WFuzz JSON report","Whispers Scan","WhiteHat Sentinel","Wiz Scan","Wizcli Dir Scan","Wizcli IaC Scan","Wizcli Img Scan","Wpscan","Xanitizer Scan","Xeol Parser","Xygeni SAST Scan","Xygeni SCA Scan","Xygeni Secrets Scan","Yarn Audit Scan","ZAP Scan","Zora Parser"],"type":"string","description":"* `Acunetix Scan` - Acunetix Scanner\n* `Alert Logic Scan` - Alert Logic Scan\n* `Anchore Engine Scan` - Anchore Engine Scan\n* `Anchore Enterprise Policy Check` - Anchore Enterprise Policy Check\n* `Anchore Grype` - Anchore Grype\n* `Anchore Grype detailed` - Anchore Grype detailed\n* `AnchoreCTL Policies Report` - AnchoreCTL Policies Report\n* `AnchoreCTL Vuln Report` - AnchoreCTL Vuln Report\n* `AppCheck Web Application Scanner` - AppCheck Web Application Scanner\n* `AppSpider Scan` - AppSpider Scan\n* `Aqua Scan` - Aqua Scan\n* `Arachni Scan` - Arachni Scan\n* `AuditJS Scan` - AuditJS Scan\n* `AWS Inspector2 Scan` - AWS Inspector2 Scan\n* `AWS Prowler Scan` - AWS Prowler Scan\n* `AWS Prowler V3` - AWS Prowler V3\n* `AWS Security Finding Format (ASFF) Scan` - AWS Security Finding Format (ASFF)\n* `AWS Security Hub Scan` - AWS Security Hub Scan\n* `Azure Security Center Recommendations Scan` - Azure Security Center Recommendations Scan\n* `Bandit Scan` - Bandit Scan\n* `Bearer CLI` - Bearer CLI\n* `BlackDuck API` - BlackDuck API\n* `Blackduck Binary Analysis` - Blackduck Binary Analysis\n* `Blackduck Component Risk` - Blackduck Component Risk\n* `Blackduck Hub Scan` - Blackduck Hub Scan\n* `Brakeman Scan` - Brakeman Scan\n* `Bugcrowd API Import` - Bugcrowd API Import\n* `BugCrowd Scan` - BugCrowd Scan\n* `Bundler-Audit Scan` - Bundler-Audit Scan\n* `Burp Dastardly Scan` - Burp Dastardly Scan\n* `Burp Enterprise Scan` - Burp Enterprise Scan (RENAMED to Burp Suite DAST Scan)\n* `Burp REST API` - Burp REST API\n* `Burp Scan` - Burp Scan\n* `Burp GraphQL API` - Burp Suite DAST GraphQL API\n* `Burp Suite DAST Scan` - Burp Suite DAST Scan\n* `CargoAudit Scan` - CargoAudit Scan\n* `Checkmarx CxFlow SAST` - Checkmarx CxFlow SAST\n* `Checkmarx One Scan` - Checkmarx One Scan\n* `Checkmarx OSA` - Checkmarx OSA\n* `Checkmarx Scan` - Checkmarx Scan\n* `Checkmarx Scan detailed` - Checkmarx Scan detailed\n* `Checkov Scan` - Checkov Scan\n* `Chef Inspect Log` - Chef Inspect Log\n* `Choctaw Hog Scan` - Choctaw Hog Scan\n* `Clair Scan` - Clair Scan\n* `Cloudflare Insights` - Cloudflare Insights\n* `Cloudsploit Scan` - Cloudsploit Scan\n* `Cobalt.io API Import` - Cobalt.io API Import\n* `Cobalt.io Scan` - Cobalt.io Scan\n* `Codechecker Report native` - Codechecker Report native\n* `Contrast Scan` - Contrast Scan\n* `Coverity API` - Coverity API\n* `Coverity Scan JSON Report` - Coverity Scan JSON Report\n* `Crashtest Security JSON File` - Crashtest Security JSON File\n* `Crashtest Security XML File` - Crashtest Security XML File\n* `CredScan Scan` - CredScan Scan\n* `Crunch42 Scan` - Crunch42 Scan\n* `Cyberwatch scan (Galeax)` - Cyberwatch scan (Galeax)\n* `CycloneDX Scan` - CycloneDX Scan\n* `Cycognito Scan` - Cycognito Scan\n* `DawnScanner Scan` - DawnScanner Scan\n* `Deepfence Threatmapper Report` - Deepfence Threatmapper Report\n* `Dependency Check Scan` - Dependency Check Scan\n* `Dependency Track Finding Packaging Format (FPF) Export` - Dependency Track Finding Packaging Format (FPF) Export\n* `Detect-secrets Scan` - Detect-secrets Scan\n* `docker-bench-security Scan` - docker-bench-security Scan\n* `Dockle Scan` - Dockle Scan\n* `DrHeader JSON Importer` - DrHeader JSON Importer\n* `DSOP Scan` - DSOP Scan\n* `Duroc Hog Scan` - Duroc Hog Scan\n* `Edgescan Scan` - Edgescan Scan\n* `ESLint Scan` - ESLint Scan\n* `Essex Hog Scan` - Essex Hog Scan\n* `Fortify Scan` - Fortify Scan\n* `Garak Scan` - Garak Scan\n* `Generic Findings Import` - Generic Findings Import\n* `Ggshield Scan` - Ggshield Scan\n* `Github SAST Scan` - Github SAST Scan\n* `Github Secrets Detection Report Scan` - Github Secrets Detection Report Scan\n* `Github Vulnerability Scan` - Github Vulnerability Scan\n* `GitLab API Fuzzing Report Scan` - GitLab API Fuzzing Report Scan\n* `GitLab Container Scan` - GitLab Container Scan Scan\n* `GitLab DAST Report` - GitLab DAST Report\n* `GitLab Dependency Scanning Report` - GitLab Dependency Scanning Report\n* `GitLab SAST Report` - GitLab SAST Report\n* `GitLab Secret Detection Report` - GitLab Secret Detection Report\n* `Gitleaks Scan` - Gitleaks Scan\n* `Google Cloud Artifact Vulnerability Scan` - Google Cloud Artifact Vulnerability Scan\n* `Gosec Scanner` - Gosec Scanner\n* `Gottingen Hog Scan` - Gottingen Hog Scan\n* `Govulncheck Scanner` - Govulncheck Scanner\n* `Govulncheck Scanner V2` - Govulncheck Scanner V2\n* `HackerOne Cases` - HackerOne Cases\n* `Hadolint Dockerfile check` - Hadolint Dockerfile check\n* `Harbor Vulnerability Scan` - Harbor Vulnerability Scan\n* `HCL AppScan on Cloud SAST XML` - HCL AppScan on Cloud SAST XML\n* `HCLAppScan XML` - HCLAppScan XML\n* `Horusec Scan` - Horusec Scan\n* `Humble Json Importer` - Humble Json Importer\n* `HuskyCI Report` - HuskyCI Report\n* `Hydra Scan` - Hydra Scan\n* `IBM AppScan DAST` - IBM AppScan DAST\n* `Immuniweb Scan` - Immuniweb Scan\n* `IntSights Report` - IntSights Report\n* `Invicti Scan` - Invicti Scan\n* `IriusRisk Threats Scan` - IriusRisk Threats Scan\n* `JFrog Xray API Summary Artifact Scan` - JFrog Xray API Summary Artifact Scan\n* `JFrog Xray On Demand Binary Scan` - JFrog Xray On Demand Binary Scan\n* `JFrog Xray Scan` - JFrog Xray Scan\n* `JFrog Xray Unified Scan` - JFrog Xray Unified Scan\n* `KICS Scan` - KICS Scan\n* `Kiuwan SCA Scan` - Kiuwan SCA Scan\n* `Kiuwan Scan` - Kiuwan Scan\n* `KrakenD Audit Scan` - KrakenD Audit Scan\n* `kube-bench Scan` - kube-bench Scan\n* `Kubeaudit Scan` - Kubeaudit Scan\n* `KubeHunter Scan` - KubeHunter Scan\n* `Kubescape JSON Importer` - Kubescape JSON Importer\n* `Legitify Scan` - Legitify Scan\n* `Mayhem SARIF Report` - Mayhem SARIF Report\n* `Mend Scan` - Mend Scan\n* `Meterian Scan` - Meterian Scan\n* `Microfocus Webinspect Scan` - Microfocus Webinspect Scan\n* `MobSF Scan` - MobSF Scan\n* `Mobsfscan Scan` - MobSF Scan\n* `MobSF Scorecard Scan` - MobSF Scorecard Scan\n* `Mozilla Observatory Scan` - Mozilla Observatory Scan\n* `MSDefender Parser` - MSDefender Parser\n* `n0s1 Scanner` - n0s1 Scanner\n* `Nancy Scan` - Nancy Scan\n* `Netsparker Scan` - Netsparker Scan\n* `NeuVector (compliance)` - NeuVector (compliance)\n* `NeuVector (REST)` - NeuVector (REST)\n* `Nexpose Scan` - Nexpose Scan\n* `Nikto Scan` - Nikto Scan\n* `Nmap Scan` - Nmap Scan\n* `Node Security Platform Scan` - Node Security Platform Scan\n* `Nosey Parker Scan` - Nosey Parker Scan\n* `NPM Audit Scan` - NPM Audit Scan\n* `NPM Audit v7+ Scan` - NPM Audit v7+ Scan\n* `Nuclei Scan` - Nuclei Scan\n* `OpenReports` - OpenReports\n* `Openscap Vulnerability Scan` - Openscap Vulnerability Scan\n* `OpenVAS Parser` - OpenVAS Parser\n* `OpenVAS Parser v2` - OpenVAS Parser v2\n* `Orca Security Alerts` - Orca Security Alerts\n* `ORT evaluated model Importer` - ORT evaluated model Importer\n* `OssIndex Devaudit SCA Scan Importer` - OssIndex Devaudit SCA Scan Importer\n* `OSV Scan` - OSV Scan\n* `Outpost24 Scan` - Outpost24 Scan\n* `PHP Security Audit v2` - PHP Security Audit v2\n* `PHP Symfony Security Check` - PHP Symfony Security Check\n* `PICUS Scan` - PICUS Scan\n* `PingCastle` - PingCastle\n* `pip-audit Scan` - pip-audit Scan\n* `PMD Scan` - PMD Scan\n* `Popeye Scan` - Popeye Scan\n* `Progpilot Scan` - Progpilot Scan\n* `Prowler Scan` - Prowler Scan\n* `PTART Report` - PTART Report\n* `PWN SAST` - PWN SAST\n* `Qualys Hacker Guardian Scan` - Qualys Hacker Guardian Scan\n* `Qualys Infrastructure Scan (WebGUI XML)` - Qualys Infrastructure Scan (WebGUI XML)\n* `Qualys Scan` - Qualys Scan\n* `Qualys VMDR` - Qualys VMDR\n* `Qualys Webapp Scan` - Qualys Webapp Scan\n* `Rapplex Scan` - Rapplex Scan\n* `Red Hat Satellite` - Red Hat Satellite\n* `Retire.js Scan` - Retire.js Scan\n* `ReversingLabs Spectra Assure` - ReversingLabs Spectra Assure\n* `Risk Recon API Importer` - Risk Recon API Importer\n* `Rubocop Scan` - Rubocop Scan\n* `Rusty Hog Scan` - Rusty Hog Scan\n* `SARIF` - SARIF\n* `Scantist Scan` - Scantist Scan\n* `Scout Suite Scan` - Scout Suite Scan\n* `Semgrep JSON Report` - Semgrep JSON Report\n* `Semgrep Pro JSON Report` - Semgrep Pro JSON Report\n* `SKF Scan` - SKF Scan\n* `Snyk Code Scan` - Snyk Code Scan\n* `Snyk Issue API Scan` - Snyk Issue API Scan\n* `Snyk Scan` - Snyk Scan\n* `Solar Appscreener Scan` - Solar Appscreener Scan Detailed_Results.csv\n* `SonarQube API Import` - SonarQube API Import\n* `SonarQube Scan` - SonarQube Scan\n* `SonarQube Scan detailed` - SonarQube Scan detailed\n* `Sonatype Application Scan` - Sonatype Application Scan\n* `SpotBugs Scan` - SpotBugs Scan\n* `SSH Audit Importer` - SSH Audit Importer\n* `SSL Labs Scan` - SSL Labs Scan\n* `Sslscan` - Sslscan\n* `Sslyze Scan` - Sslyze Scan\n* `SSLyze Scan (JSON)` - SSLyze Scan (JSON)\n* `StackHawk HawkScan` - StackHawk HawkScan\n* `Sysdig CLI Report` - Sysdig CLI Report Scan\n* `Sysdig Vulnerability Report` - Sysdig Vulnerability Report Scan\n* `Talisman Scan` - Talisman Scan\n* `Tenable Scan` - Tenable Scan\n* `Terrascan Scan` - Terrascan Scan\n* `Testssl Scan` - Testssl Scan\n* `TFSec Scan` - TFSec Scan\n* `Threagile risks report` - Threagile risks report\n* `ThreatComposer Scan` - ThreatComposer Scan\n* `Trivy Operator Scan` - Trivy Operator Scan\n* `Trivy Scan` - Trivy Scan\n* `Trufflehog Scan` - Trufflehog Scan\n* `Trufflehog3 Scan` - Trufflehog3 Scan\n* `Trustwave Fusion API Scan` - Trustwave Fusion API Scan\n* `Trustwave Scan (CSV)` - Trustwave Scan (CSV)\n* `Twistlock Image Scan` - Twistlock Image Scan\n* `VCG Scan` - VCG Scan\n* `Veracode Scan` - Veracode Scan\n* `Veracode SourceClear Scan` - Veracode SourceClear Scan\n* `Vulners` - Vulners\n* `Wapiti Scan` - Wapiti Scan\n* `Wazuh` - Wazuh\n* `WFuzz JSON report` - WFuzz JSON report\n* `Whispers Scan` - Whispers Scan\n* `WhiteHat Sentinel` - WhiteHat Sentinel\n* `Wiz Scan` - Wiz Scan\n* `Wizcli Dir Scan` - Wizcli Dir Scan\n* `Wizcli IaC Scan` - Wizcli IaC Scan\n* `Wizcli Img Scan` - Wizcli Img Scan\n* `Wpscan` - Wpscan\n* `Xanitizer Scan` - Xanitizer Scan\n* `Xeol Parser` - Xeol Parser\n* `Xygeni SAST Scan` - Xygeni SAST Scan\n* `Xygeni SCA Scan` - Xygeni SCA Scan\n* `Xygeni Secrets Scan` - Xygeni Secrets Scan\n* `Yarn Audit Scan` - Yarn Audit Scan\n* `ZAP Scan` - ZAP Scan\n* `Zora Parser` - Zora Parser","x-spec-enum-id":"467435d774cf7d2d"},"engagement":{"type":"integer"},"tags":{"type":"array","items":{"type":"string","minLength":1},"description":"Add tags that help describe this scan."},"close_old_findings":{"type":"boolean","default":false,"description":"Old findings no longer present in the new report get closed as mitigated when importing. If service has been set, only the findings for this service will be closed; if no service is set, only findings without a service will be closed. This only affects findings within the same engagement."},"close_old_findings_product_scope":{"type":"boolean","default":false,"description":"Old findings no longer present in the new report get closed as mitigated when importing. If service has been set, only the findings for this service will be closed; if no service is set, only findings without a service will be closed. This only affects findings within the same product.By default, it is false meaning that only old findings of the same type in the engagement are in scope."},"version":{"type":"string","minLength":1,"description":"Version that was scanned."},"background_import":{"type":"boolean","nullable":true,"description":"Selecting to import in the background will modify the import process to first parse the file for any errors, return the response, and then create findings in the background"},"push_to_integrator":{"type":"boolean","default":false,"description":"Dictates whether this object will be dispatched to the associated integrator, and override the configured setting that decides if the object should be pushed or not."}},"required":["scan_type"]},"AsyncReImportScan":{"type":"object","properties":{"scan_date":{"type":"string","format":"date","description":"Scan completion date will be used on all findings."},"minimum_severity":{"enum":["Info","Low","Medium","High","Critical"],"type":"string","x-spec-enum-id":"fc5d16a20ed06136","default":"Info","description":"Minimum severity level to be imported\n\n* `Info` - Info\n* `Low` - Low\n* `Medium` - Medium\n* `High` - High\n* `Critical` - Critical"},"active":{"type":"boolean","description":"Force findings to be active/inactive or default to the original tool (None)"},"verified":{"type":"boolean","description":"Force findings to be verified/not verified or default to the original tool (None)"},"endpoint_to_add":{"type":"integer","description":"Enter the ID of a Location that is associated with the target Product. New Findings will be added to that Location."},"file":{"type":"string","format":"uri","pattern":"(?:xml|csv|nessus|json|jsonl|html|js|zip|xlsx|txt|sarif|fpr|md|log|fvdl)$"},"product_type_name":{"type":"string","description":"Also referred to as 'Organization' name."},"product_name":{"type":"string","description":"Also referred to as 'Asset' name."},"engagement_name":{"type":"string"},"engagement_end_date":{"type":"string","format":"date","description":"End Date for Engagement. Default is current time + 365 days. Required format year-month-day"},"source_code_management_uri":{"type":"string","format":"uri","description":"Resource link to source code","maxLength":600},"test_title":{"type":"string"},"auto_create_context":{"type":"boolean"},"deduplication_on_engagement":{"type":"boolean"},"lead":{"type":"integer","nullable":true},"push_to_jira":{"type":"boolean","default":false},"deduplication_execution_mode":{"enum":["async","async_wait","sync",null],"type":"string","x-spec-enum-id":"bf7fb8ff28520a46","nullable":true,"description":"Override how import post-processing (deduplication, jira push, grading, ...) is executed for this request. 'async' dispatches post-processing to the background and responds immediately (default). 'async_wait' dispatches to the background but waits for deduplication to finish before responding, so notifications and the returned statistics reflect the deduplicated state. 'sync' runs everything inline. If omitted, falls back to the user's profile setting (deduplication_execution_mode).\n\n* `async` - Async (do not wait)\n* `async_wait` - Async, wait for deduplication\n* `sync` - Synchronous (block)"},"environment":{"type":"string"},"build_id":{"type":"string","description":"ID of the build that was scanned."},"branch_tag":{"type":"string","description":"Branch or Tag that was scanned."},"commit_hash":{"type":"string","description":"Commit that was scanned."},"api_scan_configuration":{"type":"integer","nullable":true},"service":{"type":"string","description":"A service is a self-contained piece of functionality within a Product. This is an optional field which is used in deduplication and closing of old findings when set. This affects the whole engagement/product depending on your deduplication scope."},"group_by":{"enum":["component_name","component_name+component_version","file_path","finding_title","vuln_id_from_tool"],"type":"string","x-spec-enum-id":"a9b19a914dcfbd21","description":"Choose an option to automatically group new findings by the chosen option.\n\n* `component_name` - Component Name\n* `component_name+component_version` - Component Name + Version\n* `file_path` - File path\n* `finding_title` - Finding Title\n* `vuln_id_from_tool` - Vulnerability ID from Tool"},"create_finding_groups_for_all_findings":{"type":"boolean","default":true,"description":"If set to false, finding groups will only be created when there is more than one grouped finding"},"test_id":{"type":"integer","readOnly":true},"engagement_id":{"type":"integer","readOnly":true},"product_id":{"type":"integer","readOnly":true,"description":"Also referred to as 'Asset' ID."},"product_type_id":{"type":"integer","readOnly":true,"description":"Also referred to as 'Organization' ID."},"statistics":{"allOf":[{"$ref":"#/components/schemas/ImportStatistics"}],"readOnly":true},"deduplication_complete":{"type":"boolean","readOnly":true,"description":"Whether deduplication had finished by the time this response was produced. True for 'sync' and for 'async_wait' when deduplication completed within the timeout; False for 'async' (deduplication is still running in the background) or when an 'async_wait' import timed out waiting for it."},"pro":{"type":"array","items":{},"readOnly":true},"apply_tags_to_findings":{"type":"boolean","description":"If set to True, the tags will be applied to the findings"},"apply_tags_to_endpoints":{"type":"boolean","description":"If set to True, the tags will be applied to the locations"},"do_not_reactivate":{"type":"boolean","default":false,"description":"Select if the import should ignore active findings from the report, useful for triage-less scanners. Will keep existing findings closed, without reactivating them. For more information check the docs."},"scan_type":{"enum":["Acunetix Scan","Alert Logic Scan","Anchore Engine Scan","Anchore Enterprise Policy Check","Anchore Grype","Anchore Grype detailed","AnchoreCTL Policies Report","AnchoreCTL Vuln Report","AppCheck Web Application Scanner","AppSpider Scan","Aqua Scan","Arachni Scan","AuditJS Scan","AWS Inspector2 Scan","AWS Prowler Scan","AWS Prowler V3","AWS Security Finding Format (ASFF) Scan","AWS Security Hub Scan","Azure Security Center Recommendations Scan","Bandit Scan","Bearer CLI","BlackDuck API","Blackduck Binary Analysis","Blackduck Component Risk","Blackduck Hub Scan","Brakeman Scan","Bugcrowd API Import","BugCrowd Scan","Bundler-Audit Scan","Burp Dastardly Scan","Burp Enterprise Scan","Burp REST API","Burp Scan","Burp GraphQL API","Burp Suite DAST Scan","CargoAudit Scan","Checkmarx CxFlow SAST","Checkmarx One Scan","Checkmarx OSA","Checkmarx Scan","Checkmarx Scan detailed","Checkov Scan","Chef Inspect Log","Choctaw Hog Scan","Clair Scan","Cloudflare Insights","Cloudsploit Scan","Cobalt.io API Import","Cobalt.io Scan","Codechecker Report native","Contrast Scan","Coverity API","Coverity Scan JSON Report","Crashtest Security JSON File","Crashtest Security XML File","CredScan Scan","Crunch42 Scan","Cyberwatch scan (Galeax)","CycloneDX Scan","Cycognito Scan","DawnScanner Scan","Deepfence Threatmapper Report","Dependency Check Scan","Dependency Track Finding Packaging Format (FPF) Export","Detect-secrets Scan","docker-bench-security Scan","Dockle Scan","DrHeader JSON Importer","DSOP Scan","Duroc Hog Scan","Edgescan Scan","ESLint Scan","Essex Hog Scan","Fortify Scan","Garak Scan","Generic Findings Import","Ggshield Scan","Github SAST Scan","Github Secrets Detection Report Scan","Github Vulnerability Scan","GitLab API Fuzzing Report Scan","GitLab Container Scan","GitLab DAST Report","GitLab Dependency Scanning Report","GitLab SAST Report","GitLab Secret Detection Report","Gitleaks Scan","Google Cloud Artifact Vulnerability Scan","Gosec Scanner","Gottingen Hog Scan","Govulncheck Scanner","Govulncheck Scanner V2","HackerOne Cases","Hadolint Dockerfile check","Harbor Vulnerability Scan","HCL AppScan on Cloud SAST XML","HCLAppScan XML","Horusec Scan","Humble Json Importer","HuskyCI Report","Hydra Scan","IBM AppScan DAST","Immuniweb Scan","IntSights Report","Invicti Scan","IriusRisk Threats Scan","JFrog Xray API Summary Artifact Scan","JFrog Xray On Demand Binary Scan","JFrog Xray Scan","JFrog Xray Unified Scan","KICS Scan","Kiuwan SCA Scan","Kiuwan Scan","KrakenD Audit Scan","kube-bench Scan","Kubeaudit Scan","KubeHunter Scan","Kubescape JSON Importer","Legitify Scan","Mayhem SARIF Report","Mend Scan","Meterian Scan","Microfocus Webinspect Scan","MobSF Scan","Mobsfscan Scan","MobSF Scorecard Scan","Mozilla Observatory Scan","MSDefender Parser","n0s1 Scanner","Nancy Scan","Netsparker Scan","NeuVector (compliance)","NeuVector (REST)","Nexpose Scan","Nikto Scan","Nmap Scan","Node Security Platform Scan","Nosey Parker Scan","NPM Audit Scan","NPM Audit v7+ Scan","Nuclei Scan","OpenReports","Openscap Vulnerability Scan","OpenVAS Parser","OpenVAS Parser v2","Orca Security Alerts","ORT evaluated model Importer","OssIndex Devaudit SCA Scan Importer","OSV Scan","Outpost24 Scan","PHP Security Audit v2","PHP Symfony Security Check","PICUS Scan","PingCastle","pip-audit Scan","PMD Scan","Popeye Scan","Progpilot Scan","Prowler Scan","PTART Report","PWN SAST","Qualys Hacker Guardian Scan","Qualys Infrastructure Scan (WebGUI XML)","Qualys Scan","Qualys VMDR","Qualys Webapp Scan","Rapplex Scan","Red Hat Satellite","Retire.js Scan","ReversingLabs Spectra Assure","Risk Recon API Importer","Rubocop Scan","Rusty Hog Scan","SARIF","Scantist Scan","Scout Suite Scan","Semgrep JSON Report","Semgrep Pro JSON Report","SKF Scan","Snyk Code Scan","Snyk Issue API Scan","Snyk Scan","Solar Appscreener Scan","SonarQube API Import","SonarQube Scan","SonarQube Scan detailed","Sonatype Application Scan","SpotBugs Scan","SSH Audit Importer","SSL Labs Scan","Sslscan","Sslyze Scan","SSLyze Scan (JSON)","StackHawk HawkScan","Sysdig CLI Report","Sysdig Vulnerability Report","Talisman Scan","Tenable Scan","Terrascan Scan","Testssl Scan","TFSec Scan","Threagile risks report","ThreatComposer Scan","Trivy Operator Scan","Trivy Scan","Trufflehog Scan","Trufflehog3 Scan","Trustwave Fusion API Scan","Trustwave Scan (CSV)","Twistlock Image Scan","VCG Scan","Veracode Scan","Veracode SourceClear Scan","Vulners","Wapiti Scan","Wazuh","WFuzz JSON report","Whispers Scan","WhiteHat Sentinel","Wiz Scan","Wizcli Dir Scan","Wizcli IaC Scan","Wizcli Img Scan","Wpscan","Xanitizer Scan","Xeol Parser","Xygeni SAST Scan","Xygeni SCA Scan","Xygeni Secrets Scan","Yarn Audit Scan","ZAP Scan","Zora Parser"],"type":"string","description":"* `Acunetix Scan` - Acunetix Scanner\n* `Alert Logic Scan` - Alert Logic Scan\n* `Anchore Engine Scan` - Anchore Engine Scan\n* `Anchore Enterprise Policy Check` - Anchore Enterprise Policy Check\n* `Anchore Grype` - Anchore Grype\n* `Anchore Grype detailed` - Anchore Grype detailed\n* `AnchoreCTL Policies Report` - AnchoreCTL Policies Report\n* `AnchoreCTL Vuln Report` - AnchoreCTL Vuln Report\n* `AppCheck Web Application Scanner` - AppCheck Web Application Scanner\n* `AppSpider Scan` - AppSpider Scan\n* `Aqua Scan` - Aqua Scan\n* `Arachni Scan` - Arachni Scan\n* `AuditJS Scan` - AuditJS Scan\n* `AWS Inspector2 Scan` - AWS Inspector2 Scan\n* `AWS Prowler Scan` - AWS Prowler Scan\n* `AWS Prowler V3` - AWS Prowler V3\n* `AWS Security Finding Format (ASFF) Scan` - AWS Security Finding Format (ASFF)\n* `AWS Security Hub Scan` - AWS Security Hub Scan\n* `Azure Security Center Recommendations Scan` - Azure Security Center Recommendations Scan\n* `Bandit Scan` - Bandit Scan\n* `Bearer CLI` - Bearer CLI\n* `BlackDuck API` - BlackDuck API\n* `Blackduck Binary Analysis` - Blackduck Binary Analysis\n* `Blackduck Component Risk` - Blackduck Component Risk\n* `Blackduck Hub Scan` - Blackduck Hub Scan\n* `Brakeman Scan` - Brakeman Scan\n* `Bugcrowd API Import` - Bugcrowd API Import\n* `BugCrowd Scan` - BugCrowd Scan\n* `Bundler-Audit Scan` - Bundler-Audit Scan\n* `Burp Dastardly Scan` - Burp Dastardly Scan\n* `Burp Enterprise Scan` - Burp Enterprise Scan (RENAMED to Burp Suite DAST Scan)\n* `Burp REST API` - Burp REST API\n* `Burp Scan` - Burp Scan\n* `Burp GraphQL API` - Burp Suite DAST GraphQL API\n* `Burp Suite DAST Scan` - Burp Suite DAST Scan\n* `CargoAudit Scan` - CargoAudit Scan\n* `Checkmarx CxFlow SAST` - Checkmarx CxFlow SAST\n* `Checkmarx One Scan` - Checkmarx One Scan\n* `Checkmarx OSA` - Checkmarx OSA\n* `Checkmarx Scan` - Checkmarx Scan\n* `Checkmarx Scan detailed` - Checkmarx Scan detailed\n* `Checkov Scan` - Checkov Scan\n* `Chef Inspect Log` - Chef Inspect Log\n* `Choctaw Hog Scan` - Choctaw Hog Scan\n* `Clair Scan` - Clair Scan\n* `Cloudflare Insights` - Cloudflare Insights\n* `Cloudsploit Scan` - Cloudsploit Scan\n* `Cobalt.io API Import` - Cobalt.io API Import\n* `Cobalt.io Scan` - Cobalt.io Scan\n* `Codechecker Report native` - Codechecker Report native\n* `Contrast Scan` - Contrast Scan\n* `Coverity API` - Coverity API\n* `Coverity Scan JSON Report` - Coverity Scan JSON Report\n* `Crashtest Security JSON File` - Crashtest Security JSON File\n* `Crashtest Security XML File` - Crashtest Security XML File\n* `CredScan Scan` - CredScan Scan\n* `Crunch42 Scan` - Crunch42 Scan\n* `Cyberwatch scan (Galeax)` - Cyberwatch scan (Galeax)\n* `CycloneDX Scan` - CycloneDX Scan\n* `Cycognito Scan` - Cycognito Scan\n* `DawnScanner Scan` - DawnScanner Scan\n* `Deepfence Threatmapper Report` - Deepfence Threatmapper Report\n* `Dependency Check Scan` - Dependency Check Scan\n* `Dependency Track Finding Packaging Format (FPF) Export` - Dependency Track Finding Packaging Format (FPF) Export\n* `Detect-secrets Scan` - Detect-secrets Scan\n* `docker-bench-security Scan` - docker-bench-security Scan\n* `Dockle Scan` - Dockle Scan\n* `DrHeader JSON Importer` - DrHeader JSON Importer\n* `DSOP Scan` - DSOP Scan\n* `Duroc Hog Scan` - Duroc Hog Scan\n* `Edgescan Scan` - Edgescan Scan\n* `ESLint Scan` - ESLint Scan\n* `Essex Hog Scan` - Essex Hog Scan\n* `Fortify Scan` - Fortify Scan\n* `Garak Scan` - Garak Scan\n* `Generic Findings Import` - Generic Findings Import\n* `Ggshield Scan` - Ggshield Scan\n* `Github SAST Scan` - Github SAST Scan\n* `Github Secrets Detection Report Scan` - Github Secrets Detection Report Scan\n* `Github Vulnerability Scan` - Github Vulnerability Scan\n* `GitLab API Fuzzing Report Scan` - GitLab API Fuzzing Report Scan\n* `GitLab Container Scan` - GitLab Container Scan Scan\n* `GitLab DAST Report` - GitLab DAST Report\n* `GitLab Dependency Scanning Report` - GitLab Dependency Scanning Report\n* `GitLab SAST Report` - GitLab SAST Report\n* `GitLab Secret Detection Report` - GitLab Secret Detection Report\n* `Gitleaks Scan` - Gitleaks Scan\n* `Google Cloud Artifact Vulnerability Scan` - Google Cloud Artifact Vulnerability Scan\n* `Gosec Scanner` - Gosec Scanner\n* `Gottingen Hog Scan` - Gottingen Hog Scan\n* `Govulncheck Scanner` - Govulncheck Scanner\n* `Govulncheck Scanner V2` - Govulncheck Scanner V2\n* `HackerOne Cases` - HackerOne Cases\n* `Hadolint Dockerfile check` - Hadolint Dockerfile check\n* `Harbor Vulnerability Scan` - Harbor Vulnerability Scan\n* `HCL AppScan on Cloud SAST XML` - HCL AppScan on Cloud SAST XML\n* `HCLAppScan XML` - HCLAppScan XML\n* `Horusec Scan` - Horusec Scan\n* `Humble Json Importer` - Humble Json Importer\n* `HuskyCI Report` - HuskyCI Report\n* `Hydra Scan` - Hydra Scan\n* `IBM AppScan DAST` - IBM AppScan DAST\n* `Immuniweb Scan` - Immuniweb Scan\n* `IntSights Report` - IntSights Report\n* `Invicti Scan` - Invicti Scan\n* `IriusRisk Threats Scan` - IriusRisk Threats Scan\n* `JFrog Xray API Summary Artifact Scan` - JFrog Xray API Summary Artifact Scan\n* `JFrog Xray On Demand Binary Scan` - JFrog Xray On Demand Binary Scan\n* `JFrog Xray Scan` - JFrog Xray Scan\n* `JFrog Xray Unified Scan` - JFrog Xray Unified Scan\n* `KICS Scan` - KICS Scan\n* `Kiuwan SCA Scan` - Kiuwan SCA Scan\n* `Kiuwan Scan` - Kiuwan Scan\n* `KrakenD Audit Scan` - KrakenD Audit Scan\n* `kube-bench Scan` - kube-bench Scan\n* `Kubeaudit Scan` - Kubeaudit Scan\n* `KubeHunter Scan` - KubeHunter Scan\n* `Kubescape JSON Importer` - Kubescape JSON Importer\n* `Legitify Scan` - Legitify Scan\n* `Mayhem SARIF Report` - Mayhem SARIF Report\n* `Mend Scan` - Mend Scan\n* `Meterian Scan` - Meterian Scan\n* `Microfocus Webinspect Scan` - Microfocus Webinspect Scan\n* `MobSF Scan` - MobSF Scan\n* `Mobsfscan Scan` - MobSF Scan\n* `MobSF Scorecard Scan` - MobSF Scorecard Scan\n* `Mozilla Observatory Scan` - Mozilla Observatory Scan\n* `MSDefender Parser` - MSDefender Parser\n* `n0s1 Scanner` - n0s1 Scanner\n* `Nancy Scan` - Nancy Scan\n* `Netsparker Scan` - Netsparker Scan\n* `NeuVector (compliance)` - NeuVector (compliance)\n* `NeuVector (REST)` - NeuVector (REST)\n* `Nexpose Scan` - Nexpose Scan\n* `Nikto Scan` - Nikto Scan\n* `Nmap Scan` - Nmap Scan\n* `Node Security Platform Scan` - Node Security Platform Scan\n* `Nosey Parker Scan` - Nosey Parker Scan\n* `NPM Audit Scan` - NPM Audit Scan\n* `NPM Audit v7+ Scan` - NPM Audit v7+ Scan\n* `Nuclei Scan` - Nuclei Scan\n* `OpenReports` - OpenReports\n* `Openscap Vulnerability Scan` - Openscap Vulnerability Scan\n* `OpenVAS Parser` - OpenVAS Parser\n* `OpenVAS Parser v2` - OpenVAS Parser v2\n* `Orca Security Alerts` - Orca Security Alerts\n* `ORT evaluated model Importer` - ORT evaluated model Importer\n* `OssIndex Devaudit SCA Scan Importer` - OssIndex Devaudit SCA Scan Importer\n* `OSV Scan` - OSV Scan\n* `Outpost24 Scan` - Outpost24 Scan\n* `PHP Security Audit v2` - PHP Security Audit v2\n* `PHP Symfony Security Check` - PHP Symfony Security Check\n* `PICUS Scan` - PICUS Scan\n* `PingCastle` - PingCastle\n* `pip-audit Scan` - pip-audit Scan\n* `PMD Scan` - PMD Scan\n* `Popeye Scan` - Popeye Scan\n* `Progpilot Scan` - Progpilot Scan\n* `Prowler Scan` - Prowler Scan\n* `PTART Report` - PTART Report\n* `PWN SAST` - PWN SAST\n* `Qualys Hacker Guardian Scan` - Qualys Hacker Guardian Scan\n* `Qualys Infrastructure Scan (WebGUI XML)` - Qualys Infrastructure Scan (WebGUI XML)\n* `Qualys Scan` - Qualys Scan\n* `Qualys VMDR` - Qualys VMDR\n* `Qualys Webapp Scan` - Qualys Webapp Scan\n* `Rapplex Scan` - Rapplex Scan\n* `Red Hat Satellite` - Red Hat Satellite\n* `Retire.js Scan` - Retire.js Scan\n* `ReversingLabs Spectra Assure` - ReversingLabs Spectra Assure\n* `Risk Recon API Importer` - Risk Recon API Importer\n* `Rubocop Scan` - Rubocop Scan\n* `Rusty Hog Scan` - Rusty Hog Scan\n* `SARIF` - SARIF\n* `Scantist Scan` - Scantist Scan\n* `Scout Suite Scan` - Scout Suite Scan\n* `Semgrep JSON Report` - Semgrep JSON Report\n* `Semgrep Pro JSON Report` - Semgrep Pro JSON Report\n* `SKF Scan` - SKF Scan\n* `Snyk Code Scan` - Snyk Code Scan\n* `Snyk Issue API Scan` - Snyk Issue API Scan\n* `Snyk Scan` - Snyk Scan\n* `Solar Appscreener Scan` - Solar Appscreener Scan Detailed_Results.csv\n* `SonarQube API Import` - SonarQube API Import\n* `SonarQube Scan` - SonarQube Scan\n* `SonarQube Scan detailed` - SonarQube Scan detailed\n* `Sonatype Application Scan` - Sonatype Application Scan\n* `SpotBugs Scan` - SpotBugs Scan\n* `SSH Audit Importer` - SSH Audit Importer\n* `SSL Labs Scan` - SSL Labs Scan\n* `Sslscan` - Sslscan\n* `Sslyze Scan` - Sslyze Scan\n* `SSLyze Scan (JSON)` - SSLyze Scan (JSON)\n* `StackHawk HawkScan` - StackHawk HawkScan\n* `Sysdig CLI Report` - Sysdig CLI Report Scan\n* `Sysdig Vulnerability Report` - Sysdig Vulnerability Report Scan\n* `Talisman Scan` - Talisman Scan\n* `Tenable Scan` - Tenable Scan\n* `Terrascan Scan` - Terrascan Scan\n* `Testssl Scan` - Testssl Scan\n* `TFSec Scan` - TFSec Scan\n* `Threagile risks report` - Threagile risks report\n* `ThreatComposer Scan` - ThreatComposer Scan\n* `Trivy Operator Scan` - Trivy Operator Scan\n* `Trivy Scan` - Trivy Scan\n* `Trufflehog Scan` - Trufflehog Scan\n* `Trufflehog3 Scan` - Trufflehog3 Scan\n* `Trustwave Fusion API Scan` - Trustwave Fusion API Scan\n* `Trustwave Scan (CSV)` - Trustwave Scan (CSV)\n* `Twistlock Image Scan` - Twistlock Image Scan\n* `VCG Scan` - VCG Scan\n* `Veracode Scan` - Veracode Scan\n* `Veracode SourceClear Scan` - Veracode SourceClear Scan\n* `Vulners` - Vulners\n* `Wapiti Scan` - Wapiti Scan\n* `Wazuh` - Wazuh\n* `WFuzz JSON report` - WFuzz JSON report\n* `Whispers Scan` - Whispers Scan\n* `WhiteHat Sentinel` - WhiteHat Sentinel\n* `Wiz Scan` - Wiz Scan\n* `Wizcli Dir Scan` - Wizcli Dir Scan\n* `Wizcli IaC Scan` - Wizcli IaC Scan\n* `Wizcli Img Scan` - Wizcli Img Scan\n* `Wpscan` - Wpscan\n* `Xanitizer Scan` - Xanitizer Scan\n* `Xeol Parser` - Xeol Parser\n* `Xygeni SAST Scan` - Xygeni SAST Scan\n* `Xygeni SCA Scan` - Xygeni SCA Scan\n* `Xygeni Secrets Scan` - Xygeni Secrets Scan\n* `Yarn Audit Scan` - Yarn Audit Scan\n* `ZAP Scan` - ZAP Scan\n* `Zora Parser` - Zora Parser","x-spec-enum-id":"467435d774cf7d2d"},"test":{"type":"integer"},"close_old_findings":{"type":"boolean","default":true,"description":"Old findings no longer present in the new report get closed as mitigated when importing. If service has been set, only the findings for this service will be closed; if no service is set, only findings without a service will be closed. This only affects findings within the same test."},"close_old_findings_product_scope":{"type":"boolean","default":false,"description":"This has no effect on reimport"},"version":{"type":"string","description":"Version that will be set on existing Test object. Leave empty to leave existing value in place."},"tags":{"type":"array","items":{"type":"string"},"description":"Modify existing tags that help describe this scan. (Existing test tags will be overwritten)"},"background_import":{"type":"boolean","nullable":true,"description":"Selecting to import in the background will modify the import process to first parse the file for any errors, return the response, and then create findings in the background"},"push_to_integrator":{"type":"boolean","default":false,"description":"Dictates whether this object will be dispatched to the associated integrator, and override the configured setting that decides if the object should be pushed or not."},"message":{"type":"string","readOnly":true,"default":"ReImport processed successfully"}},"required":["deduplication_complete","engagement_id","message","pro","product_id","product_type_id","scan_type","statistics","test_id"]},"AsyncReImportScanRequest":{"type":"object","properties":{"scan_date":{"type":"string","format":"date","description":"Scan completion date will be used on all findings."},"minimum_severity":{"enum":["Info","Low","Medium","High","Critical"],"type":"string","x-spec-enum-id":"fc5d16a20ed06136","default":"Info","description":"Minimum severity level to be imported\n\n* `Info` - Info\n* `Low` - Low\n* `Medium` - Medium\n* `High` - High\n* `Critical` - Critical"},"active":{"type":"boolean","description":"Force findings to be active/inactive or default to the original tool (None)"},"verified":{"type":"boolean","description":"Force findings to be verified/not verified or default to the original tool (None)"},"endpoint_to_add":{"type":"integer","description":"Enter the ID of a Location that is associated with the target Product. New Findings will be added to that Location."},"file":{"type":"string","format":"binary","pattern":"(?:xml|csv|nessus|json|jsonl|html|js|zip|xlsx|txt|sarif|fpr|md|log|fvdl)$"},"product_type_name":{"type":"string","minLength":1,"description":"Also referred to as 'Organization' name."},"product_name":{"type":"string","minLength":1,"description":"Also referred to as 'Asset' name."},"engagement_name":{"type":"string","minLength":1},"engagement_end_date":{"type":"string","format":"date","description":"End Date for Engagement. Default is current time + 365 days. Required format year-month-day"},"source_code_management_uri":{"type":"string","format":"uri","minLength":1,"description":"Resource link to source code","maxLength":600},"test_title":{"type":"string","minLength":1},"auto_create_context":{"type":"boolean"},"deduplication_on_engagement":{"type":"boolean"},"lead":{"type":"integer","nullable":true},"push_to_jira":{"type":"boolean","default":false},"deduplication_execution_mode":{"enum":["async","async_wait","sync",null],"type":"string","x-spec-enum-id":"bf7fb8ff28520a46","nullable":true,"description":"Override how import post-processing (deduplication, jira push, grading, ...) is executed for this request. 'async' dispatches post-processing to the background and responds immediately (default). 'async_wait' dispatches to the background but waits for deduplication to finish before responding, so notifications and the returned statistics reflect the deduplicated state. 'sync' runs everything inline. If omitted, falls back to the user's profile setting (deduplication_execution_mode).\n\n* `async` - Async (do not wait)\n* `async_wait` - Async, wait for deduplication\n* `sync` - Synchronous (block)"},"environment":{"type":"string","minLength":1},"build_id":{"type":"string","minLength":1,"description":"ID of the build that was scanned."},"branch_tag":{"type":"string","minLength":1,"description":"Branch or Tag that was scanned."},"commit_hash":{"type":"string","minLength":1,"description":"Commit that was scanned."},"api_scan_configuration":{"type":"integer","nullable":true},"service":{"type":"string","minLength":1,"description":"A service is a self-contained piece of functionality within a Product. This is an optional field which is used in deduplication and closing of old findings when set. This affects the whole engagement/product depending on your deduplication scope."},"group_by":{"enum":["component_name","component_name+component_version","file_path","finding_title","vuln_id_from_tool"],"type":"string","x-spec-enum-id":"a9b19a914dcfbd21","description":"Choose an option to automatically group new findings by the chosen option.\n\n* `component_name` - Component Name\n* `component_name+component_version` - Component Name + Version\n* `file_path` - File path\n* `finding_title` - Finding Title\n* `vuln_id_from_tool` - Vulnerability ID from Tool"},"create_finding_groups_for_all_findings":{"type":"boolean","default":true,"description":"If set to false, finding groups will only be created when there is more than one grouped finding"},"apply_tags_to_findings":{"type":"boolean","description":"If set to True, the tags will be applied to the findings"},"apply_tags_to_endpoints":{"type":"boolean","description":"If set to True, the tags will be applied to the locations"},"do_not_reactivate":{"type":"boolean","default":false,"description":"Select if the import should ignore active findings from the report, useful for triage-less scanners. Will keep existing findings closed, without reactivating them. For more information check the docs."},"scan_type":{"enum":["Acunetix Scan","Alert Logic Scan","Anchore Engine Scan","Anchore Enterprise Policy Check","Anchore Grype","Anchore Grype detailed","AnchoreCTL Policies Report","AnchoreCTL Vuln Report","AppCheck Web Application Scanner","AppSpider Scan","Aqua Scan","Arachni Scan","AuditJS Scan","AWS Inspector2 Scan","AWS Prowler Scan","AWS Prowler V3","AWS Security Finding Format (ASFF) Scan","AWS Security Hub Scan","Azure Security Center Recommendations Scan","Bandit Scan","Bearer CLI","BlackDuck API","Blackduck Binary Analysis","Blackduck Component Risk","Blackduck Hub Scan","Brakeman Scan","Bugcrowd API Import","BugCrowd Scan","Bundler-Audit Scan","Burp Dastardly Scan","Burp Enterprise Scan","Burp REST API","Burp Scan","Burp GraphQL API","Burp Suite DAST Scan","CargoAudit Scan","Checkmarx CxFlow SAST","Checkmarx One Scan","Checkmarx OSA","Checkmarx Scan","Checkmarx Scan detailed","Checkov Scan","Chef Inspect Log","Choctaw Hog Scan","Clair Scan","Cloudflare Insights","Cloudsploit Scan","Cobalt.io API Import","Cobalt.io Scan","Codechecker Report native","Contrast Scan","Coverity API","Coverity Scan JSON Report","Crashtest Security JSON File","Crashtest Security XML File","CredScan Scan","Crunch42 Scan","Cyberwatch scan (Galeax)","CycloneDX Scan","Cycognito Scan","DawnScanner Scan","Deepfence Threatmapper Report","Dependency Check Scan","Dependency Track Finding Packaging Format (FPF) Export","Detect-secrets Scan","docker-bench-security Scan","Dockle Scan","DrHeader JSON Importer","DSOP Scan","Duroc Hog Scan","Edgescan Scan","ESLint Scan","Essex Hog Scan","Fortify Scan","Garak Scan","Generic Findings Import","Ggshield Scan","Github SAST Scan","Github Secrets Detection Report Scan","Github Vulnerability Scan","GitLab API Fuzzing Report Scan","GitLab Container Scan","GitLab DAST Report","GitLab Dependency Scanning Report","GitLab SAST Report","GitLab Secret Detection Report","Gitleaks Scan","Google Cloud Artifact Vulnerability Scan","Gosec Scanner","Gottingen Hog Scan","Govulncheck Scanner","Govulncheck Scanner V2","HackerOne Cases","Hadolint Dockerfile check","Harbor Vulnerability Scan","HCL AppScan on Cloud SAST XML","HCLAppScan XML","Horusec Scan","Humble Json Importer","HuskyCI Report","Hydra Scan","IBM AppScan DAST","Immuniweb Scan","IntSights Report","Invicti Scan","IriusRisk Threats Scan","JFrog Xray API Summary Artifact Scan","JFrog Xray On Demand Binary Scan","JFrog Xray Scan","JFrog Xray Unified Scan","KICS Scan","Kiuwan SCA Scan","Kiuwan Scan","KrakenD Audit Scan","kube-bench Scan","Kubeaudit Scan","KubeHunter Scan","Kubescape JSON Importer","Legitify Scan","Mayhem SARIF Report","Mend Scan","Meterian Scan","Microfocus Webinspect Scan","MobSF Scan","Mobsfscan Scan","MobSF Scorecard Scan","Mozilla Observatory Scan","MSDefender Parser","n0s1 Scanner","Nancy Scan","Netsparker Scan","NeuVector (compliance)","NeuVector (REST)","Nexpose Scan","Nikto Scan","Nmap Scan","Node Security Platform Scan","Nosey Parker Scan","NPM Audit Scan","NPM Audit v7+ Scan","Nuclei Scan","OpenReports","Openscap Vulnerability Scan","OpenVAS Parser","OpenVAS Parser v2","Orca Security Alerts","ORT evaluated model Importer","OssIndex Devaudit SCA Scan Importer","OSV Scan","Outpost24 Scan","PHP Security Audit v2","PHP Symfony Security Check","PICUS Scan","PingCastle","pip-audit Scan","PMD Scan","Popeye Scan","Progpilot Scan","Prowler Scan","PTART Report","PWN SAST","Qualys Hacker Guardian Scan","Qualys Infrastructure Scan (WebGUI XML)","Qualys Scan","Qualys VMDR","Qualys Webapp Scan","Rapplex Scan","Red Hat Satellite","Retire.js Scan","ReversingLabs Spectra Assure","Risk Recon API Importer","Rubocop Scan","Rusty Hog Scan","SARIF","Scantist Scan","Scout Suite Scan","Semgrep JSON Report","Semgrep Pro JSON Report","SKF Scan","Snyk Code Scan","Snyk Issue API Scan","Snyk Scan","Solar Appscreener Scan","SonarQube API Import","SonarQube Scan","SonarQube Scan detailed","Sonatype Application Scan","SpotBugs Scan","SSH Audit Importer","SSL Labs Scan","Sslscan","Sslyze Scan","SSLyze Scan (JSON)","StackHawk HawkScan","Sysdig CLI Report","Sysdig Vulnerability Report","Talisman Scan","Tenable Scan","Terrascan Scan","Testssl Scan","TFSec Scan","Threagile risks report","ThreatComposer Scan","Trivy Operator Scan","Trivy Scan","Trufflehog Scan","Trufflehog3 Scan","Trustwave Fusion API Scan","Trustwave Scan (CSV)","Twistlock Image Scan","VCG Scan","Veracode Scan","Veracode SourceClear Scan","Vulners","Wapiti Scan","Wazuh","WFuzz JSON report","Whispers Scan","WhiteHat Sentinel","Wiz Scan","Wizcli Dir Scan","Wizcli IaC Scan","Wizcli Img Scan","Wpscan","Xanitizer Scan","Xeol Parser","Xygeni SAST Scan","Xygeni SCA Scan","Xygeni Secrets Scan","Yarn Audit Scan","ZAP Scan","Zora Parser"],"type":"string","description":"* `Acunetix Scan` - Acunetix Scanner\n* `Alert Logic Scan` - Alert Logic Scan\n* `Anchore Engine Scan` - Anchore Engine Scan\n* `Anchore Enterprise Policy Check` - Anchore Enterprise Policy Check\n* `Anchore Grype` - Anchore Grype\n* `Anchore Grype detailed` - Anchore Grype detailed\n* `AnchoreCTL Policies Report` - AnchoreCTL Policies Report\n* `AnchoreCTL Vuln Report` - AnchoreCTL Vuln Report\n* `AppCheck Web Application Scanner` - AppCheck Web Application Scanner\n* `AppSpider Scan` - AppSpider Scan\n* `Aqua Scan` - Aqua Scan\n* `Arachni Scan` - Arachni Scan\n* `AuditJS Scan` - AuditJS Scan\n* `AWS Inspector2 Scan` - AWS Inspector2 Scan\n* `AWS Prowler Scan` - AWS Prowler Scan\n* `AWS Prowler V3` - AWS Prowler V3\n* `AWS Security Finding Format (ASFF) Scan` - AWS Security Finding Format (ASFF)\n* `AWS Security Hub Scan` - AWS Security Hub Scan\n* `Azure Security Center Recommendations Scan` - Azure Security Center Recommendations Scan\n* `Bandit Scan` - Bandit Scan\n* `Bearer CLI` - Bearer CLI\n* `BlackDuck API` - BlackDuck API\n* `Blackduck Binary Analysis` - Blackduck Binary Analysis\n* `Blackduck Component Risk` - Blackduck Component Risk\n* `Blackduck Hub Scan` - Blackduck Hub Scan\n* `Brakeman Scan` - Brakeman Scan\n* `Bugcrowd API Import` - Bugcrowd API Import\n* `BugCrowd Scan` - BugCrowd Scan\n* `Bundler-Audit Scan` - Bundler-Audit Scan\n* `Burp Dastardly Scan` - Burp Dastardly Scan\n* `Burp Enterprise Scan` - Burp Enterprise Scan (RENAMED to Burp Suite DAST Scan)\n* `Burp REST API` - Burp REST API\n* `Burp Scan` - Burp Scan\n* `Burp GraphQL API` - Burp Suite DAST GraphQL API\n* `Burp Suite DAST Scan` - Burp Suite DAST Scan\n* `CargoAudit Scan` - CargoAudit Scan\n* `Checkmarx CxFlow SAST` - Checkmarx CxFlow SAST\n* `Checkmarx One Scan` - Checkmarx One Scan\n* `Checkmarx OSA` - Checkmarx OSA\n* `Checkmarx Scan` - Checkmarx Scan\n* `Checkmarx Scan detailed` - Checkmarx Scan detailed\n* `Checkov Scan` - Checkov Scan\n* `Chef Inspect Log` - Chef Inspect Log\n* `Choctaw Hog Scan` - Choctaw Hog Scan\n* `Clair Scan` - Clair Scan\n* `Cloudflare Insights` - Cloudflare Insights\n* `Cloudsploit Scan` - Cloudsploit Scan\n* `Cobalt.io API Import` - Cobalt.io API Import\n* `Cobalt.io Scan` - Cobalt.io Scan\n* `Codechecker Report native` - Codechecker Report native\n* `Contrast Scan` - Contrast Scan\n* `Coverity API` - Coverity API\n* `Coverity Scan JSON Report` - Coverity Scan JSON Report\n* `Crashtest Security JSON File` - Crashtest Security JSON File\n* `Crashtest Security XML File` - Crashtest Security XML File\n* `CredScan Scan` - CredScan Scan\n* `Crunch42 Scan` - Crunch42 Scan\n* `Cyberwatch scan (Galeax)` - Cyberwatch scan (Galeax)\n* `CycloneDX Scan` - CycloneDX Scan\n* `Cycognito Scan` - Cycognito Scan\n* `DawnScanner Scan` - DawnScanner Scan\n* `Deepfence Threatmapper Report` - Deepfence Threatmapper Report\n* `Dependency Check Scan` - Dependency Check Scan\n* `Dependency Track Finding Packaging Format (FPF) Export` - Dependency Track Finding Packaging Format (FPF) Export\n* `Detect-secrets Scan` - Detect-secrets Scan\n* `docker-bench-security Scan` - docker-bench-security Scan\n* `Dockle Scan` - Dockle Scan\n* `DrHeader JSON Importer` - DrHeader JSON Importer\n* `DSOP Scan` - DSOP Scan\n* `Duroc Hog Scan` - Duroc Hog Scan\n* `Edgescan Scan` - Edgescan Scan\n* `ESLint Scan` - ESLint Scan\n* `Essex Hog Scan` - Essex Hog Scan\n* `Fortify Scan` - Fortify Scan\n* `Garak Scan` - Garak Scan\n* `Generic Findings Import` - Generic Findings Import\n* `Ggshield Scan` - Ggshield Scan\n* `Github SAST Scan` - Github SAST Scan\n* `Github Secrets Detection Report Scan` - Github Secrets Detection Report Scan\n* `Github Vulnerability Scan` - Github Vulnerability Scan\n* `GitLab API Fuzzing Report Scan` - GitLab API Fuzzing Report Scan\n* `GitLab Container Scan` - GitLab Container Scan Scan\n* `GitLab DAST Report` - GitLab DAST Report\n* `GitLab Dependency Scanning Report` - GitLab Dependency Scanning Report\n* `GitLab SAST Report` - GitLab SAST Report\n* `GitLab Secret Detection Report` - GitLab Secret Detection Report\n* `Gitleaks Scan` - Gitleaks Scan\n* `Google Cloud Artifact Vulnerability Scan` - Google Cloud Artifact Vulnerability Scan\n* `Gosec Scanner` - Gosec Scanner\n* `Gottingen Hog Scan` - Gottingen Hog Scan\n* `Govulncheck Scanner` - Govulncheck Scanner\n* `Govulncheck Scanner V2` - Govulncheck Scanner V2\n* `HackerOne Cases` - HackerOne Cases\n* `Hadolint Dockerfile check` - Hadolint Dockerfile check\n* `Harbor Vulnerability Scan` - Harbor Vulnerability Scan\n* `HCL AppScan on Cloud SAST XML` - HCL AppScan on Cloud SAST XML\n* `HCLAppScan XML` - HCLAppScan XML\n* `Horusec Scan` - Horusec Scan\n* `Humble Json Importer` - Humble Json Importer\n* `HuskyCI Report` - HuskyCI Report\n* `Hydra Scan` - Hydra Scan\n* `IBM AppScan DAST` - IBM AppScan DAST\n* `Immuniweb Scan` - Immuniweb Scan\n* `IntSights Report` - IntSights Report\n* `Invicti Scan` - Invicti Scan\n* `IriusRisk Threats Scan` - IriusRisk Threats Scan\n* `JFrog Xray API Summary Artifact Scan` - JFrog Xray API Summary Artifact Scan\n* `JFrog Xray On Demand Binary Scan` - JFrog Xray On Demand Binary Scan\n* `JFrog Xray Scan` - JFrog Xray Scan\n* `JFrog Xray Unified Scan` - JFrog Xray Unified Scan\n* `KICS Scan` - KICS Scan\n* `Kiuwan SCA Scan` - Kiuwan SCA Scan\n* `Kiuwan Scan` - Kiuwan Scan\n* `KrakenD Audit Scan` - KrakenD Audit Scan\n* `kube-bench Scan` - kube-bench Scan\n* `Kubeaudit Scan` - Kubeaudit Scan\n* `KubeHunter Scan` - KubeHunter Scan\n* `Kubescape JSON Importer` - Kubescape JSON Importer\n* `Legitify Scan` - Legitify Scan\n* `Mayhem SARIF Report` - Mayhem SARIF Report\n* `Mend Scan` - Mend Scan\n* `Meterian Scan` - Meterian Scan\n* `Microfocus Webinspect Scan` - Microfocus Webinspect Scan\n* `MobSF Scan` - MobSF Scan\n* `Mobsfscan Scan` - MobSF Scan\n* `MobSF Scorecard Scan` - MobSF Scorecard Scan\n* `Mozilla Observatory Scan` - Mozilla Observatory Scan\n* `MSDefender Parser` - MSDefender Parser\n* `n0s1 Scanner` - n0s1 Scanner\n* `Nancy Scan` - Nancy Scan\n* `Netsparker Scan` - Netsparker Scan\n* `NeuVector (compliance)` - NeuVector (compliance)\n* `NeuVector (REST)` - NeuVector (REST)\n* `Nexpose Scan` - Nexpose Scan\n* `Nikto Scan` - Nikto Scan\n* `Nmap Scan` - Nmap Scan\n* `Node Security Platform Scan` - Node Security Platform Scan\n* `Nosey Parker Scan` - Nosey Parker Scan\n* `NPM Audit Scan` - NPM Audit Scan\n* `NPM Audit v7+ Scan` - NPM Audit v7+ Scan\n* `Nuclei Scan` - Nuclei Scan\n* `OpenReports` - OpenReports\n* `Openscap Vulnerability Scan` - Openscap Vulnerability Scan\n* `OpenVAS Parser` - OpenVAS Parser\n* `OpenVAS Parser v2` - OpenVAS Parser v2\n* `Orca Security Alerts` - Orca Security Alerts\n* `ORT evaluated model Importer` - ORT evaluated model Importer\n* `OssIndex Devaudit SCA Scan Importer` - OssIndex Devaudit SCA Scan Importer\n* `OSV Scan` - OSV Scan\n* `Outpost24 Scan` - Outpost24 Scan\n* `PHP Security Audit v2` - PHP Security Audit v2\n* `PHP Symfony Security Check` - PHP Symfony Security Check\n* `PICUS Scan` - PICUS Scan\n* `PingCastle` - PingCastle\n* `pip-audit Scan` - pip-audit Scan\n* `PMD Scan` - PMD Scan\n* `Popeye Scan` - Popeye Scan\n* `Progpilot Scan` - Progpilot Scan\n* `Prowler Scan` - Prowler Scan\n* `PTART Report` - PTART Report\n* `PWN SAST` - PWN SAST\n* `Qualys Hacker Guardian Scan` - Qualys Hacker Guardian Scan\n* `Qualys Infrastructure Scan (WebGUI XML)` - Qualys Infrastructure Scan (WebGUI XML)\n* `Qualys Scan` - Qualys Scan\n* `Qualys VMDR` - Qualys VMDR\n* `Qualys Webapp Scan` - Qualys Webapp Scan\n* `Rapplex Scan` - Rapplex Scan\n* `Red Hat Satellite` - Red Hat Satellite\n* `Retire.js Scan` - Retire.js Scan\n* `ReversingLabs Spectra Assure` - ReversingLabs Spectra Assure\n* `Risk Recon API Importer` - Risk Recon API Importer\n* `Rubocop Scan` - Rubocop Scan\n* `Rusty Hog Scan` - Rusty Hog Scan\n* `SARIF` - SARIF\n* `Scantist Scan` - Scantist Scan\n* `Scout Suite Scan` - Scout Suite Scan\n* `Semgrep JSON Report` - Semgrep JSON Report\n* `Semgrep Pro JSON Report` - Semgrep Pro JSON Report\n* `SKF Scan` - SKF Scan\n* `Snyk Code Scan` - Snyk Code Scan\n* `Snyk Issue API Scan` - Snyk Issue API Scan\n* `Snyk Scan` - Snyk Scan\n* `Solar Appscreener Scan` - Solar Appscreener Scan Detailed_Results.csv\n* `SonarQube API Import` - SonarQube API Import\n* `SonarQube Scan` - SonarQube Scan\n* `SonarQube Scan detailed` - SonarQube Scan detailed\n* `Sonatype Application Scan` - Sonatype Application Scan\n* `SpotBugs Scan` - SpotBugs Scan\n* `SSH Audit Importer` - SSH Audit Importer\n* `SSL Labs Scan` - SSL Labs Scan\n* `Sslscan` - Sslscan\n* `Sslyze Scan` - Sslyze Scan\n* `SSLyze Scan (JSON)` - SSLyze Scan (JSON)\n* `StackHawk HawkScan` - StackHawk HawkScan\n* `Sysdig CLI Report` - Sysdig CLI Report Scan\n* `Sysdig Vulnerability Report` - Sysdig Vulnerability Report Scan\n* `Talisman Scan` - Talisman Scan\n* `Tenable Scan` - Tenable Scan\n* `Terrascan Scan` - Terrascan Scan\n* `Testssl Scan` - Testssl Scan\n* `TFSec Scan` - TFSec Scan\n* `Threagile risks report` - Threagile risks report\n* `ThreatComposer Scan` - ThreatComposer Scan\n* `Trivy Operator Scan` - Trivy Operator Scan\n* `Trivy Scan` - Trivy Scan\n* `Trufflehog Scan` - Trufflehog Scan\n* `Trufflehog3 Scan` - Trufflehog3 Scan\n* `Trustwave Fusion API Scan` - Trustwave Fusion API Scan\n* `Trustwave Scan (CSV)` - Trustwave Scan (CSV)\n* `Twistlock Image Scan` - Twistlock Image Scan\n* `VCG Scan` - VCG Scan\n* `Veracode Scan` - Veracode Scan\n* `Veracode SourceClear Scan` - Veracode SourceClear Scan\n* `Vulners` - Vulners\n* `Wapiti Scan` - Wapiti Scan\n* `Wazuh` - Wazuh\n* `WFuzz JSON report` - WFuzz JSON report\n* `Whispers Scan` - Whispers Scan\n* `WhiteHat Sentinel` - WhiteHat Sentinel\n* `Wiz Scan` - Wiz Scan\n* `Wizcli Dir Scan` - Wizcli Dir Scan\n* `Wizcli IaC Scan` - Wizcli IaC Scan\n* `Wizcli Img Scan` - Wizcli Img Scan\n* `Wpscan` - Wpscan\n* `Xanitizer Scan` - Xanitizer Scan\n* `Xeol Parser` - Xeol Parser\n* `Xygeni SAST Scan` - Xygeni SAST Scan\n* `Xygeni SCA Scan` - Xygeni SCA Scan\n* `Xygeni Secrets Scan` - Xygeni Secrets Scan\n* `Yarn Audit Scan` - Yarn Audit Scan\n* `ZAP Scan` - ZAP Scan\n* `Zora Parser` - Zora Parser","x-spec-enum-id":"467435d774cf7d2d"},"test":{"type":"integer"},"close_old_findings":{"type":"boolean","default":true,"description":"Old findings no longer present in the new report get closed as mitigated when importing. If service has been set, only the findings for this service will be closed; if no service is set, only findings without a service will be closed. This only affects findings within the same test."},"close_old_findings_product_scope":{"type":"boolean","default":false,"description":"This has no effect on reimport"},"version":{"type":"string","minLength":1,"description":"Version that will be set on existing Test object. Leave empty to leave existing value in place."},"tags":{"type":"array","items":{"type":"string","minLength":1},"description":"Modify existing tags that help describe this scan. (Existing test tags will be overwritten)"},"background_import":{"type":"boolean","nullable":true,"description":"Selecting to import in the background will modify the import process to first parse the file for any errors, return the response, and then create findings in the background"},"push_to_integrator":{"type":"boolean","default":false,"description":"Dictates whether this object will be dispatched to the associated integrator, and override the configured setting that decides if the object should be pushed or not."}},"required":["scan_type"]},"AuditLog":{"type":"object","description":"Serializer for pghistory audit log entries.\n\nSerializes normalized dicts from normalize_pghistory_event.","properties":{"id":{"type":"integer"},"model_name":{"type":"string"},"object_id":{"type":"integer"},"object_name":{"type":"string"},"action":{"type":"string"},"changes":{"type":"object","additionalProperties":{}},"user":{"type":"object","additionalProperties":{},"nullable":true},"timestamp":{"type":"string","format":"date-time"},"url":{"type":"string","nullable":true},"remote_addr":{"type":"string","nullable":true},"object_data":{"type":"object","additionalProperties":{},"nullable":true},"context":{"type":"object","additionalProperties":{},"nullable":true}},"required":["action","changes","id","model_name","object_id","object_name","timestamp"]},"BenchmarkCategory":{"type":"object","description":"Base serializer for all models.","properties":{"id":{"type":"integer","readOnly":true},"name":{"type":"string","maxLength":300},"objective":{"type":"string"},"references":{"type":"string","nullable":true},"enabled":{"type":"boolean"},"created":{"type":"string","format":"date-time","readOnly":true},"updated":{"type":"string","format":"date-time","readOnly":true},"type":{"type":"integer","title":"Benchmark Type"},"prefetch":{"type":"object","properties":{}}},"required":["created","id","name","objective","type","updated"]},"BenchmarkCategoryRequest":{"type":"object","description":"Base serializer for all models.","properties":{"name":{"type":"string","minLength":1,"maxLength":300},"objective":{"type":"string","minLength":1},"references":{"type":"string","nullable":true},"enabled":{"type":"boolean"},"type":{"type":"integer","title":"Benchmark Type"}},"required":["name","objective","type"]},"BenchmarkProduct":{"type":"object","description":"Base serializer for all models.","properties":{"id":{"type":"integer","readOnly":true},"pass_fail":{"type":"boolean","title":"Pass","description":"Does the product meet the requirement?"},"enabled":{"type":"boolean","description":"Applicable for this specific product."},"created":{"type":"string","format":"date-time","readOnly":true},"updated":{"type":"string","format":"date-time","readOnly":true},"product":{"type":"integer"},"control":{"type":"integer"},"notes":{"type":"array","items":{"type":"integer"},"readOnly":true},"prefetch":{"type":"object","properties":{"notes":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/Note"}},"product":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/Product"}}}}},"required":["control","created","id","notes","product","updated"]},"BenchmarkProductRequest":{"type":"object","description":"Base serializer for all models.","properties":{"pass_fail":{"type":"boolean","title":"Pass","description":"Does the product meet the requirement?"},"enabled":{"type":"boolean","description":"Applicable for this specific product."},"product":{"type":"integer"},"control":{"type":"integer"}},"required":["control","product"]},"BenchmarkProductSummary":{"type":"object","description":"Base serializer for all models.","properties":{"id":{"type":"integer","readOnly":true},"desired_level":{"enum":["Level 1","Level 2","Level 3"],"type":"string","description":"* `Level 1` - Level 1\n* `Level 2` - Level 2\n* `Level 3` - Level 3","x-spec-enum-id":"51d382524500f67b"},"current_level":{"enum":["Level 1","Level 2","Level 3","",null],"type":"string","description":"* `Level 1` - Level 1\n* `Level 2` - Level 2\n* `Level 3` - Level 3","x-spec-enum-id":"51d382524500f67b","nullable":true},"asvs_level_1_benchmark":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"description":"Total number of active benchmarks for this application."},"asvs_level_1_score":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"description":"ASVS Level 1 Score"},"asvs_level_2_benchmark":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"description":"Total number of active benchmarks for this application."},"asvs_level_2_score":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"description":"ASVS Level 2 Score"},"asvs_level_3_benchmark":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"description":"Total number of active benchmarks for this application."},"asvs_level_3_score":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"description":"ASVS Level 3 Score"},"publish":{"type":"boolean","description":"Publish score to Product."},"created":{"type":"string","format":"date-time","readOnly":true},"updated":{"type":"string","format":"date-time","readOnly":true},"product":{"type":"integer"},"benchmark_type":{"type":"integer"},"prefetch":{"type":"object","properties":{"product":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/Product"}}}}},"required":["benchmark_type","created","id","product","updated"]},"BenchmarkProductSummaryRequest":{"type":"object","description":"Base serializer for all models.","properties":{"desired_level":{"enum":["Level 1","Level 2","Level 3"],"type":"string","description":"* `Level 1` - Level 1\n* `Level 2` - Level 2\n* `Level 3` - Level 3","x-spec-enum-id":"51d382524500f67b"},"current_level":{"enum":["Level 1","Level 2","Level 3","",null],"type":"string","description":"* `Level 1` - Level 1\n* `Level 2` - Level 2\n* `Level 3` - Level 3","x-spec-enum-id":"51d382524500f67b","nullable":true},"asvs_level_1_benchmark":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"description":"Total number of active benchmarks for this application."},"asvs_level_1_score":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"description":"ASVS Level 1 Score"},"asvs_level_2_benchmark":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"description":"Total number of active benchmarks for this application."},"asvs_level_2_score":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"description":"ASVS Level 2 Score"},"asvs_level_3_benchmark":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"description":"Total number of active benchmarks for this application."},"asvs_level_3_score":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"description":"ASVS Level 3 Score"},"publish":{"type":"boolean","description":"Publish score to Product."},"product":{"type":"integer"},"benchmark_type":{"type":"integer"}},"required":["benchmark_type","product"]},"BenchmarkRequirement":{"type":"object","description":"Base serializer for all models.","properties":{"id":{"type":"integer","readOnly":true},"objective_number":{"type":"string","nullable":true,"maxLength":15},"objective":{"type":"string"},"references":{"type":"string","nullable":true},"level_1":{"type":"boolean"},"level_2":{"type":"boolean"},"level_3":{"type":"boolean"},"enabled":{"type":"boolean"},"created":{"type":"string","format":"date-time","readOnly":true},"updated":{"type":"string","format":"date-time","readOnly":true},"category":{"type":"integer"},"prefetch":{"type":"object","properties":{}}},"required":["category","created","id","objective","updated"]},"BenchmarkRequirementRequest":{"type":"object","description":"Base serializer for all models.","properties":{"objective_number":{"type":"string","nullable":true,"maxLength":15},"objective":{"type":"string","minLength":1},"references":{"type":"string","nullable":true},"level_1":{"type":"boolean"},"level_2":{"type":"boolean"},"level_3":{"type":"boolean"},"enabled":{"type":"boolean"},"category":{"type":"integer"}},"required":["category","objective"]},"BenchmarkType":{"type":"object","description":"Base serializer for all models.","properties":{"id":{"type":"integer","readOnly":true},"name":{"type":"string","maxLength":300},"version":{"type":"string","maxLength":15},"benchmark_source":{"enum":["PCI","OWASP ASVS","OWASP Mobile ASVS",null],"type":"string","description":"* `PCI` - PCI\n* `OWASP ASVS` - OWASP ASVS\n* `OWASP Mobile ASVS` - OWASP Mobile ASVS","x-spec-enum-id":"091a6ccd03b2ee84","nullable":true},"created":{"type":"string","format":"date-time","readOnly":true},"updated":{"type":"string","format":"date-time","readOnly":true},"enabled":{"type":"boolean"}},"required":["created","id","name","updated","version"]},"BenchmarkTypeRequest":{"type":"object","description":"Base serializer for all models.","properties":{"name":{"type":"string","minLength":1,"maxLength":300},"version":{"type":"string","minLength":1,"maxLength":15},"benchmark_source":{"enum":["PCI","OWASP ASVS","OWASP Mobile ASVS",null],"type":"string","description":"* `PCI` - PCI\n* `OWASP ASVS` - OWASP ASVS\n* `OWASP Mobile ASVS` - OWASP Mobile ASVS","x-spec-enum-id":"091a6ccd03b2ee84","nullable":true},"enabled":{"type":"boolean"}},"required":["name","version"]},"BurpRawRequestResponse":{"type":"object","properties":{"req_resp":{"type":"array","items":{"type":"object","additionalProperties":{"type":"string"}}}},"required":["req_resp"]},"BurpRawRequestResponseMulti":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"burpRequestBase64":{"type":"string"},"burpResponseBase64":{"type":"string"},"finding":{"type":"integer","nullable":true}},"required":["burpRequestBase64","burpResponseBase64","id"]},"BurpRawRequestResponseMultiRequest":{"type":"object","properties":{"burpRequestBase64":{"type":"string","minLength":1},"burpResponseBase64":{"type":"string","minLength":1},"finding":{"type":"integer","nullable":true}},"required":["burpRequestBase64","burpResponseBase64"]},"BurpRawRequestResponseRequest":{"type":"object","properties":{"req_resp":{"type":"array","items":{"type":"object","additionalProperties":{"type":"string","minLength":1}}}},"required":["req_resp"]},"CeleryQueueTaskDetail":{"type":"object","properties":{"task_name":{"type":"string","readOnly":true},"count":{"type":"integer","readOnly":true},"oldest_position":{"type":"integer","readOnly":true},"newest_position":{"type":"integer","readOnly":true},"oldest_eta":{"type":"string","readOnly":true,"nullable":true},"newest_eta":{"type":"string","readOnly":true,"nullable":true},"earliest_expires":{"type":"string","readOnly":true,"nullable":true},"latest_expires":{"type":"string","readOnly":true,"nullable":true}},"required":["count","earliest_expires","latest_expires","newest_eta","newest_position","oldest_eta","oldest_position","task_name"]},"CeleryStatus":{"type":"object","properties":{"worker_status":{"type":"boolean","readOnly":true},"broker_status":{"type":"boolean","readOnly":true},"queue_length":{"type":"integer","readOnly":true,"nullable":true},"task_time_limit":{"type":"integer","readOnly":true,"nullable":true},"task_soft_time_limit":{"type":"integer","readOnly":true,"nullable":true},"task_default_expires":{"type":"integer","readOnly":true,"nullable":true}},"required":["broker_status","queue_length","task_default_expires","task_soft_time_limit","task_time_limit","worker_status"]},"DashboardConfiguration":{"type":"object","properties":{"user":{"type":"array","items":{"type":"integer","title":"Configuration Owner"},"title":"Configuration Owner"},"tiles":{"type":"array","items":{"$ref":"#/components/schemas/DashboardTile"},"readOnly":true},"graphs":{"type":"boolean","title":"Show Graphs"},"tables":{"type":"boolean","title":"Show Tables"},"questionnaires":{"type":"boolean","title":"Show Questionaires"},"prefetch":{"type":"object","properties":{"user":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}}}}},"required":["tiles","user"]},"DashboardConfigurationRequest":{"type":"object","properties":{"user":{"type":"array","items":{"type":"integer","title":"Configuration Owner"},"title":"Configuration Owner"},"graphs":{"type":"boolean","title":"Show Graphs"},"tables":{"type":"boolean","title":"Show Tables"},"questionnaires":{"type":"boolean","title":"Show Questionaires"}},"required":["user"]},"DashboardLayout":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"name":{"type":"string","maxLength":100},"is_shared":{"type":"boolean","title":"Shared","description":"If true, this layout is published as a template available to every user."},"is_starter":{"type":"boolean","readOnly":true,"title":"Starter","description":"Marks the system-seeded \"Default Dashboard\" template used for new users."},"is_default":{"type":"boolean","readOnly":true},"is_owned":{"type":"boolean","readOnly":true},"is_catalog":{"type":"boolean","description":"True iff the layout is a curated catalog entry.\n\nThe frontend uses this to distinguish curated showcase / starter\ntemplates from layouts another user happened to publish as\nshared. Both surfaces appear under the same \"shared\" endpoint;\nthe Add Existing Widget picker only sources from catalog\nentries so a user-published team layout's widgets don't pollute\nthe curated gallery.\n\nWe cannot use ``user IS NULL`` as the discriminator — the create\npath (``DashboardLayoutViewSet.perform_create``) explicitly nulls\nthe owner whenever ``is_shared=True`` so the shared-name unique\nconstraint isn't tied to a particular author. That means *any*\nshared layout posted via the API also ends up with ``user=None``,\nnot just the migration-seeded catalog rows.\n\nInstead we lean on the catalog registry as the source of truth.\nThe catalog's display names are the canonical identifiers; the\nunique-on-(name) constraint scoped to ``is_shared=True`` ensures\na coincidental collision (user publishes \"Default Dashboard\"\nthemselves) is impossible at the DB level.","readOnly":true},"description":{"type":"string","readOnly":true},"category":{"type":"string","readOnly":true},"icon":{"type":"string","readOnly":true},"layout":{"description":"Map of widget id -> grid position {x, y, w, h, min_w, min_h}."},"widgets":{"description":"Ordered list of widget configurations (type, title, refresh_interval, config)."},"settings":{"description":"Layout-level options such as grid density and column count."},"cloned_from":{"type":"integer","readOnly":true,"nullable":true,"description":"Reference to the layout this one was cloned from, if any."},"created_at":{"type":"string","format":"date-time","readOnly":true,"title":"Created Timestamp","description":"The time that the record was created."},"updated_at":{"type":"string","format":"date-time","readOnly":true,"title":"Updated Timestamp","description":"The last time the record was updated."}},"required":["category","cloned_from","created_at","description","icon","id","is_catalog","is_default","is_owned","is_starter","name","updated_at"]},"DashboardLayoutCloneRequestRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Name for the clone. Defaults to \"Copy of <source name>\"."}}},"DashboardLayoutRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"is_shared":{"type":"boolean","title":"Shared","description":"If true, this layout is published as a template available to every user."},"layout":{"description":"Map of widget id -> grid position {x, y, w, h, min_w, min_h}."},"widgets":{"description":"Ordered list of widget configurations (type, title, refresh_interval, config)."},"settings":{"description":"Layout-level options such as grid density and column count."}},"required":["name"]},"DashboardLayoutsForCurrentUserResponse":{"type":"object","properties":{"results":{"type":"array","items":{"$ref":"#/components/schemas/DashboardLayout"}},"default_id":{"type":"integer","nullable":true,"description":"Layout id the UI should render by default. Null if the caller has no owned layouts."}},"required":["default_id","results"]},"DashboardTile":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"model":{"enum":["product","engagement","test","finding","endpoint","sla","scan-time","prod-grade",""],"type":"string","x-spec-enum-id":"a6e596d1d03709b5","title":"Tile Type","description":"The type of data to display within this tile.\n\n* `product` - Product\n* `engagement` - Engagement\n* `test` - Test\n* `finding` - Finding\n* `endpoint` - Endpoint\n* `sla` - SLA Violation\n* `scan-time` - Scan Time Violation\n* `prod-grade` - Product Grade"},"filters":{"nullable":true,"title":"Tile Filters","description":"The filters to obtain the data count for this tile."},"icon":{"enum":["align-left","box-archive","bars","ban","bolt","bug","bullseye","calendar-days","certificate","check","code","gear","clock","download","circle-exclamation","file","filter","fire-extinguisher","flag","house","circle-info","lock","circle-question","magnifying-glass","list-check","lock-open","user",""],"type":"string","x-spec-enum-id":"c3556497146d88cf","title":"Tile Icon","description":"The icon to display within this tile.\n\n* `align-left` - Align Left\n* `box-archive` - Archive\n* `bars` - Bars\n* `ban` - Ban\n* `bolt` - Bolt\n* `bug` - Bug\n* `bullseye` - Bullseye\n* `calendar-days` - Calendar\n* `certificate` - Certificate\n* `check` - Check\n* `code` - Code\n* `gear` - Cog\n* `clock` - Clock\n* `download` - Download\n* `circle-exclamation` - Exclamation\n* `file` - File\n* `filter` - Filter\n* `fire-extinguisher` - Fire Extinguisher\n* `flag` - Flag\n* `house` - Home\n* `circle-info` - Info\n* `lock` - Lock\n* `circle-question` - Question\n* `magnifying-glass` - Search\n* `list-check` - Tasks\n* `lock-open` - Unlock\n* `user` - User"},"header":{"type":"string","title":"Tile Header","description":"The header text to display under the count of this tile.","maxLength":64},"footer":{"type":"string","title":"Tile Footer","description":"The footer text to display in the button of this tile.","maxLength":64},"color":{"enum":["red","orange","yellow","green","teal","cyan","blue","indigo","purple","pink","dark","light",""],"type":"string","x-spec-enum-id":"9c9a36b0f59676ad","title":"Tile Color","description":"The color of this tile (if dynamic tile is enabled, selected color will be ignored).\n\n* `red` - Red\n* `orange` - Orange\n* `yellow` - Yellow\n* `green` - Green\n* `teal` - Teal\n* `cyan` - Cyan\n* `blue` - Blue\n* `indigo` - Indigo\n* `purple` - Purple\n* `pink` - Pink\n* `dark` - Dark\n* `light` - Light"},"dynamic":{"type":"boolean","title":"Dynamic Color Tile","description":"When selected, the color of this tile will dynamically change based on the minimum and maximum threshold."},"minimum":{"type":"integer","maximum":2147483647,"minimum":0,"nullable":true,"title":"Dynamic Color Minimum","description":"The minimum acceptable threshold for this tile's count (i.e. green in color)."},"maximum":{"type":"integer","maximum":2147483647,"minimum":0,"nullable":true,"title":"Dynamic Color Maximum","description":"The maximum acceptable threshold for this tile's count (i.e. red in color)."}},"required":["id"]},"DashboardTileRequest":{"type":"object","properties":{"model":{"enum":["product","engagement","test","finding","endpoint","sla","scan-time","prod-grade",""],"type":"string","x-spec-enum-id":"a6e596d1d03709b5","title":"Tile Type","description":"The type of data to display within this tile.\n\n* `product` - Product\n* `engagement` - Engagement\n* `test` - Test\n* `finding` - Finding\n* `endpoint` - Endpoint\n* `sla` - SLA Violation\n* `scan-time` - Scan Time Violation\n* `prod-grade` - Product Grade"},"filters":{"nullable":true,"title":"Tile Filters","description":"The filters to obtain the data count for this tile."},"icon":{"enum":["align-left","box-archive","bars","ban","bolt","bug","bullseye","calendar-days","certificate","check","code","gear","clock","download","circle-exclamation","file","filter","fire-extinguisher","flag","house","circle-info","lock","circle-question","magnifying-glass","list-check","lock-open","user",""],"type":"string","x-spec-enum-id":"c3556497146d88cf","title":"Tile Icon","description":"The icon to display within this tile.\n\n* `align-left` - Align Left\n* `box-archive` - Archive\n* `bars` - Bars\n* `ban` - Ban\n* `bolt` - Bolt\n* `bug` - Bug\n* `bullseye` - Bullseye\n* `calendar-days` - Calendar\n* `certificate` - Certificate\n* `check` - Check\n* `code` - Code\n* `gear` - Cog\n* `clock` - Clock\n* `download` - Download\n* `circle-exclamation` - Exclamation\n* `file` - File\n* `filter` - Filter\n* `fire-extinguisher` - Fire Extinguisher\n* `flag` - Flag\n* `house` - Home\n* `circle-info` - Info\n* `lock` - Lock\n* `circle-question` - Question\n* `magnifying-glass` - Search\n* `list-check` - Tasks\n* `lock-open` - Unlock\n* `user` - User"},"header":{"type":"string","title":"Tile Header","description":"The header text to display under the count of this tile.","maxLength":64},"footer":{"type":"string","title":"Tile Footer","description":"The footer text to display in the button of this tile.","maxLength":64},"color":{"enum":["red","orange","yellow","green","teal","cyan","blue","indigo","purple","pink","dark","light",""],"type":"string","x-spec-enum-id":"9c9a36b0f59676ad","title":"Tile Color","description":"The color of this tile (if dynamic tile is enabled, selected color will be ignored).\n\n* `red` - Red\n* `orange` - Orange\n* `yellow` - Yellow\n* `green` - Green\n* `teal` - Teal\n* `cyan` - Cyan\n* `blue` - Blue\n* `indigo` - Indigo\n* `purple` - Purple\n* `pink` - Pink\n* `dark` - Dark\n* `light` - Light"},"dynamic":{"type":"boolean","title":"Dynamic Color Tile","description":"When selected, the color of this tile will dynamically change based on the minimum and maximum threshold."},"minimum":{"type":"integer","maximum":2147483647,"minimum":0,"nullable":true,"title":"Dynamic Color Minimum","description":"The minimum acceptable threshold for this tile's count (i.e. green in color)."},"maximum":{"type":"integer","maximum":2147483647,"minimum":0,"nullable":true,"title":"Dynamic Color Maximum","description":"The maximum acceptable threshold for this tile's count (i.e. red in color)."}}},"DeletePreview":{"type":"object","properties":{"model":{"type":"string","readOnly":true},"id":{"type":"integer","readOnly":true,"nullable":true},"name":{"type":"string","readOnly":true}},"required":["id","model","name"]},"DeltaStatistics":{"type":"object","properties":{"created":{"$ref":"#/components/schemas/SeverityStatusStatistics"},"closed":{"$ref":"#/components/schemas/SeverityStatusStatistics"},"reactivated":{"$ref":"#/components/schemas/SeverityStatusStatistics"},"untouched":{"$ref":"#/components/schemas/SeverityStatusStatistics"}},"required":["closed","created","reactivated","untouched"]},"DeltaStatisticsRequest":{"type":"object","properties":{"created":{"$ref":"#/components/schemas/SeverityStatusStatisticsRequest"},"closed":{"$ref":"#/components/schemas/SeverityStatusStatisticsRequest"},"reactivated":{"$ref":"#/components/schemas/SeverityStatusStatisticsRequest"},"untouched":{"$ref":"#/components/schemas/SeverityStatusStatisticsRequest"}},"required":["closed","created","reactivated","untouched"]},"Dependency":{"type":"object","description":"Serializer for the Dependency model with primary keys for related objects.","properties":{"id":{"type":"integer","readOnly":true},"string":{"type":"string","readOnly":true},"type":{"type":"string","readOnly":true},"tags":{"type":"array","items":{"type":"string"}},"purl_type":{"type":"string","description":"The package type/ecosystem (e.g., maven, npm, pypi, golang).","maxLength":64},"namespace":{"type":"string","description":"The type-specific package namespace (e.g., groupId for Maven, scope for npm).","maxLength":256},"name":{"type":"string","description":"The name of the package.","maxLength":256},"version":{"type":"string","description":"The version of the package.","maxLength":128},"qualifiers":{"type":"string","description":"Package URL qualifiers (e.g., 'arch=x86_64&distro=ubuntu-22.04').","maxLength":1024},"subpath":{"type":"string","description":"A subpath within the package.","maxLength":512},"purl_validation_failure":{"type":"boolean","description":"Dictates whether the dependency was found to have Package URL validation issues during creation"},"artifact_hashes":{"description":"Mapping of hash algorithms to hash values for this dependency"}},"required":["id","string","type"]},"DependencyRequest":{"type":"object","description":"Serializer for the Dependency model with primary keys for related objects.","properties":{"tags":{"type":"array","items":{"type":"string","minLength":1}},"purl_type":{"type":"string","minLength":1,"description":"The package type/ecosystem (e.g., maven, npm, pypi, golang).","maxLength":64},"namespace":{"type":"string","description":"The type-specific package namespace (e.g., groupId for Maven, scope for npm).","maxLength":256},"name":{"type":"string","description":"The name of the package.","maxLength":256},"version":{"type":"string","description":"The version of the package.","maxLength":128},"qualifiers":{"type":"string","description":"Package URL qualifiers (e.g., 'arch=x86_64&distro=ubuntu-22.04').","maxLength":1024},"subpath":{"type":"string","description":"A subpath within the package.","maxLength":512},"purl_validation_failure":{"type":"boolean","description":"Dictates whether the dependency was found to have Package URL validation issues during creation"},"artifact_hashes":{"description":"Mapping of hash algorithms to hash values for this dependency"}}},"DevelopmentEnvironment":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"name":{"type":"string","maxLength":200}},"required":["id","name"]},"DevelopmentEnvironmentRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200}},"required":["name"]},"DisregardUnassignedFinding":{"type":"object","properties":{"unassigned_findings":{"type":"array","items":{"type":"integer"}}},"required":["unassigned_findings"]},"DisregardUnassignedFindingRequest":{"type":"object","properties":{"unassigned_findings":{"type":"array","items":{"type":"integer"}}},"required":["unassigned_findings"]},"DojoGroup":{"type":"object","description":"Base serializer for all models.","properties":{"id":{"type":"integer","readOnly":true},"configuration_permissions":{"type":"array","items":{"type":"integer","nullable":true}},"email":{"type":"string","format":"email","nullable":true,"pattern":"^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$"},"name":{"type":"string","maxLength":255},"description":{"type":"string","nullable":true,"maxLength":4000},"social_provider":{"enum":["AzureAD","Remote","",null],"type":"string","x-spec-enum-id":"fe57c2b04188fb94","nullable":true,"title":"Social Authentication Provider","description":"Group imported from a social provider.\n\n* `AzureAD` - AzureAD\n* `Remote` - Remote"},"users":{"type":"array","items":{"type":"integer"},"readOnly":true},"prefetch":{"type":"object","properties":{"users":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}}}}},"required":["id","name","users"]},"DojoGroupRequest":{"type":"object","description":"Base serializer for all models.","properties":{"configuration_permissions":{"type":"array","items":{"type":"integer","nullable":true}},"email":{"type":"string","format":"email","nullable":true,"pattern":"^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$"},"name":{"type":"string","minLength":1,"maxLength":255},"description":{"type":"string","nullable":true,"maxLength":4000},"social_provider":{"enum":["AzureAD","Remote","",null],"type":"string","x-spec-enum-id":"fe57c2b04188fb94","nullable":true,"title":"Social Authentication Provider","description":"Group imported from a social provider.\n\n* `AzureAD` - AzureAD\n* `Remote` - Remote"}},"required":["name"]},"Endpoint":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"active_finding_count":{"type":"integer","readOnly":true},"protocol":{"type":"string","nullable":true,"description":"The communication protocol/scheme such as 'http', 'ftp', 'dns', etc.","maxLength":20},"userinfo":{"type":"string","nullable":true,"description":"User info as 'alice', 'bob', etc.","maxLength":500},"host":{"type":"string","nullable":true,"description":"The host name or IP address. It must not include the port number. For example '127.0.0.1', 'localhost', 'yourdomain.com'.","maxLength":500},"port":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true,"description":"The network port associated with the endpoint."},"path":{"type":"string","nullable":true,"description":"The location of the resource, it must not start with a '/'. For example endpoint/420/edit","maxLength":500},"query":{"type":"string","nullable":true,"description":"The query string, the question mark should be omitted.For example 'group=4&team=8'","maxLength":1000},"fragment":{"type":"string","nullable":true,"description":"The fragment identifier which follows the hash mark. The hash mark should be omitted. For example 'section-13', 'paragraph-2'.","maxLength":500},"product":{"type":"integer","nullable":true},"endpoint_params":{"type":"array","items":{"type":"integer"},"readOnly":true},"findings":{"type":"array","items":{"type":"integer"},"readOnly":true},"tags":{"type":"array","items":{"type":"string"}}},"required":["active_finding_count","endpoint_params","findings","id"]},"EndpointMetaImporter":{"type":"object","properties":{"file":{"type":"string","format":"uri"},"create_endpoints":{"type":"boolean","default":true},"create_tags":{"type":"boolean","default":true},"create_dojo_meta":{"type":"boolean","default":false},"product_name":{"type":"string"},"product":{"type":"integer"},"product_id":{"type":"integer","readOnly":true}},"required":["file","product_id"]},"EndpointMetaImporterRequest":{"type":"object","properties":{"file":{"type":"string","format":"binary"},"create_endpoints":{"type":"boolean","default":true},"create_tags":{"type":"boolean","default":true},"create_dojo_meta":{"type":"boolean","default":false},"product_name":{"type":"string","minLength":1},"product":{"type":"integer"}},"required":["file"]},"EndpointStatus":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"date":{"type":"string","format":"date"},"last_modified":{"type":"string","format":"date-time","readOnly":true,"nullable":true},"mitigated":{"type":"boolean"},"mitigated_time":{"type":"string","format":"date-time","readOnly":true,"nullable":true},"false_positive":{"type":"boolean"},"out_of_scope":{"type":"boolean"},"risk_accepted":{"type":"boolean"},"mitigated_by":{"type":"integer","nullable":true},"endpoint":{"type":"integer"},"finding":{"type":"integer"}},"required":["endpoint","finding","id","last_modified","mitigated_time"]},"EndpointStatusRequest":{"type":"object","properties":{"date":{"type":"string","format":"date"},"mitigated":{"type":"boolean"},"false_positive":{"type":"boolean"},"out_of_scope":{"type":"boolean"},"risk_accepted":{"type":"boolean"},"mitigated_by":{"type":"integer","nullable":true},"endpoint":{"type":"integer"},"finding":{"type":"integer"}},"required":["endpoint","finding"]},"Engagement":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"created":{"type":"string","format":"date-time","readOnly":true,"nullable":true,"description":"Time that the object was initially created, and saved to the database"},"updated":{"type":"string","format":"date-time","readOnly":true,"nullable":true,"description":"Time that the object was most recently saved to the database"},"name":{"type":"string","nullable":true,"maxLength":300},"description":{"type":"string","nullable":true,"maxLength":2000},"version":{"type":"string","nullable":true,"description":"Version of the product the engagement tested.","maxLength":100},"first_contacted":{"type":"string","format":"date","nullable":true},"target_start":{"type":"string","format":"date"},"target_end":{"type":"string","format":"date"},"reason":{"type":"string","nullable":true,"maxLength":2000},"active":{"type":"boolean","readOnly":true},"tracker":{"type":"string","format":"uri","nullable":true,"description":"Link to epic or ticket system with changes to version.","maxLength":200},"test_strategy":{"type":"string","format":"uri","nullable":true,"maxLength":200},"threat_model":{"type":"boolean"},"api_test":{"type":"boolean"},"pen_test":{"type":"boolean"},"check_list":{"type":"boolean"},"status":{"enum":["Not Started","Blocked","Cancelled","Completed","In Progress","On Hold","Scheduled","Waiting for Resource",null],"type":"string","description":"* `Not Started` - Not Started\n* `Blocked` - Blocked\n* `Cancelled` - Cancelled\n* `Completed` - Completed\n* `In Progress` - In Progress\n* `On Hold` - On Hold\n* `Scheduled` - Scheduled\n* `Waiting for Resource` - Waiting for Resource","x-spec-enum-id":"ff79738e944f9d44","nullable":true},"progress":{"type":"string","readOnly":true},"tmodel_path":{"type":"string","readOnly":true,"nullable":true},"done_testing":{"type":"boolean","readOnly":true},"engagement_type":{"enum":["Interactive","CI/CD",null],"type":"string","description":"* `Interactive` - Interactive\n* `CI/CD` - CI/CD","x-spec-enum-id":"531df25eeddb1f62","nullable":true},"build_id":{"type":"string","nullable":true,"description":"Build ID of the product the engagement tested.","maxLength":150},"commit_hash":{"type":"string","nullable":true,"description":"Commit hash from repo","maxLength":150},"branch_tag":{"type":"string","nullable":true,"title":"Branch/Tag","description":"Tag or branch of the product the engagement tested.","maxLength":150},"source_code_management_uri":{"type":"string","format":"uri","nullable":true,"title":"Repo","description":"Resource link to source code","maxLength":600},"deduplication_on_engagement":{"type":"boolean","title":"Deduplication within this engagement only","description":"If enabled deduplication will only mark a finding in this engagement as duplicate of another finding if both findings are in this engagement. If disabled, deduplication is on the product level."},"lead":{"type":"integer","nullable":true},"requester":{"type":"integer","nullable":true},"preset":{"type":"integer","nullable":true,"description":"Settings and notes for performing this engagement."},"report_type":{"type":"integer","nullable":true},"product":{"type":"integer"},"build_server":{"type":"integer","nullable":true,"description":"Build server responsible for CI/CD test"},"source_code_management_server":{"type":"integer","nullable":true,"title":"SCM Server","description":"Source code server for CI/CD test"},"orchestration_engine":{"type":"integer","nullable":true,"description":"Orchestration service responsible for CI/CD test"},"notes":{"type":"array","items":{"$ref":"#/components/schemas/Note"},"readOnly":true},"files":{"type":"array","items":{"$ref":"#/components/schemas/File"},"readOnly":true},"risk_acceptance":{"type":"array","items":{"type":"integer"},"readOnly":true},"tags":{"type":"array","items":{"type":"string"}}},"required":["active","created","done_testing","files","id","notes","product","progress","risk_acceptance","target_end","target_start","tmodel_path","updated"]},"EngagementCheckList":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"session_management":{"type":"string","maxLength":50},"encryption_crypto":{"type":"string","maxLength":50},"configuration_management":{"type":"string","maxLength":50},"authentication":{"type":"string","maxLength":50},"authorization_and_access_control":{"type":"string","maxLength":50},"data_input_sanitization_validation":{"type":"string","maxLength":50},"sensitive_data":{"type":"string","maxLength":50},"other":{"type":"string","maxLength":50},"engagement":{"type":"integer","readOnly":true},"session_issues":{"type":"array","items":{"type":"integer"}},"crypto_issues":{"type":"array","items":{"type":"integer"}},"config_issues":{"type":"array","items":{"type":"integer"}},"auth_issues":{"type":"array","items":{"type":"integer"}},"author_issues":{"type":"array","items":{"type":"integer"}},"data_issues":{"type":"array","items":{"type":"integer"}},"sensitive_issues":{"type":"array","items":{"type":"integer"}},"other_issues":{"type":"array","items":{"type":"integer"}}},"required":["engagement","id"]},"EngagementCheckListRequest":{"type":"object","properties":{"session_management":{"type":"string","minLength":1,"maxLength":50},"encryption_crypto":{"type":"string","minLength":1,"maxLength":50},"configuration_management":{"type":"string","minLength":1,"maxLength":50},"authentication":{"type":"string","minLength":1,"maxLength":50},"authorization_and_access_control":{"type":"string","minLength":1,"maxLength":50},"data_input_sanitization_validation":{"type":"string","minLength":1,"maxLength":50},"sensitive_data":{"type":"string","minLength":1,"maxLength":50},"other":{"type":"string","minLength":1,"maxLength":50},"session_issues":{"type":"array","items":{"type":"integer"}},"crypto_issues":{"type":"array","items":{"type":"integer"}},"config_issues":{"type":"array","items":{"type":"integer"}},"auth_issues":{"type":"array","items":{"type":"integer"}},"author_issues":{"type":"array","items":{"type":"integer"}},"data_issues":{"type":"array","items":{"type":"integer"}},"sensitive_issues":{"type":"array","items":{"type":"integer"}},"other_issues":{"type":"array","items":{"type":"integer"}}}},"EngagementPresets":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"title":{"type":"string","description":"Brief description of preset.","maxLength":500},"notes":{"type":"string","nullable":true,"description":"Description of what needs to be tested or setting up environment for testing","maxLength":2000},"scope":{"type":"string","description":"Scope of Engagement testing, IP's/Resources/URL's)","maxLength":800},"created":{"type":"string","format":"date-time","readOnly":true},"product":{"type":"integer"},"test_type":{"type":"array","items":{"type":"integer"}},"network_locations":{"type":"array","items":{"type":"integer"}},"prefetch":{"type":"object","properties":{"network_locations":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/NetworkLocations"}},"product":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/Product"}},"test_type":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/TestType"}}}}},"required":["created","id","product"]},"EngagementPresetsRequest":{"type":"object","properties":{"title":{"type":"string","minLength":1,"description":"Brief description of preset.","maxLength":500},"notes":{"type":"string","nullable":true,"description":"Description of what needs to be tested or setting up environment for testing","maxLength":2000},"scope":{"type":"string","description":"Scope of Engagement testing, IP's/Resources/URL's)","maxLength":800},"product":{"type":"integer"},"test_type":{"type":"array","items":{"type":"integer"}},"network_locations":{"type":"array","items":{"type":"integer"}}},"required":["product"]},"EngagementToFiles":{"type":"object","properties":{"engagement_id":{"type":"integer","nullable":true},"files":{"type":"array","items":{"$ref":"#/components/schemas/File"}}},"required":["engagement_id","files"]},"EngagementToNotes":{"type":"object","properties":{"engagement_id":{"type":"integer","nullable":true},"notes":{"type":"array","items":{"$ref":"#/components/schemas/Note"}}},"required":["engagement_id","notes"]},"EngagementUpdateJiraEpic":{"type":"object","properties":{"epic_name":{"type":"string","maxLength":200},"epic_priority":{"type":"string","nullable":true}}},"EngagementUpdateJiraEpicRequest":{"type":"object","properties":{"epic_name":{"type":"string","minLength":1,"maxLength":200},"epic_priority":{"type":"string","nullable":true,"minLength":1}}},"EnhancedDojoGroupMember":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"group":{"type":"integer"},"user":{"type":"integer"},"role":{"type":"integer","title":"Group role","description":"This role determines the permissions of the user to manage the group."},"prefetch":{"type":"object","properties":{"user":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}}}}},"required":["group","id","role","user"]},"EnhancedDojoGroupMemberRequest":{"type":"object","properties":{"group":{"type":"integer"},"user":{"type":"integer"},"role":{"type":"integer","title":"Group role","description":"This role determines the permissions of the user to manage the group."}},"required":["group","role","user"]},"EnhancedEndpoint":{"type":"object","description":"Extend from the BaseModelSerializer to allow for generalized extensions.","properties":{"id":{"type":"integer","readOnly":true},"active_finding_count":{"type":"integer","readOnly":true},"protocol":{"type":"string","nullable":true,"description":"The communication protocol/scheme such as 'http', 'ftp', 'dns', etc.","maxLength":20},"userinfo":{"type":"string","nullable":true,"description":"User info as 'alice', 'bob', etc.","maxLength":500},"host":{"type":"string","nullable":true,"description":"The host name or IP address. It must not include the port number. For example '127.0.0.1', 'localhost', 'yourdomain.com'.","maxLength":500},"port":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true,"description":"The network port associated with the endpoint."},"path":{"type":"string","nullable":true,"description":"The location of the resource, it must not start with a '/'. For example endpoint/420/edit","maxLength":500},"query":{"type":"string","nullable":true,"description":"The query string, the question mark should be omitted.For example 'group=4&team=8'","maxLength":1000},"fragment":{"type":"string","nullable":true,"description":"The fragment identifier which follows the hash mark. The hash mark should be omitted. For example 'section-13', 'paragraph-2'.","maxLength":500},"product":{"type":"integer","nullable":true},"endpoint_params":{"type":"array","items":{"type":"integer"},"readOnly":true},"findings":{"type":"array","items":{"type":"integer"},"readOnly":true},"tags":{"type":"array","items":{"type":"string"}}},"required":["active_finding_count","endpoint_params","findings","id"]},"EnhancedEndpointRequest":{"type":"object","description":"Extend from the BaseModelSerializer to allow for generalized extensions.","properties":{"protocol":{"type":"string","nullable":true,"description":"The communication protocol/scheme such as 'http', 'ftp', 'dns', etc.","maxLength":20},"userinfo":{"type":"string","nullable":true,"description":"User info as 'alice', 'bob', etc.","maxLength":500},"host":{"type":"string","nullable":true,"description":"The host name or IP address. It must not include the port number. For example '127.0.0.1', 'localhost', 'yourdomain.com'.","maxLength":500},"port":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true,"description":"The network port associated with the endpoint."},"path":{"type":"string","nullable":true,"description":"The location of the resource, it must not start with a '/'. For example endpoint/420/edit","maxLength":500},"query":{"type":"string","nullable":true,"description":"The query string, the question mark should be omitted.For example 'group=4&team=8'","maxLength":1000},"fragment":{"type":"string","nullable":true,"description":"The fragment identifier which follows the hash mark. The hash mark should be omitted. For example 'section-13', 'paragraph-2'.","maxLength":500},"product":{"type":"integer","nullable":true},"tags":{"type":"array","items":{"type":"string","minLength":1}}}},"EnhancedEngagement":{"type":"object","description":"Extend from the BaseModelSerializer to allow for generalized extensions.","properties":{"id":{"type":"integer","readOnly":true},"created":{"type":"string","format":"date-time","readOnly":true,"nullable":true,"description":"Time that the object was initially created, and saved to the database"},"updated":{"type":"string","format":"date-time","readOnly":true,"nullable":true,"description":"Time that the object was most recently saved to the database"},"name":{"type":"string","nullable":true,"maxLength":300},"description":{"type":"string","nullable":true,"maxLength":2000},"version":{"type":"string","nullable":true,"description":"Version of the product the engagement tested.","maxLength":100},"first_contacted":{"type":"string","format":"date","nullable":true},"target_start":{"type":"string","format":"date"},"target_end":{"type":"string","format":"date"},"reason":{"type":"string","nullable":true,"maxLength":2000},"active":{"type":"boolean","readOnly":true},"tracker":{"type":"string","format":"uri","nullable":true,"description":"Link to epic or ticket system with changes to version.","maxLength":200},"test_strategy":{"type":"string","format":"uri","nullable":true,"maxLength":200},"threat_model":{"type":"boolean"},"api_test":{"type":"boolean"},"pen_test":{"type":"boolean"},"check_list":{"type":"boolean"},"status":{"enum":["Not Started","Blocked","Cancelled","Completed","In Progress","On Hold","Scheduled","Waiting for Resource",null],"type":"string","description":"* `Not Started` - Not Started\n* `Blocked` - Blocked\n* `Cancelled` - Cancelled\n* `Completed` - Completed\n* `In Progress` - In Progress\n* `On Hold` - On Hold\n* `Scheduled` - Scheduled\n* `Waiting for Resource` - Waiting for Resource","x-spec-enum-id":"ff79738e944f9d44","nullable":true},"progress":{"type":"string","readOnly":true},"tmodel_path":{"type":"string","readOnly":true,"nullable":true},"done_testing":{"type":"boolean","readOnly":true},"engagement_type":{"enum":["Interactive","CI/CD",null],"type":"string","description":"* `Interactive` - Interactive\n* `CI/CD` - CI/CD","x-spec-enum-id":"531df25eeddb1f62","nullable":true},"build_id":{"type":"string","nullable":true,"description":"Build ID of the product the engagement tested.","maxLength":150},"commit_hash":{"type":"string","nullable":true,"description":"Commit hash from repo","maxLength":150},"branch_tag":{"type":"string","nullable":true,"title":"Branch/Tag","description":"Tag or branch of the product the engagement tested.","maxLength":150},"source_code_management_uri":{"type":"string","format":"uri","nullable":true,"title":"Repo","description":"Resource link to source code","maxLength":600},"deduplication_on_engagement":{"type":"boolean","title":"Deduplication within this engagement only","description":"If enabled deduplication will only mark a finding in this engagement as duplicate of another finding if both findings are in this engagement. If disabled, deduplication is on the product level."},"lead":{"type":"integer","nullable":true},"requester":{"type":"integer","nullable":true},"preset":{"type":"integer","nullable":true,"description":"Settings and notes for performing this engagement."},"report_type":{"type":"integer","nullable":true},"product":{"type":"integer"},"build_server":{"type":"integer","nullable":true,"description":"Build server responsible for CI/CD test"},"source_code_management_server":{"type":"integer","nullable":true,"title":"SCM Server","description":"Source code server for CI/CD test"},"orchestration_engine":{"type":"integer","nullable":true,"description":"Orchestration service responsible for CI/CD test"},"notes":{"type":"array","items":{"$ref":"#/components/schemas/Note"},"readOnly":true},"files":{"type":"array","items":{"$ref":"#/components/schemas/File"},"readOnly":true},"risk_acceptance":{"type":"array","items":{"type":"integer"},"readOnly":true},"tags":{"type":"array","items":{"type":"string"}},"prefetch":{"type":"object","properties":{"build_server":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/ToolConfiguration"}},"files":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/File"}},"lead":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}},"notes":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/Note"}},"orchestration_engine":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/ToolConfiguration"}},"product":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/Product"}},"risk_acceptance":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/RiskAcceptance"}},"source_code_management_server":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/ToolConfiguration"}}}}},"required":["active","created","done_testing","files","id","notes","product","progress","risk_acceptance","target_end","target_start","tmodel_path","updated"]},"EnhancedEngagementRequest":{"type":"object","description":"Extend from the BaseModelSerializer to allow for generalized extensions.","properties":{"name":{"type":"string","nullable":true,"maxLength":300},"description":{"type":"string","nullable":true,"maxLength":2000},"version":{"type":"string","nullable":true,"description":"Version of the product the engagement tested.","maxLength":100},"first_contacted":{"type":"string","format":"date","nullable":true},"target_start":{"type":"string","format":"date"},"target_end":{"type":"string","format":"date"},"reason":{"type":"string","nullable":true,"maxLength":2000},"tracker":{"type":"string","format":"uri","nullable":true,"description":"Link to epic or ticket system with changes to version.","maxLength":200},"test_strategy":{"type":"string","format":"uri","nullable":true,"maxLength":200},"threat_model":{"type":"boolean"},"api_test":{"type":"boolean"},"pen_test":{"type":"boolean"},"check_list":{"type":"boolean"},"status":{"enum":["Not Started","Blocked","Cancelled","Completed","In Progress","On Hold","Scheduled","Waiting for Resource",null],"type":"string","description":"* `Not Started` - Not Started\n* `Blocked` - Blocked\n* `Cancelled` - Cancelled\n* `Completed` - Completed\n* `In Progress` - In Progress\n* `On Hold` - On Hold\n* `Scheduled` - Scheduled\n* `Waiting for Resource` - Waiting for Resource","x-spec-enum-id":"ff79738e944f9d44","nullable":true},"engagement_type":{"enum":["Interactive","CI/CD",null],"type":"string","description":"* `Interactive` - Interactive\n* `CI/CD` - CI/CD","x-spec-enum-id":"531df25eeddb1f62","nullable":true},"build_id":{"type":"string","nullable":true,"description":"Build ID of the product the engagement tested.","maxLength":150},"commit_hash":{"type":"string","nullable":true,"description":"Commit hash from repo","maxLength":150},"branch_tag":{"type":"string","nullable":true,"title":"Branch/Tag","description":"Tag or branch of the product the engagement tested.","maxLength":150},"source_code_management_uri":{"type":"string","format":"uri","nullable":true,"title":"Repo","description":"Resource link to source code","maxLength":600},"deduplication_on_engagement":{"type":"boolean","title":"Deduplication within this engagement only","description":"If enabled deduplication will only mark a finding in this engagement as duplicate of another finding if both findings are in this engagement. If disabled, deduplication is on the product level."},"lead":{"type":"integer","nullable":true},"requester":{"type":"integer","nullable":true},"preset":{"type":"integer","nullable":true,"description":"Settings and notes for performing this engagement."},"report_type":{"type":"integer","nullable":true},"product":{"type":"integer"},"build_server":{"type":"integer","nullable":true,"description":"Build server responsible for CI/CD test"},"source_code_management_server":{"type":"integer","nullable":true,"title":"SCM Server","description":"Source code server for CI/CD test"},"orchestration_engine":{"type":"integer","nullable":true,"description":"Orchestration service responsible for CI/CD test"},"tags":{"type":"array","items":{"type":"string","minLength":1}}},"required":["product","target_end","target_start"]},"EnhancedOrganization":{"type":"object","description":"Extend from the BaseModelSerializer to allow for generalized extensions.","properties":{"id":{"type":"integer","readOnly":true},"critical_asset":{"type":"boolean","default":false},"key_asset":{"type":"boolean","default":false},"members":{"type":"array","items":{"type":"integer"},"readOnly":true},"authorization_groups":{"type":"array","items":{"type":"integer"},"readOnly":true},"created":{"type":"string","format":"date-time","readOnly":true,"nullable":true,"description":"Time that the object was initially created, and saved to the database"},"updated":{"type":"string","format":"date-time","readOnly":true,"nullable":true,"description":"Time that the object was most recently saved to the database"},"name":{"type":"string","maxLength":255},"description":{"type":"string","nullable":true,"maxLength":4000},"prefetch":{"type":"object","properties":{"authorized_users":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}}}}},"required":["authorization_groups","created","id","members","name","updated"]},"EnhancedOrganizationRequest":{"type":"object","description":"Extend from the BaseModelSerializer to allow for generalized extensions.","properties":{"critical_asset":{"type":"boolean","default":false},"key_asset":{"type":"boolean","default":false},"name":{"type":"string","minLength":1,"maxLength":255},"description":{"type":"string","nullable":true,"maxLength":4000}},"required":["name"]},"EnhancedProductGroup":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"product":{"type":"integer"},"group":{"type":"integer"},"role":{"type":"integer"},"prefetch":{"type":"object","properties":{"product":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/Product"}}}}},"required":["group","id","product","role"]},"EnhancedProductGroupRequest":{"type":"object","properties":{"product":{"type":"integer"},"group":{"type":"integer"},"role":{"type":"integer"}},"required":["group","product","role"]},"EnhancedProductMember":{"type":"object","description":"Pro-owned base class for the Product_Member API serializer.\n\nSee the matching note on\n``pro.product_type_groups.api.serializers.ProductTypeGroupSerializer``.","properties":{"id":{"type":"integer","readOnly":true},"product":{"type":"integer"},"user":{"type":"integer"},"role":{"type":"integer"},"prefetch":{"type":"object","properties":{"product":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/Product"}},"user":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}}}}},"required":["id","product","role","user"]},"EnhancedProductMemberRequest":{"type":"object","description":"Pro-owned base class for the Product_Member API serializer.\n\nSee the matching note on\n``pro.product_type_groups.api.serializers.ProductTypeGroupSerializer``.","properties":{"product":{"type":"integer"},"user":{"type":"integer"},"role":{"type":"integer"}},"required":["product","role","user"]},"EnhancedProductType":{"type":"object","description":"Extend from the BaseModelSerializer to allow for generalized extensions.","properties":{"id":{"type":"integer","readOnly":true},"members":{"type":"array","items":{"type":"integer"},"readOnly":true},"authorization_groups":{"type":"array","items":{"type":"integer"},"readOnly":true},"created":{"type":"string","format":"date-time","readOnly":true,"nullable":true,"description":"Time that the object was initially created, and saved to the database"},"updated":{"type":"string","format":"date-time","readOnly":true,"nullable":true,"description":"Time that the object was most recently saved to the database"},"name":{"type":"string","maxLength":255},"description":{"type":"string","nullable":true,"maxLength":4000},"critical_product":{"type":"boolean"},"key_product":{"type":"boolean"},"prefetch":{"type":"object","properties":{"authorized_users":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}}}}},"required":["authorization_groups","created","id","members","name","updated"]},"EnhancedProductTypeGroup":{"type":"object","description":"Pro-owned base class for the Product_Type_Group API serializer.\n\nThe OS authorization takeover (pro.0052_pro_authorization_takeover)\ndeleted the upstream ``dojo.api_v2.serializers.ProductTypeGroupSerializer``;\npro carries the canonical class here.  ``EnhancedProductTypeGroupSerializer``\nextends it so the documented inheritance check still holds.","properties":{"id":{"type":"integer","readOnly":true},"product_type":{"type":"integer"},"group":{"type":"integer"},"role":{"type":"integer"},"prefetch":{"type":"object","properties":{"product_type":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/ProductType"}}}}},"required":["group","id","product_type","role"]},"EnhancedProductTypeGroupRequest":{"type":"object","description":"Pro-owned base class for the Product_Type_Group API serializer.\n\nThe OS authorization takeover (pro.0052_pro_authorization_takeover)\ndeleted the upstream ``dojo.api_v2.serializers.ProductTypeGroupSerializer``;\npro carries the canonical class here.  ``EnhancedProductTypeGroupSerializer``\nextends it so the documented inheritance check still holds.","properties":{"product_type":{"type":"integer"},"group":{"type":"integer"},"role":{"type":"integer"}},"required":["group","product_type","role"]},"EnhancedProductTypeMember":{"type":"object","description":"Pro-owned base class for the Product_Type_Member API serializer.\n\nSee the matching note on\n``pro.product_type_groups.api.serializers.ProductTypeGroupSerializer``.","properties":{"id":{"type":"integer","readOnly":true},"product_type":{"type":"integer"},"user":{"type":"integer"},"role":{"type":"integer"},"prefetch":{"type":"object","properties":{"product_type":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/ProductType"}},"user":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}}}}},"required":["id","product_type","role","user"]},"EnhancedProductTypeMemberRequest":{"type":"object","description":"Pro-owned base class for the Product_Type_Member API serializer.\n\nSee the matching note on\n``pro.product_type_groups.api.serializers.ProductTypeGroupSerializer``.","properties":{"product_type":{"type":"integer"},"user":{"type":"integer"},"role":{"type":"integer"}},"required":["product_type","role","user"]},"EnhancedProductTypeRequest":{"type":"object","description":"Extend from the BaseModelSerializer to allow for generalized extensions.","properties":{"name":{"type":"string","minLength":1,"maxLength":255},"description":{"type":"string","nullable":true,"maxLength":4000},"critical_product":{"type":"boolean"},"key_product":{"type":"boolean"}},"required":["name"]},"EnhancedRiskAcceptance":{"type":"object","description":"Base serializer for all models.","properties":{"id":{"type":"integer","readOnly":true},"path":{"type":"string","readOnly":true},"is_global":{"type":"boolean","default":false},"recommendation":{"enum":["A","V","M","F","T"],"type":"string","description":"* `A` - Accept (The risk is acknowledged, yet remains)\n* `V` - Avoid (Do not engage with whatever creates the risk)\n* `M` - Mitigate (The risk still exists, yet compensating controls make it less of a threat)\n* `F` - Fix (The risk is eradicated)\n* `T` - Transfer (The risk is transferred to a 3rd party)","x-spec-enum-id":"8690fff015f0d4c3"},"decision":{"enum":["A","V","M","F","T"],"type":"string","description":"* `A` - Accept (The risk is acknowledged, yet remains)\n* `V` - Avoid (Do not engage with whatever creates the risk)\n* `M` - Mitigate (The risk still exists, yet compensating controls make it less of a threat)\n* `F` - Fix (The risk is eradicated)\n* `T` - Transfer (The risk is transferred to a 3rd party)","x-spec-enum-id":"8690fff015f0d4c3"},"accepted_findings":{"type":"array","items":{"type":"integer","nullable":true}},"has_proof":{"type":"boolean","readOnly":true},"proof_filename":{"type":"boolean","readOnly":true},"name":{"type":"string","description":"Descriptive name which in the future may also be used to group risk acceptances together across engagements and products","maxLength":300},"recommendation_details":{"type":"string","nullable":true,"title":"Security Recommendation Details","description":"Explanation of security recommendation"},"decision_details":{"type":"string","nullable":true,"description":"If a compensating control exists to mitigate the finding or reduce risk, then list the compensating control(s)."},"accepted_by":{"type":"string","nullable":true,"description":"The person that accepts the risk, can be outside of DefectDojo.","maxLength":200},"expiration_date":{"type":"string","format":"date-time","nullable":true,"description":"When the risk acceptance expires, the findings will be reactivated (unless disabled below)."},"expiration_date_warned":{"type":"string","format":"date-time","nullable":true,"description":"(readonly) Date at which notice about the risk acceptance expiration was sent."},"expiration_date_handled":{"type":"string","format":"date-time","nullable":true,"description":"(readonly) When the risk acceptance expiration was handled (manually or by the daily job)."},"reactivate_expired":{"type":"boolean","title":"Reactivate findings on expiration","description":"Reactivate findings when risk acceptance expires?"},"restart_sla_expired":{"type":"boolean","title":"Restart SLA on expiration","description":"When enabled, the SLA for findings is restarted when the risk acceptance expires."},"created":{"type":"string","format":"date-time","readOnly":true},"updated":{"type":"string","format":"date-time","readOnly":true},"owner":{"type":"integer","description":"User in DefectDojo owning this acceptance. Only the owner and staff users can edit the risk acceptance."},"notes":{"type":"array","items":{"type":"integer"},"readOnly":true}},"required":["accepted_findings","created","decision","has_proof","id","name","notes","owner","path","proof_filename","recommendation","updated"]},"EnhancedRiskAcceptanceProof":{"type":"object","properties":{"file":{"type":"string","format":"uri"}},"required":["file"]},"EnhancedRiskAcceptanceProofRequest":{"type":"object","properties":{"file":{"type":"string","format":"binary"}},"required":["file"]},"EnhancedRiskAcceptanceRequest":{"type":"object","description":"Base serializer for all models.","properties":{"is_global":{"type":"boolean","default":false},"recommendation":{"enum":["A","V","M","F","T"],"type":"string","description":"* `A` - Accept (The risk is acknowledged, yet remains)\n* `V` - Avoid (Do not engage with whatever creates the risk)\n* `M` - Mitigate (The risk still exists, yet compensating controls make it less of a threat)\n* `F` - Fix (The risk is eradicated)\n* `T` - Transfer (The risk is transferred to a 3rd party)","x-spec-enum-id":"8690fff015f0d4c3"},"decision":{"enum":["A","V","M","F","T"],"type":"string","description":"* `A` - Accept (The risk is acknowledged, yet remains)\n* `V` - Avoid (Do not engage with whatever creates the risk)\n* `M` - Mitigate (The risk still exists, yet compensating controls make it less of a threat)\n* `F` - Fix (The risk is eradicated)\n* `T` - Transfer (The risk is transferred to a 3rd party)","x-spec-enum-id":"8690fff015f0d4c3"},"accepted_findings":{"type":"array","items":{"type":"integer","nullable":true}},"name":{"type":"string","minLength":1,"description":"Descriptive name which in the future may also be used to group risk acceptances together across engagements and products","maxLength":300},"recommendation_details":{"type":"string","nullable":true,"title":"Security Recommendation Details","description":"Explanation of security recommendation"},"decision_details":{"type":"string","nullable":true,"description":"If a compensating control exists to mitigate the finding or reduce risk, then list the compensating control(s)."},"accepted_by":{"type":"string","nullable":true,"description":"The person that accepts the risk, can be outside of DefectDojo.","maxLength":200},"expiration_date":{"type":"string","format":"date-time","nullable":true,"description":"When the risk acceptance expires, the findings will be reactivated (unless disabled below)."},"expiration_date_warned":{"type":"string","format":"date-time","nullable":true,"description":"(readonly) Date at which notice about the risk acceptance expiration was sent."},"expiration_date_handled":{"type":"string","format":"date-time","nullable":true,"description":"(readonly) When the risk acceptance expiration was handled (manually or by the daily job)."},"reactivate_expired":{"type":"boolean","title":"Reactivate findings on expiration","description":"Reactivate findings when risk acceptance expires?"},"restart_sla_expired":{"type":"boolean","title":"Restart SLA on expiration","description":"When enabled, the SLA for findings is restarted when the risk acceptance expires."},"owner":{"type":"integer","description":"User in DefectDojo owning this acceptance. Only the owner and staff users can edit the risk acceptance."}},"required":["accepted_findings","decision","name","owner","recommendation"]},"EnhancedSystemSettings":{"type":"object","description":"Base serializer for all models.","properties":{"id":{"type":"integer","readOnly":true},"api_async_import":{"type":"boolean","description":"When enabled, all API based imports and reimports will be processed asynchronously in the background after parsing the submitted report for errors. Query the test ID returned in the response for the 'processing' field to monitor the status of the process"},"ui_async_import":{"type":"boolean","description":"When enabled, all UI based imports and reimports will be processed asynchronously in the background after parsing the submitted report for errors."},"default_group":{"type":"integer","nullable":true,"description":"Dojo_Group ID that newly-created users will be auto-assigned to."},"default_group_role":{"type":"integer","nullable":true,"description":"Role ID applied when newly-created users are auto-assigned to the default group."},"default_group_email_pattern":{"type":"string","description":"Regex pattern matched against a new user's email; the default group is only assigned when the email matches. Empty string disables the pattern check.","maxLength":200},"enable_deduplication":{"type":"boolean","title":"Deduplicate findings","description":"With this setting turned on, DefectDojo deduplicates findings by comparing endpoints, cwe fields, and titles. If two findings share a URL and have the same CWE or title, DefectDojo marks the recent finding as a duplicate. When deduplication is enabled, a list of deduplicated findings is added to the engagement view."},"delete_duplicates":{"type":"boolean","description":"Requires next setting: maximum number of duplicates to retain."},"max_dupes":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true,"title":"Max Duplicates","description":"When enabled, if a single issue reaches the maximum number of duplicates, the oldest will be deleted. Duplicate will not be deleted when left empty. A value of 0 will remove all duplicates."},"email_from":{"type":"string","maxLength":200},"enable_jira":{"type":"boolean","title":"Enable JIRA integration"},"enable_jira_web_hook":{"type":"boolean","description":"Please note: It is strongly recommended to use a secret below and / or IP whitelist the JIRA server using a proxy such as Nginx."},"disable_jira_webhook_secret":{"type":"boolean","title":"Disable web hook secret","description":"Allows incoming requests without a secret (discouraged legacy behaviour)"},"jira_webhook_secret":{"type":"string","nullable":true,"title":"JIRA Webhook URL","description":"Secret needed in URL for incoming JIRA Webhook","maxLength":64},"jira_minimum_severity":{"enum":["Critical","High","Medium","Low","Info","",null],"type":"string","description":"* `Critical` - Critical\n* `High` - High\n* `Medium` - Medium\n* `Low` - Low\n* `Info` - Info","x-spec-enum-id":"fc5d16a20ed06136","nullable":true},"jira_labels":{"type":"string","nullable":true,"description":"JIRA issue labels space seperated","maxLength":200},"add_vulnerability_id_to_jira_label":{"type":"boolean","title":"Add vulnerability Id as a JIRA label"},"enable_github":{"type":"boolean","title":"Enable GITHUB integration"},"enable_slack_notifications":{"type":"boolean"},"slack_channel":{"type":"string","description":"Optional. Needed if you want to send global notifications.","maxLength":100},"slack_token":{"type":"string","description":"Token required for interacting with Slack. Get one at https://api.slack.com/tokens","maxLength":100},"slack_username":{"type":"string","description":"Optional. Will take your bot name otherwise.","maxLength":100},"enable_msteams_notifications":{"type":"boolean","title":"Enable Microsoft Teams notifications"},"msteams_url":{"type":"string","description":"The full URL of the incoming webhook","maxLength":400},"enable_mail_notifications":{"type":"boolean"},"mail_notifications_to":{"type":"string","maxLength":200},"enable_webhooks_notifications":{"type":"boolean","title":"Enable Webhook notifications"},"webhooks_notifications_timeout":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"description":"How many seconds will DefectDojo waits for response from webhook endpoint"},"enforce_verified_status":{"type":"boolean","title":"Enforce Verified Status - Globally","description":"When enabled, features such as product grading, jira integration, metrics, and reports will only interact with verified findings. This setting will override individually scoped verified toggles."},"enforce_verified_status_jira":{"type":"boolean","title":"Enforce Verified Status - Jira","description":"When enabled, findings must have a verified status to be pushed to jira."},"enforce_verified_status_product_grading":{"type":"boolean","title":"Enforce Verified Status - Product Grading","description":"When enabled, findings must have a verified status to be considered as part of a product's grading."},"enforce_verified_status_metrics":{"type":"boolean","title":"Enforce Verified Status - Metrics","description":"When enabled, findings must have a verified status to be counted in metric calculations, be included in reports, and filters."},"false_positive_history":{"type":"boolean","description":"(EXPERIMENTAL) DefectDojo will automatically mark the finding as a false positive if an equal finding (according to its dedupe algorithm) has been previously marked as a false positive on the same product. ATTENTION: Although the deduplication algorithm is used to determine if a finding should be marked as a false positive, this feature will not work if deduplication is enabled since it doesn't make sense to use both."},"retroactive_false_positive_history":{"type":"boolean","description":"(EXPERIMENTAL) FP History will also retroactively mark/unmark all existing equal findings in the same product as a false positives. Only works if the False Positive History feature is also enabled."},"url_prefix":{"type":"string","description":"URL prefix if DefectDojo is installed in it's own virtual subdirectory.","maxLength":300},"team_name":{"type":"string","maxLength":100},"enable_product_grade":{"type":"boolean","title":"Enable Product Grading","description":"Displays a grade letter next to a product to show the overall health."},"product_grade_a":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"title":"Grade A","description":"Percentage score for an 'A' >="},"product_grade_b":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"title":"Grade B","description":"Percentage score for a 'B' >="},"product_grade_c":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"title":"Grade C","description":"Percentage score for a 'C' >="},"product_grade_d":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"title":"Grade D","description":"Percentage score for a 'D' >="},"product_grade_f":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"title":"Grade F","description":"Percentage score for an 'F' <="},"enable_product_tag_inheritance":{"type":"boolean","description":"Enables product tag inheritance globally for all products. Any tags added on a product will automatically be added to all Engagements, Tests, and Findings"},"enable_benchmark":{"type":"boolean","title":"Enable Benchmarks","description":"Enables Benchmarks such as the OWASP ASVS (Application Security Verification Standard)"},"enable_similar_findings":{"type":"boolean","description":"Enable the query of similar findings on the view finding page. This feature can involve potentially large queries and negatively impact performance"},"engagement_auto_close":{"type":"boolean","title":"Enable Engagement Auto-Close","description":"Closes an engagement after 3 days (default) past due date including last update."},"engagement_auto_close_days":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"description":"Closes an engagement after the specified number of days past due date including last update."},"enable_finding_sla":{"type":"boolean","title":"Enable Finding SLA's","description":"Enables Finding SLA's for time to remediate."},"enable_notify_sla_active":{"type":"boolean","title":"Enable Notify SLA's Breach for active Findings","description":"Enables Notify when time to remediate according to Finding SLA's is breached for active Findings."},"enable_notify_sla_active_verified":{"type":"boolean","title":"Enable Notify SLA's Breach for active, verified Findings","description":"Enables Notify when time to remediate according to Finding SLA's is breached for active, verified Findings."},"enable_notify_sla_jira_only":{"type":"boolean","title":"Enable Notify SLA's Breach only for Findings linked to JIRA","description":"Enables Notify when time to remediate according to Finding SLA's is breached for Findings that are linked to JIRA issues. Notification is disabled for Findings not linked to JIRA issues"},"enable_notify_sla_exponential_backoff":{"type":"boolean","title":"Enable an exponential backoff strategy for SLA breach notifications.","description":"Enable an exponential backoff strategy for SLA breach notifications, e.g. 1, 2, 4, 8, etc. Otherwise it alerts every day"},"allow_anonymous_survey_repsonse":{"type":"boolean","title":"Allow Anonymous Survey Responses","description":"Enable anyone with a link to the survey to answer a survey"},"disclaimer_notifications":{"type":"string","title":"Custom Disclaimer for Notifications","description":"Include this custom disclaimer on all notifications","maxLength":3000},"disclaimer_reports":{"type":"string","title":"Custom Disclaimer for Reports","description":"Include this custom disclaimer on generated reports","maxLength":5000},"disclaimer_reports_forced":{"type":"boolean","title":"Force to add disclaimer reports","description":"Disclaimer will be added to all reports even if user didn't selected 'Include disclaimer'."},"disclaimer_notes":{"type":"string","title":"Custom Disclaimer for Notes","description":"Include this custom disclaimer next to input form for notes","maxLength":3000},"risk_acceptance_form_default_days":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true,"description":"Default expiry period for risk acceptance form."},"risk_acceptance_notify_before_expiration":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true,"title":"Risk acceptance expiration heads up days","description":"Notify X days before risk acceptance expires. Leave empty to disable."},"enable_questionnaires":{"type":"boolean","description":"With this setting turned off, questionnaires will be disabled in the user interface."},"enable_checklists":{"type":"boolean","description":"With this setting turned off, checklists will be disabled in the user interface."},"enable_endpoint_metadata_import":{"type":"boolean","description":"With this setting turned off, endpoint metadata import will be disabled in the user interface."},"enable_user_profile_editable":{"type":"boolean","title":"Enable user profile for writing","description":"When turned on users can edit their profiles"},"enable_product_tracking_files":{"type":"boolean","description":"With this setting turned off, the product tracking files will be disabled in the user interface."},"enable_finding_groups":{"type":"boolean","description":"With this setting turned off, the Finding Groups will be disabled."},"enable_ui_table_based_searching":{"type":"boolean","title":"Enable UI Table Based Filtering/Sorting","description":"With this setting enabled, table headings will contain sort buttons for the current page of data in addition to sorting buttons that consider data from all pages."},"enable_calendar":{"type":"boolean","description":"With this setting turned off, the Calendar will be disabled in the user interface."},"enable_cvss3_display":{"type":"boolean","description":"With this setting turned off, CVSS3 fields will be hidden in the user interface."},"enable_cvss4_display":{"type":"boolean","description":"With this setting turned off, CVSS4 fields will be hidden in the user interface."},"minimum_password_length":{"type":"integer","maximum":48,"minimum":9,"description":"Requires user to set passwords greater than minimum length."},"maximum_password_length":{"type":"integer","maximum":48,"minimum":9,"description":"Requires user to set passwords less than maximum length."},"number_character_required":{"type":"boolean","title":"Password must contain one digit","description":"Requires user passwords to contain at least one digit (0-9)."},"special_character_required":{"type":"boolean","title":"Password must contain one special character","description":"Requires user passwords to contain at least one special character (()[]{}|\\`~!@#$%^&*_-+=;:'\",<>./?)."},"lowercase_character_required":{"type":"boolean","title":"Password must contain one lowercase letter","description":"Requires user passwords to contain at least one lowercase letter (a-z)."},"uppercase_character_required":{"type":"boolean","title":"Password must contain one uppercase letter","description":"Requires user passwords to contain at least one uppercase letter (A-Z)."},"non_common_password_required":{"type":"boolean","title":"Password must not be common","description":"Requires user passwords to not be part of list of common passwords."},"api_expose_error_details":{"type":"boolean","description":"When turned on, the API will expose error details in the response."},"filter_string_matching":{"type":"boolean","title":"Filter String Matching Optimization","description":"When turned on, all filter operations in the UI will require string matches rather than ID. This is a performance enhancement to avoid fetching objects unnecessarily."}},"required":["id"]},"EnhancedSystemSettingsRequest":{"type":"object","description":"Base serializer for all models.","properties":{"api_async_import":{"type":"boolean","description":"When enabled, all API based imports and reimports will be processed asynchronously in the background after parsing the submitted report for errors. Query the test ID returned in the response for the 'processing' field to monitor the status of the process"},"ui_async_import":{"type":"boolean","description":"When enabled, all UI based imports and reimports will be processed asynchronously in the background after parsing the submitted report for errors."},"default_group":{"type":"integer","nullable":true,"description":"Dojo_Group ID that newly-created users will be auto-assigned to."},"default_group_role":{"type":"integer","nullable":true,"description":"Role ID applied when newly-created users are auto-assigned to the default group."},"default_group_email_pattern":{"type":"string","description":"Regex pattern matched against a new user's email; the default group is only assigned when the email matches. Empty string disables the pattern check.","maxLength":200},"enable_deduplication":{"type":"boolean","title":"Deduplicate findings","description":"With this setting turned on, DefectDojo deduplicates findings by comparing endpoints, cwe fields, and titles. If two findings share a URL and have the same CWE or title, DefectDojo marks the recent finding as a duplicate. When deduplication is enabled, a list of deduplicated findings is added to the engagement view."},"delete_duplicates":{"type":"boolean","description":"Requires next setting: maximum number of duplicates to retain."},"max_dupes":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true,"title":"Max Duplicates","description":"When enabled, if a single issue reaches the maximum number of duplicates, the oldest will be deleted. Duplicate will not be deleted when left empty. A value of 0 will remove all duplicates."},"email_from":{"type":"string","maxLength":200},"enable_jira":{"type":"boolean","title":"Enable JIRA integration"},"enable_jira_web_hook":{"type":"boolean","description":"Please note: It is strongly recommended to use a secret below and / or IP whitelist the JIRA server using a proxy such as Nginx."},"disable_jira_webhook_secret":{"type":"boolean","title":"Disable web hook secret","description":"Allows incoming requests without a secret (discouraged legacy behaviour)"},"jira_webhook_secret":{"type":"string","nullable":true,"minLength":1,"title":"JIRA Webhook URL","description":"Secret needed in URL for incoming JIRA Webhook","maxLength":64},"jira_minimum_severity":{"enum":["Critical","High","Medium","Low","Info","",null],"type":"string","description":"* `Critical` - Critical\n* `High` - High\n* `Medium` - Medium\n* `Low` - Low\n* `Info` - Info","x-spec-enum-id":"fc5d16a20ed06136","nullable":true},"jira_labels":{"type":"string","nullable":true,"description":"JIRA issue labels space seperated","maxLength":200},"add_vulnerability_id_to_jira_label":{"type":"boolean","title":"Add vulnerability Id as a JIRA label"},"enable_github":{"type":"boolean","title":"Enable GITHUB integration"},"enable_slack_notifications":{"type":"boolean"},"slack_channel":{"type":"string","description":"Optional. Needed if you want to send global notifications.","maxLength":100},"slack_token":{"type":"string","description":"Token required for interacting with Slack. Get one at https://api.slack.com/tokens","maxLength":100},"slack_username":{"type":"string","description":"Optional. Will take your bot name otherwise.","maxLength":100},"enable_msteams_notifications":{"type":"boolean","title":"Enable Microsoft Teams notifications"},"msteams_url":{"type":"string","description":"The full URL of the incoming webhook","maxLength":400},"enable_mail_notifications":{"type":"boolean"},"mail_notifications_to":{"type":"string","maxLength":200},"enable_webhooks_notifications":{"type":"boolean","title":"Enable Webhook notifications"},"webhooks_notifications_timeout":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"description":"How many seconds will DefectDojo waits for response from webhook endpoint"},"enforce_verified_status":{"type":"boolean","title":"Enforce Verified Status - Globally","description":"When enabled, features such as product grading, jira integration, metrics, and reports will only interact with verified findings. This setting will override individually scoped verified toggles."},"enforce_verified_status_jira":{"type":"boolean","title":"Enforce Verified Status - Jira","description":"When enabled, findings must have a verified status to be pushed to jira."},"enforce_verified_status_product_grading":{"type":"boolean","title":"Enforce Verified Status - Product Grading","description":"When enabled, findings must have a verified status to be considered as part of a product's grading."},"enforce_verified_status_metrics":{"type":"boolean","title":"Enforce Verified Status - Metrics","description":"When enabled, findings must have a verified status to be counted in metric calculations, be included in reports, and filters."},"false_positive_history":{"type":"boolean","description":"(EXPERIMENTAL) DefectDojo will automatically mark the finding as a false positive if an equal finding (according to its dedupe algorithm) has been previously marked as a false positive on the same product. ATTENTION: Although the deduplication algorithm is used to determine if a finding should be marked as a false positive, this feature will not work if deduplication is enabled since it doesn't make sense to use both."},"retroactive_false_positive_history":{"type":"boolean","description":"(EXPERIMENTAL) FP History will also retroactively mark/unmark all existing equal findings in the same product as a false positives. Only works if the False Positive History feature is also enabled."},"url_prefix":{"type":"string","description":"URL prefix if DefectDojo is installed in it's own virtual subdirectory.","maxLength":300},"team_name":{"type":"string","maxLength":100},"enable_product_grade":{"type":"boolean","title":"Enable Product Grading","description":"Displays a grade letter next to a product to show the overall health."},"product_grade_a":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"title":"Grade A","description":"Percentage score for an 'A' >="},"product_grade_b":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"title":"Grade B","description":"Percentage score for a 'B' >="},"product_grade_c":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"title":"Grade C","description":"Percentage score for a 'C' >="},"product_grade_d":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"title":"Grade D","description":"Percentage score for a 'D' >="},"product_grade_f":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"title":"Grade F","description":"Percentage score for an 'F' <="},"enable_product_tag_inheritance":{"type":"boolean","description":"Enables product tag inheritance globally for all products. Any tags added on a product will automatically be added to all Engagements, Tests, and Findings"},"enable_benchmark":{"type":"boolean","title":"Enable Benchmarks","description":"Enables Benchmarks such as the OWASP ASVS (Application Security Verification Standard)"},"enable_similar_findings":{"type":"boolean","description":"Enable the query of similar findings on the view finding page. This feature can involve potentially large queries and negatively impact performance"},"engagement_auto_close":{"type":"boolean","title":"Enable Engagement Auto-Close","description":"Closes an engagement after 3 days (default) past due date including last update."},"engagement_auto_close_days":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"description":"Closes an engagement after the specified number of days past due date including last update."},"enable_finding_sla":{"type":"boolean","title":"Enable Finding SLA's","description":"Enables Finding SLA's for time to remediate."},"enable_notify_sla_active":{"type":"boolean","title":"Enable Notify SLA's Breach for active Findings","description":"Enables Notify when time to remediate according to Finding SLA's is breached for active Findings."},"enable_notify_sla_active_verified":{"type":"boolean","title":"Enable Notify SLA's Breach for active, verified Findings","description":"Enables Notify when time to remediate according to Finding SLA's is breached for active, verified Findings."},"enable_notify_sla_jira_only":{"type":"boolean","title":"Enable Notify SLA's Breach only for Findings linked to JIRA","description":"Enables Notify when time to remediate according to Finding SLA's is breached for Findings that are linked to JIRA issues. Notification is disabled for Findings not linked to JIRA issues"},"enable_notify_sla_exponential_backoff":{"type":"boolean","title":"Enable an exponential backoff strategy for SLA breach notifications.","description":"Enable an exponential backoff strategy for SLA breach notifications, e.g. 1, 2, 4, 8, etc. Otherwise it alerts every day"},"allow_anonymous_survey_repsonse":{"type":"boolean","title":"Allow Anonymous Survey Responses","description":"Enable anyone with a link to the survey to answer a survey"},"disclaimer_notifications":{"type":"string","title":"Custom Disclaimer for Notifications","description":"Include this custom disclaimer on all notifications","maxLength":3000},"disclaimer_reports":{"type":"string","title":"Custom Disclaimer for Reports","description":"Include this custom disclaimer on generated reports","maxLength":5000},"disclaimer_reports_forced":{"type":"boolean","title":"Force to add disclaimer reports","description":"Disclaimer will be added to all reports even if user didn't selected 'Include disclaimer'."},"disclaimer_notes":{"type":"string","title":"Custom Disclaimer for Notes","description":"Include this custom disclaimer next to input form for notes","maxLength":3000},"risk_acceptance_form_default_days":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true,"description":"Default expiry period for risk acceptance form."},"risk_acceptance_notify_before_expiration":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true,"title":"Risk acceptance expiration heads up days","description":"Notify X days before risk acceptance expires. Leave empty to disable."},"enable_questionnaires":{"type":"boolean","description":"With this setting turned off, questionnaires will be disabled in the user interface."},"enable_checklists":{"type":"boolean","description":"With this setting turned off, checklists will be disabled in the user interface."},"enable_endpoint_metadata_import":{"type":"boolean","description":"With this setting turned off, endpoint metadata import will be disabled in the user interface."},"enable_user_profile_editable":{"type":"boolean","title":"Enable user profile for writing","description":"When turned on users can edit their profiles"},"enable_product_tracking_files":{"type":"boolean","description":"With this setting turned off, the product tracking files will be disabled in the user interface."},"enable_finding_groups":{"type":"boolean","description":"With this setting turned off, the Finding Groups will be disabled."},"enable_ui_table_based_searching":{"type":"boolean","title":"Enable UI Table Based Filtering/Sorting","description":"With this setting enabled, table headings will contain sort buttons for the current page of data in addition to sorting buttons that consider data from all pages."},"enable_calendar":{"type":"boolean","description":"With this setting turned off, the Calendar will be disabled in the user interface."},"enable_cvss3_display":{"type":"boolean","description":"With this setting turned off, CVSS3 fields will be hidden in the user interface."},"enable_cvss4_display":{"type":"boolean","description":"With this setting turned off, CVSS4 fields will be hidden in the user interface."},"minimum_password_length":{"type":"integer","maximum":48,"minimum":9,"description":"Requires user to set passwords greater than minimum length."},"maximum_password_length":{"type":"integer","maximum":48,"minimum":9,"description":"Requires user to set passwords less than maximum length."},"number_character_required":{"type":"boolean","title":"Password must contain one digit","description":"Requires user passwords to contain at least one digit (0-9)."},"special_character_required":{"type":"boolean","title":"Password must contain one special character","description":"Requires user passwords to contain at least one special character (()[]{}|\\`~!@#$%^&*_-+=;:'\",<>./?)."},"lowercase_character_required":{"type":"boolean","title":"Password must contain one lowercase letter","description":"Requires user passwords to contain at least one lowercase letter (a-z)."},"uppercase_character_required":{"type":"boolean","title":"Password must contain one uppercase letter","description":"Requires user passwords to contain at least one uppercase letter (A-Z)."},"non_common_password_required":{"type":"boolean","title":"Password must not be common","description":"Requires user passwords to not be part of list of common passwords."},"api_expose_error_details":{"type":"boolean","description":"When turned on, the API will expose error details in the response."},"filter_string_matching":{"type":"boolean","title":"Filter String Matching Optimization","description":"When turned on, all filter operations in the UI will require string matches rather than ID. This is a performance enhancement to avoid fetching objects unnecessarily."}}},"EnhancedUser":{"type":"object","description":"Extend from the BaseModelSerializer to allow for generalized extensions.","properties":{"id":{"type":"integer","readOnly":true},"username":{"type":"string","description":"Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.","pattern":"^[\\w.@+-]+$","maxLength":150},"first_name":{"type":"string","maxLength":150},"last_name":{"type":"string","maxLength":150},"email":{"type":"string","format":"email","pattern":"^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$"},"date_joined":{"type":"string","format":"date-time","readOnly":true},"last_login":{"type":"string","format":"date-time","readOnly":true,"nullable":true},"is_active":{"type":"boolean","title":"Active","description":"Designates whether this user should be treated as active. Unselect this instead of deleting accounts."},"is_staff":{"type":"boolean","title":"Staff status","description":"Designates whether the user can log into this admin site."},"is_superuser":{"type":"boolean","title":"Superuser status","description":"Designates that this user has all permissions without explicitly assigning them."},"token_last_reset":{"type":"string","format":"date-time","nullable":true,"readOnly":true},"password_last_reset":{"type":"string","format":"date-time","nullable":true,"readOnly":true},"configuration_permissions":{"type":"array","items":{"type":"integer","nullable":true}}},"required":["date_joined","email","id","last_login","password_last_reset","token_last_reset","username"]},"EnhancedUserRequest":{"type":"object","description":"Extend from the BaseModelSerializer to allow for generalized extensions.","properties":{"username":{"type":"string","minLength":1,"description":"Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.","pattern":"^[\\w.@+-]+$","maxLength":150},"first_name":{"type":"string","maxLength":150},"last_name":{"type":"string","maxLength":150},"email":{"type":"string","format":"email","minLength":1,"pattern":"^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$"},"is_active":{"type":"boolean","title":"Active","description":"Designates whether this user should be treated as active. Unselect this instead of deleting accounts."},"is_staff":{"type":"boolean","title":"Staff status","description":"Designates whether the user can log into this admin site."},"is_superuser":{"type":"boolean","title":"Superuser status","description":"Designates that this user has all permissions without explicitly assigning them."},"password":{"type":"string","writeOnly":true,"minLength":1},"configuration_permissions":{"type":"array","items":{"type":"integer","nullable":true}}},"required":["email","username"]},"ExecutiveSummary":{"type":"object","properties":{"engagement_name":{"type":"string","maxLength":200},"engagement_target_start":{"type":"string","format":"date"},"engagement_target_end":{"type":"string","format":"date"},"test_type_name":{"type":"string","maxLength":200},"test_target_start":{"type":"string","format":"date-time"},"test_target_end":{"type":"string","format":"date-time"},"test_environment_name":{"type":"string","maxLength":200},"test_strategy_ref":{"type":"string","format":"uri","maxLength":200},"total_findings":{"type":"integer"}},"required":["engagement_name","engagement_target_end","engagement_target_start","test_environment_name","test_strategy_ref","test_target_end","test_target_start","test_type_name","total_findings"]},"ExpandedMapping":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"defectdojo_product_type_id":{"$ref":"#/components/schemas/MappingProductType"},"defectdojo_product_id":{"$ref":"#/components/schemas/MappingProduct"},"defectdojo_engagement_id":{"$ref":"#/components/schemas/MappingEngagement"},"subtypes":{"type":"array","items":{"$ref":"#/components/schemas/MappingSubtype"},"readOnly":true}},"required":["defectdojo_engagement_id","defectdojo_product_id","defectdojo_product_type_id","id","subtypes"]},"ExtendedConfigurationPermission":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"name":{"type":"string","maxLength":255},"codename":{"type":"string","maxLength":100}},"required":["codename","id","name"]},"ExtendedUserContactInfo":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"user_profile":{"allOf":[{"$ref":"#/components/schemas/User"}],"readOnly":true},"title":{"type":"string","nullable":true,"maxLength":150},"phone_number":{"type":"string","description":"Phone number must be entered in the format: '+999999999'. Up to 15 digits allowed.","pattern":"^\\+?1?\\d{9,15}$","maxLength":15},"cell_number":{"type":"string","description":"Phone number must be entered in the format: '+999999999'. Up to 15 digits allowed.","pattern":"^\\+?1?\\d{9,15}$","maxLength":15},"twitter_username":{"type":"string","nullable":true,"maxLength":150},"github_username":{"type":"string","nullable":true,"maxLength":150},"slack_username":{"type":"string","nullable":true,"title":"Slack Email Address","description":"Email address associated with your slack account","maxLength":150},"slack_user_id":{"type":"string","nullable":true,"maxLength":25},"block_execution":{"type":"boolean","description":"Instead of async deduping a finding the findings will be deduped synchronously and will 'block' the user until completion."},"deduplication_execution_mode":{"enum":["async","async_wait","sync","",null],"type":"string","x-spec-enum-id":"bf7fb8ff28520a46","nullable":true,"description":"Controls how import/reimport deduplication post-processing is executed. 'Async' dispatches it to the background and returns immediately (default). 'Async, wait for deduplication' dispatches to the background but waits for deduplication to finish before responding, so notifications and statistics reflect the deduplicated state. 'Synchronous' runs the import deduplication inline. Can be overridden per request. Independent of block_execution, which forces all async tasks (notifications, jira, ...) to the foreground.\n\n* `async` - Async (do not wait)\n* `async_wait` - Async, wait for deduplication\n* `sync` - Synchronous (block)"},"force_password_reset":{"type":"boolean","description":"Forces this user to reset their password on next login."},"token_last_reset":{"type":"string","format":"date-time","nullable":true,"description":"Timestamp of the most recent API token reset for this user."},"password_last_reset":{"type":"string","format":"date-time","nullable":true,"description":"Timestamp of the most recent password reset for this user."},"user_state_details":{"readOnly":true,"description":"Extensible per-user UI state (dismissed banners, 'don't show again' flags, ...)."},"user":{"type":"integer"},"prefetch":{"type":"object","properties":{"user":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}}}}},"required":["id","user","user_profile","user_state_details"]},"ExtendedUserContactInfoRequest":{"type":"object","properties":{"title":{"type":"string","nullable":true,"maxLength":150},"phone_number":{"type":"string","description":"Phone number must be entered in the format: '+999999999'. Up to 15 digits allowed.","pattern":"^\\+?1?\\d{9,15}$","maxLength":15},"cell_number":{"type":"string","description":"Phone number must be entered in the format: '+999999999'. Up to 15 digits allowed.","pattern":"^\\+?1?\\d{9,15}$","maxLength":15},"twitter_username":{"type":"string","nullable":true,"maxLength":150},"github_username":{"type":"string","nullable":true,"maxLength":150},"slack_username":{"type":"string","nullable":true,"title":"Slack Email Address","description":"Email address associated with your slack account","maxLength":150},"slack_user_id":{"type":"string","nullable":true,"maxLength":25},"block_execution":{"type":"boolean","description":"Instead of async deduping a finding the findings will be deduped synchronously and will 'block' the user until completion."},"deduplication_execution_mode":{"enum":["async","async_wait","sync","",null],"type":"string","x-spec-enum-id":"bf7fb8ff28520a46","nullable":true,"description":"Controls how import/reimport deduplication post-processing is executed. 'Async' dispatches it to the background and returns immediately (default). 'Async, wait for deduplication' dispatches to the background but waits for deduplication to finish before responding, so notifications and statistics reflect the deduplicated state. 'Synchronous' runs the import deduplication inline. Can be overridden per request. Independent of block_execution, which forces all async tasks (notifications, jira, ...) to the foreground.\n\n* `async` - Async (do not wait)\n* `async_wait` - Async, wait for deduplication\n* `sync` - Synchronous (block)"},"force_password_reset":{"type":"boolean","description":"Forces this user to reset their password on next login."},"token_last_reset":{"type":"string","format":"date-time","nullable":true,"description":"Timestamp of the most recent API token reset for this user."},"password_last_reset":{"type":"string","format":"date-time","nullable":true,"description":"Timestamp of the most recent password reset for this user."},"user":{"type":"integer"}},"required":["user"]},"File":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"file":{"type":"string","format":"uri"},"title":{"type":"string","maxLength":100}},"required":["file","id","title"]},"FileRequest":{"type":"object","properties":{"file":{"type":"string","format":"binary"},"title":{"type":"string","minLength":1,"maxLength":100}},"required":["file","title"]},"Finding":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"mitigated":{"type":"string","format":"date-time","nullable":true},"mitigated_by":{"type":"integer","nullable":true},"request_response":{"allOf":[{"$ref":"#/components/schemas/BurpRawRequestResponse"}],"readOnly":true},"accepted_risks":{"type":"array","items":{"$ref":"#/components/schemas/RiskAcceptance"},"readOnly":true},"push_to_jira":{"type":"boolean","default":false},"found_by":{"type":"array","items":{"type":"integer"}},"age":{"type":"integer","readOnly":true},"sla_days_remaining":{"type":"integer","readOnly":true,"nullable":true},"finding_meta":{"type":"array","items":{"$ref":"#/components/schemas/FindingMeta"},"readOnly":true},"related_fields":{"allOf":[{"$ref":"#/components/schemas/FindingRelatedFields"}],"readOnly":true,"nullable":true},"jira_creation":{"type":"string","format":"date-time","readOnly":true,"nullable":true},"jira_change":{"type":"string","format":"date-time","readOnly":true,"nullable":true},"display_status":{"type":"string","readOnly":true},"finding_groups":{"type":"array","items":{"$ref":"#/components/schemas/FindingGroup"},"readOnly":true},"vulnerability_ids":{"type":"array","items":{"$ref":"#/components/schemas/VulnerabilityId"}},"reporter":{"type":"integer"},"endpoints":{"type":"array","items":{"type":"integer"}},"created":{"type":"string","format":"date-time","readOnly":true,"nullable":true,"description":"Time that the object was initially created, and saved to the database"},"updated":{"type":"string","format":"date-time","readOnly":true,"nullable":true,"description":"Time that the object was most recently saved to the database"},"title":{"type":"string","description":"A short description of the flaw.","maxLength":511},"date":{"type":"string","format":"date","description":"The date the flaw was discovered."},"sla_start_date":{"type":"string","format":"date","nullable":true,"description":"(readonly)The date used as start date for SLA calculation. Set by expiring risk acceptances. Empty by default, causing a fallback to 'date'."},"sla_expiration_date":{"type":"string","format":"date","nullable":true,"description":"(readonly)The date SLA expires for this finding. Empty by default, causing a fallback to 'date'."},"cwe":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true,"description":"The CWE number associated with this flaw."},"epss_score":{"type":"number","format":"double","maximum":1.0,"minimum":0.0,"nullable":true,"description":"EPSS score for the CVE. Describes how likely it is the vulnerability will be exploited in the next 30 days."},"epss_percentile":{"type":"number","format":"double","maximum":1.0,"minimum":0.0,"nullable":true,"description":"EPSS percentile for the CVE. Describes how many CVEs are scored at or below this one."},"known_exploited":{"type":"boolean","description":"Whether this vulnerability is known to have been exploited in the wild."},"ransomware_used":{"type":"boolean","title":"Used in Ransomware","description":"Whether this vulnerability is known to have been leveraged as part of a ransomware campaign."},"kev_date":{"type":"string","format":"date","nullable":true,"title":"KEV Date Added","description":"The date the vulnerability was added to the KEV catalog."},"cvssv3":{"type":"string","nullable":true,"title":"CVSS3 Vector","description":"Common Vulnerability Scoring System version 3 (CVSS3) score associated with this finding.","maxLength":117},"cvssv3_score":{"type":"number","format":"double","maximum":10.0,"minimum":0.0,"nullable":true,"title":"CVSS3 Score","description":"Numerical CVSSv3 score for the vulnerability. If the vector is given, the score is updated while saving the finding. The value must be between 0-10."},"cvssv4":{"type":"string","nullable":true,"title":"CVSS4 vector","description":"Common Vulnerability Scoring System version 4 (CVSS4) score associated with this finding.","maxLength":255},"cvssv4_score":{"type":"number","format":"double","maximum":10.0,"minimum":0.0,"nullable":true,"description":"Numerical CVSSv4 score for the vulnerability. If the vector is given, the score is updated while saving the finding. The value must be between 0-10."},"url":{"type":"string","readOnly":true,"nullable":true,"description":"External reference that provides more information about this flaw."},"severity":{"type":"string","description":"The severity level of this flaw (Critical, High, Medium, Low, Info).","maxLength":200},"description":{"type":"string","description":"Longer more descriptive information about the flaw."},"mitigation":{"type":"string","nullable":true,"description":"Text describing how to best fix the flaw."},"fix_available":{"type":"boolean","nullable":true,"description":"Denotes if there is a fix available for this flaw."},"fix_version":{"type":"string","nullable":true,"description":"Version of the affected component in which the flaw is fixed.","maxLength":100},"impact":{"type":"string","nullable":true,"description":"Text describing the impact this flaw has on systems, products, enterprise, etc."},"steps_to_reproduce":{"type":"string","nullable":true,"description":"Text describing the steps that must be followed in order to reproduce the flaw / bug."},"severity_justification":{"type":"string","nullable":true,"description":"Text describing why a certain severity was associated with this flaw."},"references":{"type":"string","nullable":true,"description":"The external documentation available for this flaw."},"active":{"type":"boolean","description":"Denotes if this flaw is active or not."},"verified":{"type":"boolean","description":"Denotes if this flaw has been manually verified by the tester."},"false_p":{"type":"boolean","title":"False Positive","description":"Denotes if this flaw has been deemed a false positive by the tester."},"duplicate":{"type":"boolean","description":"Denotes if this flaw is a duplicate of other flaws reported."},"out_of_scope":{"type":"boolean","description":"Denotes if this flaw falls outside the scope of the test and/or engagement."},"risk_accepted":{"type":"boolean","description":"Denotes if this finding has been marked as an accepted risk."},"under_review":{"type":"boolean","description":"Denotes is this flaw is currently being reviewed."},"last_status_update":{"type":"string","format":"date-time","readOnly":true,"nullable":true,"description":"Timestamp of latest status update (change in status related fields)."},"under_defect_review":{"type":"boolean","description":"Denotes if this finding is under defect review."},"is_mitigated":{"type":"boolean","description":"Denotes if this flaw has been fixed."},"thread_id":{"type":"integer","readOnly":true},"numerical_severity":{"type":"string","description":"The numerical representation of the severity (S0, S1, S2, S3, S4).","maxLength":4},"last_reviewed":{"type":"string","format":"date-time","readOnly":true,"nullable":true,"description":"Provides the date the flaw was last 'touched' by a tester."},"param":{"type":"string","readOnly":true,"nullable":true,"title":"Parameter","description":"Parameter used to trigger the issue (DAST)."},"payload":{"type":"string","readOnly":true,"nullable":true,"description":"Payload used to attack the service / application and trigger the bug / problem."},"hash_code":{"type":"string","readOnly":true,"nullable":true,"description":"A hash over a configurable set of fields that is used for findings deduplication."},"line":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true,"title":"Line number","description":"Source line number of the attack vector."},"file_path":{"type":"string","nullable":true,"description":"Identified file(s) containing the flaw.","maxLength":4000},"component_name":{"type":"string","nullable":true,"description":"Name of the affected component (library name, part of a system, ...).","maxLength":500},"component_version":{"type":"string","nullable":true,"description":"Version of the affected component.","maxLength":100},"static_finding":{"type":"boolean","title":"Static finding (SAST)","description":"Flaw has been detected from a Static Application Security Testing tool (SAST)."},"dynamic_finding":{"type":"boolean","title":"Dynamic finding (DAST)","description":"Flaw has been detected from a Dynamic Application Security Testing tool (DAST)."},"scanner_confidence":{"type":"integer","readOnly":true,"nullable":true,"description":"Confidence level of vulnerability which is supplied by the scanner."},"unique_id_from_tool":{"type":"string","nullable":true,"description":"Vulnerability technical id from the source tool. Allows to track unique vulnerabilities over time across subsequent scans.","maxLength":500},"vuln_id_from_tool":{"type":"string","nullable":true,"title":"Vulnerability ID from tool","description":"Non-unique technical id from the source tool associated with the vulnerability type.","maxLength":500},"sast_source_object":{"type":"string","nullable":true,"description":"Source object (variable, function...) of the attack vector.","maxLength":500},"sast_sink_object":{"type":"string","nullable":true,"description":"Sink object (variable, function...) of the attack vector.","maxLength":500},"sast_source_line":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true,"title":"SAST Source Line number","description":"Source line number of the attack vector."},"sast_source_file_path":{"type":"string","nullable":true,"description":"Source file path of the attack vector.","maxLength":4000},"nb_occurences":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true,"title":"Number of occurences","description":"Number of occurences in the source tool when several vulnerabilites were found and aggregated by the scanner."},"publish_date":{"type":"string","format":"date","nullable":true,"description":"Date when this vulnerability was made publicly available."},"service":{"type":"string","nullable":true,"description":"A service is a self-contained piece of functionality within a Product. This is an optional field which is used in deduplication of findings when set.","maxLength":200},"planned_remediation_date":{"type":"string","format":"date","nullable":true,"description":"The date the flaw is expected to be remediated."},"planned_remediation_version":{"type":"string","nullable":true,"description":"The target version when the vulnerability should be fixed / remediated","maxLength":99},"effort_for_fixing":{"type":"string","nullable":true,"description":"Effort for fixing / remediating the vulnerability (Low, Medium, High)","maxLength":99},"test":{"type":"integer","readOnly":true,"description":"The test that is associated with this flaw."},"duplicate_finding":{"type":"integer","readOnly":true,"nullable":true,"description":"Link to the original finding if this finding is a duplicate."},"review_requested_by":{"type":"integer","nullable":true,"description":"Documents who requested a review for this finding."},"defect_review_requested_by":{"type":"integer","nullable":true,"description":"Documents who requested a defect review for this flaw."},"last_reviewed_by":{"type":"integer","readOnly":true,"nullable":true,"description":"Provides the person who last reviewed the flaw."},"sonarqube_issue":{"type":"integer","nullable":true,"description":"The SonarQube issue associated with this finding."},"reviewers":{"type":"array","items":{"type":"integer"},"description":"Documents who reviewed the flaw."},"notes":{"type":"array","items":{"$ref":"#/components/schemas/Note"},"readOnly":true},"files":{"type":"array","items":{"type":"integer"},"readOnly":true,"description":"Files(s) related to the flaw."},"tags":{"type":"array","items":{"type":"string"}}},"required":["accepted_risks","age","created","description","display_status","duplicate_finding","files","finding_groups","finding_meta","found_by","hash_code","id","jira_change","jira_creation","last_reviewed","last_reviewed_by","last_status_update","notes","numerical_severity","param","payload","related_fields","request_response","scanner_confidence","severity","sla_days_remaining","test","thread_id","title","updated","url"]},"FindingClose":{"type":"object","properties":{"is_mitigated":{"type":"boolean"},"mitigated":{"type":"string","format":"date-time"},"false_p":{"type":"boolean"},"out_of_scope":{"type":"boolean"},"duplicate":{"type":"boolean"},"mitigated_by":{"type":"integer","nullable":true},"note":{"type":"string"},"note_type":{"type":"integer","nullable":true}}},"FindingCloseRequest":{"type":"object","properties":{"is_mitigated":{"type":"boolean"},"mitigated":{"type":"string","format":"date-time"},"false_p":{"type":"boolean"},"out_of_scope":{"type":"boolean"},"duplicate":{"type":"boolean"},"mitigated_by":{"type":"integer","nullable":true},"note":{"type":"string"},"note_type":{"type":"integer","nullable":true}}},"FindingCreate":{"type":"object","description":"Base serializer for all models.","properties":{"id":{"type":"integer","readOnly":true},"mitigated":{"type":"string","format":"date-time","nullable":true},"mitigated_by":{"type":"integer","nullable":true},"notes":{"type":"array","items":{"type":"integer","nullable":true},"readOnly":true},"test":{"type":"integer"},"thread_id":{"type":"integer","default":0},"found_by":{"type":"array","items":{"type":"integer"}},"url":{"type":"string","nullable":true},"push_to_jira":{"type":"boolean","default":false},"vulnerability_ids":{"type":"array","items":{"$ref":"#/components/schemas/VulnerabilityId"}},"reporter":{"type":"integer"},"priority":{"type":"number","format":"double","minimum":0,"nullable":true,"description":"The priority in which a finding should be considered for mitigation next"},"risk":{"enum":["Low","Medium","Needs Action","Urgent",null],"type":"string","x-spec-enum-id":"c09ae27af59e77a8","nullable":true,"description":"The risk score in which a finding poses to the system it was discovered on\n\n* `Low` - Low\n* `Medium` - Medium\n* `Needs Action` - Needs Action\n* `Urgent` - Urgent"},"overridden_priority_risk_calculation":{"type":"boolean","default":false,"description":"Dictates whether this object has had its priority/risk calculation manually overridden. If true, the priority and risk values will not be automatically recalculated again until this setting is set to false."},"owners":{"type":"integer","nullable":true,"description":"The group of users responsible for this finding (Dojo_Group ID)."},"mitigation_policy":{"type":"integer","nullable":true,"description":"The standardized mitigation policy for this finding"},"push_to_integrator":{"type":"boolean","default":false,"description":"Dictates whether this object will be dispatched to the associated integrator, and override the configured setting that decides if the object should be pushed or not."},"endpoints":{"type":"array","items":{"type":"integer"}},"endpoints_to_add":{"type":"string","nullable":true,"description":"A space deliminated list of endpoints that will be added to this Finding."},"created":{"type":"string","format":"date-time","readOnly":true,"nullable":true,"description":"Time that the object was initially created, and saved to the database"},"updated":{"type":"string","format":"date-time","readOnly":true,"nullable":true,"description":"Time that the object was most recently saved to the database"},"title":{"type":"string","description":"A short description of the flaw.","maxLength":511},"date":{"type":"string","format":"date","description":"The date the flaw was discovered."},"sla_start_date":{"type":"string","format":"date","nullable":true,"description":"(readonly)The date used as start date for SLA calculation. Set by expiring risk acceptances. Empty by default, causing a fallback to 'date'."},"sla_expiration_date":{"type":"string","format":"date","nullable":true,"description":"(readonly)The date SLA expires for this finding. Empty by default, causing a fallback to 'date'."},"cwe":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true,"description":"The CWE number associated with this flaw."},"epss_score":{"type":"number","format":"double","maximum":1.0,"minimum":0.0,"nullable":true,"description":"EPSS score for the CVE. Describes how likely it is the vulnerability will be exploited in the next 30 days."},"epss_percentile":{"type":"number","format":"double","maximum":1.0,"minimum":0.0,"nullable":true,"description":"EPSS percentile for the CVE. Describes how many CVEs are scored at or below this one."},"known_exploited":{"type":"boolean","description":"Whether this vulnerability is known to have been exploited in the wild."},"ransomware_used":{"type":"boolean","title":"Used in Ransomware","description":"Whether this vulnerability is known to have been leveraged as part of a ransomware campaign."},"kev_date":{"type":"string","format":"date","nullable":true,"title":"KEV Date Added","description":"The date the vulnerability was added to the KEV catalog."},"cvssv3":{"type":"string","nullable":true,"title":"CVSS3 Vector","description":"Common Vulnerability Scoring System version 3 (CVSS3) score associated with this finding.","maxLength":117},"cvssv3_score":{"type":"number","format":"double","maximum":10.0,"minimum":0.0,"nullable":true,"title":"CVSS3 Score","description":"Numerical CVSSv3 score for the vulnerability. If the vector is given, the score is updated while saving the finding. The value must be between 0-10."},"cvssv4":{"type":"string","nullable":true,"title":"CVSS4 vector","description":"Common Vulnerability Scoring System version 4 (CVSS4) score associated with this finding.","maxLength":255},"cvssv4_score":{"type":"number","format":"double","maximum":10.0,"minimum":0.0,"nullable":true,"description":"Numerical CVSSv4 score for the vulnerability. If the vector is given, the score is updated while saving the finding. The value must be between 0-10."},"severity":{"type":"string","description":"The severity level of this flaw (Critical, High, Medium, Low, Info).","maxLength":200},"description":{"type":"string","description":"Longer more descriptive information about the flaw."},"mitigation":{"type":"string","nullable":true,"description":"Text describing how to best fix the flaw."},"fix_available":{"type":"boolean","nullable":true,"description":"Denotes if there is a fix available for this flaw."},"fix_version":{"type":"string","nullable":true,"description":"Version of the affected component in which the flaw is fixed.","maxLength":100},"impact":{"type":"string","nullable":true,"description":"Text describing the impact this flaw has on systems, products, enterprise, etc."},"steps_to_reproduce":{"type":"string","nullable":true,"description":"Text describing the steps that must be followed in order to reproduce the flaw / bug."},"severity_justification":{"type":"string","nullable":true,"description":"Text describing why a certain severity was associated with this flaw."},"references":{"type":"string","nullable":true,"description":"The external documentation available for this flaw."},"active":{"type":"boolean","description":"Denotes if this flaw is active or not."},"verified":{"type":"boolean","description":"Denotes if this flaw has been manually verified by the tester."},"false_p":{"type":"boolean","title":"False Positive","description":"Denotes if this flaw has been deemed a false positive by the tester."},"duplicate":{"type":"boolean","description":"Denotes if this flaw is a duplicate of other flaws reported."},"out_of_scope":{"type":"boolean","description":"Denotes if this flaw falls outside the scope of the test and/or engagement."},"risk_accepted":{"type":"boolean","description":"Denotes if this finding has been marked as an accepted risk."},"under_review":{"type":"boolean","description":"Denotes is this flaw is currently being reviewed."},"last_status_update":{"type":"string","format":"date-time","readOnly":true,"nullable":true,"description":"Timestamp of latest status update (change in status related fields)."},"under_defect_review":{"type":"boolean","description":"Denotes if this finding is under defect review."},"is_mitigated":{"type":"boolean","description":"Denotes if this flaw has been fixed."},"numerical_severity":{"type":"string","description":"The numerical representation of the severity (S0, S1, S2, S3, S4).","maxLength":4},"last_reviewed":{"type":"string","format":"date-time","readOnly":true,"nullable":true,"description":"Provides the date the flaw was last 'touched' by a tester."},"param":{"type":"string","readOnly":true,"nullable":true,"title":"Parameter","description":"Parameter used to trigger the issue (DAST)."},"payload":{"type":"string","readOnly":true,"nullable":true,"description":"Payload used to attack the service / application and trigger the bug / problem."},"hash_code":{"type":"string","readOnly":true,"nullable":true,"description":"A hash over a configurable set of fields that is used for findings deduplication."},"line":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true,"title":"Line number","description":"Source line number of the attack vector."},"file_path":{"type":"string","nullable":true,"description":"Identified file(s) containing the flaw.","maxLength":4000},"component_name":{"type":"string","nullable":true,"description":"Name of the affected component (library name, part of a system, ...).","maxLength":500},"component_version":{"type":"string","nullable":true,"description":"Version of the affected component.","maxLength":100},"static_finding":{"type":"boolean","title":"Static finding (SAST)","description":"Flaw has been detected from a Static Application Security Testing tool (SAST)."},"dynamic_finding":{"type":"boolean","title":"Dynamic finding (DAST)","description":"Flaw has been detected from a Dynamic Application Security Testing tool (DAST)."},"scanner_confidence":{"type":"integer","readOnly":true,"nullable":true,"description":"Confidence level of vulnerability which is supplied by the scanner."},"unique_id_from_tool":{"type":"string","nullable":true,"description":"Vulnerability technical id from the source tool. Allows to track unique vulnerabilities over time across subsequent scans.","maxLength":500},"vuln_id_from_tool":{"type":"string","nullable":true,"title":"Vulnerability ID from tool","description":"Non-unique technical id from the source tool associated with the vulnerability type.","maxLength":500},"sast_source_object":{"type":"string","nullable":true,"description":"Source object (variable, function...) of the attack vector.","maxLength":500},"sast_sink_object":{"type":"string","nullable":true,"description":"Sink object (variable, function...) of the attack vector.","maxLength":500},"sast_source_line":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true,"title":"SAST Source Line number","description":"Source line number of the attack vector."},"sast_source_file_path":{"type":"string","nullable":true,"description":"Source file path of the attack vector.","maxLength":4000},"nb_occurences":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true,"title":"Number of occurences","description":"Number of occurences in the source tool when several vulnerabilites were found and aggregated by the scanner."},"publish_date":{"type":"string","format":"date","nullable":true,"description":"Date when this vulnerability was made publicly available."},"service":{"type":"string","nullable":true,"description":"A service is a self-contained piece of functionality within a Product. This is an optional field which is used in deduplication of findings when set.","maxLength":200},"planned_remediation_date":{"type":"string","format":"date","nullable":true,"description":"The date the flaw is expected to be remediated."},"planned_remediation_version":{"type":"string","nullable":true,"description":"The target version when the vulnerability should be fixed / remediated","maxLength":99},"effort_for_fixing":{"type":"string","nullable":true,"description":"Effort for fixing / remediating the vulnerability (Low, Medium, High)","maxLength":99},"duplicate_finding":{"type":"integer","readOnly":true,"nullable":true,"description":"Link to the original finding if this finding is a duplicate."},"review_requested_by":{"type":"integer","nullable":true,"description":"Documents who requested a review for this finding."},"defect_review_requested_by":{"type":"integer","nullable":true,"description":"Documents who requested a defect review for this flaw."},"last_reviewed_by":{"type":"integer","readOnly":true,"nullable":true,"description":"Provides the person who last reviewed the flaw."},"sonarqube_issue":{"type":"integer","nullable":true,"description":"The SonarQube issue associated with this finding."},"reviewers":{"type":"array","items":{"type":"integer"},"description":"Documents who reviewed the flaw."},"files":{"type":"array","items":{"type":"integer"},"readOnly":true,"description":"Files(s) related to the flaw."},"tags":{"type":"array","items":{"type":"string"}}},"required":["active","created","description","duplicate_finding","files","found_by","hash_code","id","last_reviewed","last_reviewed_by","last_status_update","notes","numerical_severity","param","payload","scanner_confidence","severity","test","title","updated","verified"]},"FindingCreateRequest":{"type":"object","description":"Base serializer for all models.","properties":{"mitigated":{"type":"string","format":"date-time","nullable":true},"mitigated_by":{"type":"integer","nullable":true},"test":{"type":"integer"},"thread_id":{"type":"integer","default":0},"found_by":{"type":"array","items":{"type":"integer"}},"url":{"type":"string","nullable":true,"minLength":1},"push_to_jira":{"type":"boolean","default":false},"vulnerability_ids":{"type":"array","items":{"$ref":"#/components/schemas/VulnerabilityIdRequest"}},"reporter":{"type":"integer"},"priority":{"type":"number","format":"double","minimum":0,"nullable":true,"description":"The priority in which a finding should be considered for mitigation next"},"risk":{"enum":["Low","Medium","Needs Action","Urgent",null],"type":"string","x-spec-enum-id":"c09ae27af59e77a8","nullable":true,"description":"The risk score in which a finding poses to the system it was discovered on\n\n* `Low` - Low\n* `Medium` - Medium\n* `Needs Action` - Needs Action\n* `Urgent` - Urgent"},"overridden_priority_risk_calculation":{"type":"boolean","default":false,"description":"Dictates whether this object has had its priority/risk calculation manually overridden. If true, the priority and risk values will not be automatically recalculated again until this setting is set to false."},"owners":{"type":"integer","nullable":true,"description":"The group of users responsible for this finding (Dojo_Group ID)."},"mitigation_policy":{"type":"integer","nullable":true,"description":"The standardized mitigation policy for this finding"},"push_to_integrator":{"type":"boolean","default":false,"description":"Dictates whether this object will be dispatched to the associated integrator, and override the configured setting that decides if the object should be pushed or not."},"endpoints":{"type":"array","items":{"type":"integer"}},"endpoints_to_add":{"type":"string","nullable":true,"minLength":1,"description":"A space deliminated list of endpoints that will be added to this Finding."},"title":{"type":"string","minLength":1,"description":"A short description of the flaw.","maxLength":511},"date":{"type":"string","format":"date","description":"The date the flaw was discovered."},"sla_start_date":{"type":"string","format":"date","nullable":true,"description":"(readonly)The date used as start date for SLA calculation. Set by expiring risk acceptances. Empty by default, causing a fallback to 'date'."},"sla_expiration_date":{"type":"string","format":"date","nullable":true,"description":"(readonly)The date SLA expires for this finding. Empty by default, causing a fallback to 'date'."},"cwe":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true,"description":"The CWE number associated with this flaw."},"epss_score":{"type":"number","format":"double","maximum":1.0,"minimum":0.0,"nullable":true,"description":"EPSS score for the CVE. Describes how likely it is the vulnerability will be exploited in the next 30 days."},"epss_percentile":{"type":"number","format":"double","maximum":1.0,"minimum":0.0,"nullable":true,"description":"EPSS percentile for the CVE. Describes how many CVEs are scored at or below this one."},"known_exploited":{"type":"boolean","description":"Whether this vulnerability is known to have been exploited in the wild."},"ransomware_used":{"type":"boolean","title":"Used in Ransomware","description":"Whether this vulnerability is known to have been leveraged as part of a ransomware campaign."},"kev_date":{"type":"string","format":"date","nullable":true,"title":"KEV Date Added","description":"The date the vulnerability was added to the KEV catalog."},"cvssv3":{"type":"string","nullable":true,"minLength":1,"title":"CVSS3 Vector","description":"Common Vulnerability Scoring System version 3 (CVSS3) score associated with this finding.","maxLength":117},"cvssv3_score":{"type":"number","format":"double","maximum":10.0,"minimum":0.0,"nullable":true,"title":"CVSS3 Score","description":"Numerical CVSSv3 score for the vulnerability. If the vector is given, the score is updated while saving the finding. The value must be between 0-10."},"cvssv4":{"type":"string","nullable":true,"minLength":1,"title":"CVSS4 vector","description":"Common Vulnerability Scoring System version 4 (CVSS4) score associated with this finding.","maxLength":255},"cvssv4_score":{"type":"number","format":"double","maximum":10.0,"minimum":0.0,"nullable":true,"description":"Numerical CVSSv4 score for the vulnerability. If the vector is given, the score is updated while saving the finding. The value must be between 0-10."},"severity":{"type":"string","minLength":1,"description":"The severity level of this flaw (Critical, High, Medium, Low, Info).","maxLength":200},"description":{"type":"string","minLength":1,"description":"Longer more descriptive information about the flaw."},"mitigation":{"type":"string","nullable":true,"description":"Text describing how to best fix the flaw."},"fix_available":{"type":"boolean","nullable":true,"description":"Denotes if there is a fix available for this flaw."},"fix_version":{"type":"string","nullable":true,"description":"Version of the affected component in which the flaw is fixed.","maxLength":100},"impact":{"type":"string","nullable":true,"description":"Text describing the impact this flaw has on systems, products, enterprise, etc."},"steps_to_reproduce":{"type":"string","nullable":true,"description":"Text describing the steps that must be followed in order to reproduce the flaw / bug."},"severity_justification":{"type":"string","nullable":true,"description":"Text describing why a certain severity was associated with this flaw."},"references":{"type":"string","nullable":true,"description":"The external documentation available for this flaw."},"active":{"type":"boolean","description":"Denotes if this flaw is active or not."},"verified":{"type":"boolean","description":"Denotes if this flaw has been manually verified by the tester."},"false_p":{"type":"boolean","title":"False Positive","description":"Denotes if this flaw has been deemed a false positive by the tester."},"duplicate":{"type":"boolean","description":"Denotes if this flaw is a duplicate of other flaws reported."},"out_of_scope":{"type":"boolean","description":"Denotes if this flaw falls outside the scope of the test and/or engagement."},"risk_accepted":{"type":"boolean","description":"Denotes if this finding has been marked as an accepted risk."},"under_review":{"type":"boolean","description":"Denotes is this flaw is currently being reviewed."},"under_defect_review":{"type":"boolean","description":"Denotes if this finding is under defect review."},"is_mitigated":{"type":"boolean","description":"Denotes if this flaw has been fixed."},"numerical_severity":{"type":"string","minLength":1,"description":"The numerical representation of the severity (S0, S1, S2, S3, S4).","maxLength":4},"line":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true,"title":"Line number","description":"Source line number of the attack vector."},"file_path":{"type":"string","nullable":true,"description":"Identified file(s) containing the flaw.","maxLength":4000},"component_name":{"type":"string","nullable":true,"description":"Name of the affected component (library name, part of a system, ...).","maxLength":500},"component_version":{"type":"string","nullable":true,"description":"Version of the affected component.","maxLength":100},"static_finding":{"type":"boolean","title":"Static finding (SAST)","description":"Flaw has been detected from a Static Application Security Testing tool (SAST)."},"dynamic_finding":{"type":"boolean","title":"Dynamic finding (DAST)","description":"Flaw has been detected from a Dynamic Application Security Testing tool (DAST)."},"unique_id_from_tool":{"type":"string","nullable":true,"description":"Vulnerability technical id from the source tool. Allows to track unique vulnerabilities over time across subsequent scans.","maxLength":500},"vuln_id_from_tool":{"type":"string","nullable":true,"title":"Vulnerability ID from tool","description":"Non-unique technical id from the source tool associated with the vulnerability type.","maxLength":500},"sast_source_object":{"type":"string","nullable":true,"description":"Source object (variable, function...) of the attack vector.","maxLength":500},"sast_sink_object":{"type":"string","nullable":true,"description":"Sink object (variable, function...) of the attack vector.","maxLength":500},"sast_source_line":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true,"title":"SAST Source Line number","description":"Source line number of the attack vector."},"sast_source_file_path":{"type":"string","nullable":true,"description":"Source file path of the attack vector.","maxLength":4000},"nb_occurences":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true,"title":"Number of occurences","description":"Number of occurences in the source tool when several vulnerabilites were found and aggregated by the scanner."},"publish_date":{"type":"string","format":"date","nullable":true,"description":"Date when this vulnerability was made publicly available."},"service":{"type":"string","nullable":true,"description":"A service is a self-contained piece of functionality within a Product. This is an optional field which is used in deduplication of findings when set.","maxLength":200},"planned_remediation_date":{"type":"string","format":"date","nullable":true,"description":"The date the flaw is expected to be remediated."},"planned_remediation_version":{"type":"string","nullable":true,"description":"The target version when the vulnerability should be fixed / remediated","maxLength":99},"effort_for_fixing":{"type":"string","nullable":true,"description":"Effort for fixing / remediating the vulnerability (Low, Medium, High)","maxLength":99},"review_requested_by":{"type":"integer","nullable":true,"description":"Documents who requested a review for this finding."},"defect_review_requested_by":{"type":"integer","nullable":true,"description":"Documents who requested a defect review for this flaw."},"sonarqube_issue":{"type":"integer","nullable":true,"description":"The SonarQube issue associated with this finding."},"reviewers":{"type":"array","items":{"type":"integer"},"description":"Documents who reviewed the flaw."},"tags":{"type":"array","items":{"type":"string","minLength":1}}},"required":["active","description","found_by","numerical_severity","severity","test","title","verified"]},"FindingDiff":{"type":"object","properties":{"equal":{"type":"boolean"},"status":{"type":"string","description":"Possible values:\n- `improvement` (Improvement): The comparison object contains a strict subset of the findings. This indicates an overall improvement with fewer findings present.\n- `regression` (Regression): The comparison object contains a strict superset of the findings. This indicates a regression with additional findings introduced.\n- `mixed` (Mixed changes): Some findings were added while others were removed. The overall change cannot be classified as purely positive or negative.\n- `unknown` (No change / Unknown): Both objects contain exactly the same findings. No improvement or regression can be determined."},"new_in_other":{"type":"array","items":{"$ref":"#/components/schemas/FindingMinimal"}},"removed_from_other":{"type":"array","items":{"$ref":"#/components/schemas/FindingMinimal"}}},"required":["equal","new_in_other","removed_from_other","status"]},"FindingEngagement":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"name":{"type":"string","nullable":true,"maxLength":300},"description":{"type":"string","nullable":true,"maxLength":2000},"product":{"$ref":"#/components/schemas/FindingProduct"},"target_start":{"type":"string","format":"date"},"target_end":{"type":"string","format":"date"},"branch_tag":{"type":"string","nullable":true,"title":"Branch/Tag","description":"Tag or branch of the product the engagement tested.","maxLength":150},"engagement_type":{"enum":["Interactive","CI/CD",null],"type":"string","description":"* `Interactive` - Interactive\n* `CI/CD` - CI/CD","x-spec-enum-id":"531df25eeddb1f62","nullable":true},"build_id":{"type":"string","nullable":true,"description":"Build ID of the product the engagement tested.","maxLength":150},"commit_hash":{"type":"string","nullable":true,"description":"Commit hash from repo","maxLength":150},"version":{"type":"string","nullable":true,"description":"Version of the product the engagement tested.","maxLength":100},"created":{"type":"string","format":"date-time","readOnly":true,"nullable":true,"description":"Time that the object was initially created, and saved to the database"},"updated":{"type":"string","format":"date-time","readOnly":true,"nullable":true,"description":"Time that the object was most recently saved to the database"}},"required":["created","id","target_end","target_start","updated"]},"FindingEnvironment":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"name":{"type":"string","maxLength":200}},"required":["id","name"]},"FindingGroup":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"name":{"type":"string","maxLength":255},"test":{"type":"integer"},"jira_issue":{"allOf":[{"$ref":"#/components/schemas/JIRAIssue"}],"readOnly":true,"nullable":true}},"required":["id","jira_issue","name","test"]},"FindingGroupRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":255},"test":{"type":"integer"}},"required":["name","test"]},"FindingMergeRequest":{"type":"object","description":"Request body for merging two or more findings into a single destination finding via the\npublic API (``POST /api/v2/findings/merge/``). The destination finding is kept and absorbs\nthe selected data from the source findings, which are then either marked inactive or deleted.","properties":{"source_finding_ids":{"type":"array","items":{"type":"integer"},"description":"IDs of the findings to merge into the destination finding. Provide two or more IDs. Every source finding must belong to the same product as the destination finding. If the destination finding ID is included here it is ignored."},"destination_finding_id":{"type":"integer","description":"ID of the finding that is kept and that the source findings are merged into. Selected data from the source findings is copied onto this finding."},"post_merge_action":{"enum":["inactive","deleted"],"type":"string","x-spec-enum-id":"f174dc7373f6f702","description":"What happens to the source findings after the merge: 'inactive' keeps them but marks them inactive; 'deleted' permanently removes them.\n\n* `inactive` - Mark the source findings as inactive (they remain in the database)\n* `deleted` - Permanently delete the source findings"},"destination_tags":{"type":"array","items":{"type":"string","minLength":1},"description":"Tags to add to the destination finding after the merge."},"merged_tags":{"type":"array","items":{"type":"string","minLength":1},"description":"Tags to add to each source finding. Only applied when post_merge_action is 'inactive', since deleted findings cannot be tagged."},"add_endpoints":{"type":"boolean","default":false,"description":"Copy the endpoints from every source finding onto the destination finding."},"append_description":{"type":"boolean","default":false,"description":"Append each source finding's description (and file path, when set) to the destination finding's description."},"append_references":{"type":"boolean","default":false,"description":"Append each source finding's references to the destination finding's references."},"append_dynamic_scanner_raw_requests":{"type":"boolean","default":false,"description":"Move dynamic-scanner (Burp) raw request/response pairs from the source findings to the destination finding."},"append_vulnerability_ids":{"type":"boolean","default":false,"description":"Copy the vulnerability IDs (e.g. CVEs) from the source findings onto the destination finding."},"append_tags":{"type":"boolean","default":false,"description":"Copy the tags from every source finding onto the destination finding."}},"required":["destination_finding_id","post_merge_action","source_finding_ids"]},"FindingMergeResponse":{"type":"object","description":"Response body returned by ``POST /api/v2/findings/merge/``.","properties":{"destination_finding_id":{"type":"integer","description":"ID of the destination finding that the source findings were merged into."}},"required":["destination_finding_id"]},"FindingMeta":{"type":"object","properties":{"name":{"type":"string","maxLength":120},"value":{"type":"string","maxLength":300}},"required":["name","value"]},"FindingMetaRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120},"value":{"type":"string","minLength":1,"maxLength":300}},"required":["name","value"]},"FindingMinimal":{"type":"object","properties":{"id":{"type":"integer"},"title":{"type":"string"},"hash_code":{"type":"string"},"severity":{"type":"string"},"file_path":{"type":"string","nullable":true},"line":{"type":"integer","nullable":true},"cwe":{"type":"integer","nullable":true},"test_type_name":{"type":"string","nullable":true},"priority":{"type":"number","format":"double","nullable":true},"risk":{"type":"string","nullable":true}},"required":["cwe","file_path","hash_code","id","line","priority","risk","severity","test_type_name","title"]},"FindingPreviewItem":{"type":"object","properties":{"title":{"type":"string"},"severity":{"type":"string"},"description":{"type":"string"},"mitigation":{"type":"string","nullable":true},"vulnerability_ids":{"type":"array","items":{"type":"string"}}},"required":["description","mitigation","severity","title","vulnerability_ids"]},"FindingProdType":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"name":{"type":"string","maxLength":255}},"required":["id","name"]},"FindingProduct":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"name":{"type":"string","maxLength":255},"prod_type":{"$ref":"#/components/schemas/FindingProdType"}},"required":["id","name"]},"FindingRelatedFields":{"type":"object","properties":{"test":{"allOf":[{"$ref":"#/components/schemas/FindingTest"}],"readOnly":true},"jira":{"allOf":[{"$ref":"#/components/schemas/JIRAIssue"}],"readOnly":true}},"required":["jira","test"]},"FindingTemplate":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"vulnerability_ids":{"type":"array","items":{"type":"string"},"readOnly":true},"endpoints":{"type":"array","items":{"type":"string"},"readOnly":true},"title":{"type":"string","maxLength":1000},"cwe":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true},"cvssv3":{"type":"string","nullable":true,"title":"CVSS v3 vector","description":"Common Vulnerability Scoring System version 3 (CVSSv3) score associated with this finding.","maxLength":117},"cvssv3_score":{"type":"number","format":"double","nullable":true,"description":"CVSSv3 score"},"cvssv4":{"type":"string","nullable":true,"title":"CVSS4 vector","description":"Common Vulnerability Scoring System version 4 (CVSS4) score associated with this finding.","maxLength":255},"cvssv4_score":{"type":"number","format":"double","nullable":true,"description":"CVSSv4 score"},"severity":{"type":"string","nullable":true,"maxLength":200},"description":{"type":"string","nullable":true},"mitigation":{"type":"string","nullable":true},"impact":{"type":"string","nullable":true},"references":{"type":"string","nullable":true},"last_used":{"type":"string","format":"date-time","readOnly":true,"nullable":true},"numerical_severity":{"type":"string","readOnly":true,"nullable":true},"fix_available":{"type":"boolean","nullable":true,"description":"Indicates if a fix is available for this vulnerability type"},"fix_version":{"type":"string","nullable":true,"description":"Version where fix is available","maxLength":100},"planned_remediation_version":{"type":"string","nullable":true,"description":"Target version for remediation","maxLength":99},"effort_for_fixing":{"type":"string","nullable":true,"description":"Effort estimate for fixing (e.g., Low/Medium/High)","maxLength":99},"steps_to_reproduce":{"type":"string","nullable":true,"description":"Standard reproduction steps for this vulnerability type"},"severity_justification":{"type":"string","nullable":true,"description":"Explanation of why this severity level is appropriate"},"component_name":{"type":"string","nullable":true,"description":"Affected component name (e.g., library name)","maxLength":500},"component_version":{"type":"string","nullable":true,"description":"Affected component version","maxLength":100},"notes":{"type":"string","nullable":true,"description":"Note content to add when applying this template"},"endpoints_text":{"type":"string","nullable":true,"description":"Endpoint URLs (one per line)"},"tags":{"type":"array","items":{"type":"string"}}},"required":["endpoints","id","last_used","numerical_severity","title","vulnerability_ids"]},"FindingTemplateRequest":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":1000},"cwe":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true},"cvssv3":{"type":"string","nullable":true,"minLength":1,"title":"CVSS v3 vector","description":"Common Vulnerability Scoring System version 3 (CVSSv3) score associated with this finding.","maxLength":117},"cvssv3_score":{"type":"number","format":"double","nullable":true,"description":"CVSSv3 score"},"cvssv4":{"type":"string","nullable":true,"minLength":1,"title":"CVSS4 vector","description":"Common Vulnerability Scoring System version 4 (CVSS4) score associated with this finding.","maxLength":255},"cvssv4_score":{"type":"number","format":"double","nullable":true,"description":"CVSSv4 score"},"severity":{"type":"string","nullable":true,"maxLength":200},"description":{"type":"string","nullable":true},"mitigation":{"type":"string","nullable":true},"impact":{"type":"string","nullable":true},"references":{"type":"string","nullable":true},"fix_available":{"type":"boolean","nullable":true,"description":"Indicates if a fix is available for this vulnerability type"},"fix_version":{"type":"string","nullable":true,"description":"Version where fix is available","maxLength":100},"planned_remediation_version":{"type":"string","nullable":true,"description":"Target version for remediation","maxLength":99},"effort_for_fixing":{"type":"string","nullable":true,"description":"Effort estimate for fixing (e.g., Low/Medium/High)","maxLength":99},"steps_to_reproduce":{"type":"string","nullable":true,"description":"Standard reproduction steps for this vulnerability type"},"severity_justification":{"type":"string","nullable":true,"description":"Explanation of why this severity level is appropriate"},"component_name":{"type":"string","nullable":true,"description":"Affected component name (e.g., library name)","maxLength":500},"component_version":{"type":"string","nullable":true,"description":"Affected component version","maxLength":100},"notes":{"type":"string","nullable":true,"description":"Note content to add when applying this template"},"endpoints_text":{"type":"string","nullable":true,"description":"Endpoint URLs (one per line)"},"tags":{"type":"array","items":{"type":"string","minLength":1}}},"required":["title"]},"FindingTest":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"title":{"type":"string","nullable":true,"maxLength":255},"test_type":{"$ref":"#/components/schemas/FindingTestType"},"engagement":{"$ref":"#/components/schemas/FindingEngagement"},"environment":{"$ref":"#/components/schemas/FindingEnvironment"},"branch_tag":{"type":"string","nullable":true,"title":"Branch/Tag","description":"Tag or branch that was tested, a reimport may update this field.","maxLength":150},"build_id":{"type":"string","nullable":true,"description":"Build ID that was tested, a reimport may update this field.","maxLength":150},"commit_hash":{"type":"string","nullable":true,"description":"Commit hash tested, a reimport may update this field.","maxLength":150},"version":{"type":"string","nullable":true,"maxLength":100}},"required":["id"]},"FindingTestType":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"name":{"type":"string","maxLength":200}},"required":["id","name"]},"FindingToFiles":{"type":"object","properties":{"finding_id":{"type":"integer","nullable":true},"files":{"type":"array","items":{"$ref":"#/components/schemas/File"}}},"required":["files","finding_id"]},"FindingToNotes":{"type":"object","properties":{"finding_id":{"type":"integer","nullable":true},"notes":{"type":"array","items":{"$ref":"#/components/schemas/Note"}}},"required":["finding_id","notes"]},"FindingVerifyRequest":{"type":"object","properties":{"note":{"type":"string"},"note_type":{"type":"integer","nullable":true}}},"Findings":{"type":"object","description":"Regression guard for Sentry DJANGO-D2P.\n\nDRF ``ModelSerializer.update()`` calls ``instance.<m2m>.set(new_list)`` for\nevery M2M field present in ``validated_data``, even when the new list is\nidentical to the current one. On tagulous ``TagField``s that triggers a\nfull teardown + re-add of the M2M, which runs SELECT + UPDATE ``count``\nbookkeeping per tag (N+1).\n\nThis mixin short-circuits the ``.set()`` call per ``TagListSerializerField``\nwhen the normalized incoming list equals ``instance.<attr>.get_tag_list()``.\nAll other M2M fields keep the stock DRF behavior.\n\nOpt in by adding ``SkipUnchangedTagsMixin`` to the base-class list of any\nserializer that exposes a ``TagListSerializerField`` for update.","properties":{"id":{"type":"integer","readOnly":true},"mitigated":{"type":"string","format":"date-time","nullable":true},"mitigated_by":{"type":"integer","nullable":true},"request_response":{"allOf":[{"$ref":"#/components/schemas/BurpRawRequestResponse"}],"readOnly":true},"accepted_risks":{"type":"array","items":{"$ref":"#/components/schemas/RiskAcceptance"},"readOnly":true},"push_to_jira":{"type":"boolean","default":false},"found_by":{"type":"array","items":{"type":"integer"}},"age":{"type":"integer","readOnly":true},"sla_days_remaining":{"type":"integer","readOnly":true,"nullable":true},"finding_meta":{"type":"array","items":{"$ref":"#/components/schemas/FindingMeta"},"readOnly":true},"related_fields":{"allOf":[{"$ref":"#/components/schemas/FindingRelatedFields"}],"readOnly":true,"nullable":true},"jira_creation":{"type":"string","format":"date-time","readOnly":true,"nullable":true},"jira_change":{"type":"string","format":"date-time","readOnly":true,"nullable":true},"display_status":{"type":"string","readOnly":true},"finding_groups":{"type":"array","items":{"$ref":"#/components/schemas/FindingGroup"},"readOnly":true},"vulnerability_ids":{"type":"array","items":{"$ref":"#/components/schemas/VulnerabilityId"}},"reporter":{"type":"integer"},"endpoints":{"type":"array","items":{"type":"integer"}},"priority":{"type":"number","format":"double","minimum":0,"nullable":true,"description":"The priority in which a finding should be considered for mitigation next"},"risk":{"enum":["Low","Medium","Needs Action","Urgent",null],"type":"string","x-spec-enum-id":"c09ae27af59e77a8","nullable":true,"description":"The risk score in which a finding poses to the system it was discovered on\n\n* `Low` - Low\n* `Medium` - Medium\n* `Needs Action` - Needs Action\n* `Urgent` - Urgent"},"overridden_priority_risk_calculation":{"type":"boolean","default":false,"description":"Dictates whether this object has had its priority/risk calculation manually overridden. If true, the priority and risk values will not be automatically recalculated again until this setting is set to false."},"owners":{"type":"integer","nullable":true,"description":"The group of users responsible for this finding (Dojo_Group ID)."},"mitigation_policy":{"type":"integer","nullable":true,"description":"The standardized mitigation policy for this finding"},"push_to_integrator":{"type":"boolean","default":false,"description":"Dictates whether this object will be dispatched to the associated integrator, and override the configured setting that decides if the object should be pushed or not."},"endpoints_to_add":{"type":"string","nullable":true,"description":"A space deliminated list of endpoints that will be added to this Finding."},"jira_push_result":{"type":"object","additionalProperties":{},"nullable":true,"readOnly":true},"created":{"type":"string","format":"date-time","readOnly":true,"nullable":true,"description":"Time that the object was initially created, and saved to the database"},"updated":{"type":"string","format":"date-time","readOnly":true,"nullable":true,"description":"Time that the object was most recently saved to the database"},"title":{"type":"string","description":"A short description of the flaw.","maxLength":511},"date":{"type":"string","format":"date","description":"The date the flaw was discovered."},"sla_start_date":{"type":"string","format":"date","nullable":true,"description":"(readonly)The date used as start date for SLA calculation. Set by expiring risk acceptances. Empty by default, causing a fallback to 'date'."},"sla_expiration_date":{"type":"string","format":"date","nullable":true,"description":"(readonly)The date SLA expires for this finding. Empty by default, causing a fallback to 'date'."},"cwe":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true,"description":"The CWE number associated with this flaw."},"epss_score":{"type":"number","format":"double","maximum":1.0,"minimum":0.0,"nullable":true,"description":"EPSS score for the CVE. Describes how likely it is the vulnerability will be exploited in the next 30 days."},"epss_percentile":{"type":"number","format":"double","maximum":1.0,"minimum":0.0,"nullable":true,"description":"EPSS percentile for the CVE. Describes how many CVEs are scored at or below this one."},"known_exploited":{"type":"boolean","description":"Whether this vulnerability is known to have been exploited in the wild."},"ransomware_used":{"type":"boolean","title":"Used in Ransomware","description":"Whether this vulnerability is known to have been leveraged as part of a ransomware campaign."},"kev_date":{"type":"string","format":"date","nullable":true,"title":"KEV Date Added","description":"The date the vulnerability was added to the KEV catalog."},"cvssv3":{"type":"string","nullable":true,"title":"CVSS3 Vector","description":"Common Vulnerability Scoring System version 3 (CVSS3) score associated with this finding.","maxLength":117},"cvssv3_score":{"type":"number","format":"double","maximum":10.0,"minimum":0.0,"nullable":true,"title":"CVSS3 Score","description":"Numerical CVSSv3 score for the vulnerability. If the vector is given, the score is updated while saving the finding. The value must be between 0-10."},"cvssv4":{"type":"string","nullable":true,"title":"CVSS4 vector","description":"Common Vulnerability Scoring System version 4 (CVSS4) score associated with this finding.","maxLength":255},"cvssv4_score":{"type":"number","format":"double","maximum":10.0,"minimum":0.0,"nullable":true,"description":"Numerical CVSSv4 score for the vulnerability. If the vector is given, the score is updated while saving the finding. The value must be between 0-10."},"url":{"type":"string","readOnly":true,"nullable":true,"description":"External reference that provides more information about this flaw."},"severity":{"type":"string","description":"The severity level of this flaw (Critical, High, Medium, Low, Info).","maxLength":200},"description":{"type":"string","description":"Longer more descriptive information about the flaw."},"mitigation":{"type":"string","nullable":true,"description":"Text describing how to best fix the flaw."},"fix_available":{"type":"boolean","nullable":true,"description":"Denotes if there is a fix available for this flaw."},"fix_version":{"type":"string","nullable":true,"description":"Version of the affected component in which the flaw is fixed.","maxLength":100},"impact":{"type":"string","nullable":true,"description":"Text describing the impact this flaw has on systems, products, enterprise, etc."},"steps_to_reproduce":{"type":"string","nullable":true,"description":"Text describing the steps that must be followed in order to reproduce the flaw / bug."},"severity_justification":{"type":"string","nullable":true,"description":"Text describing why a certain severity was associated with this flaw."},"references":{"type":"string","nullable":true,"description":"The external documentation available for this flaw."},"active":{"type":"boolean","description":"Denotes if this flaw is active or not."},"verified":{"type":"boolean","description":"Denotes if this flaw has been manually verified by the tester."},"false_p":{"type":"boolean","title":"False Positive","description":"Denotes if this flaw has been deemed a false positive by the tester."},"duplicate":{"type":"boolean","description":"Denotes if this flaw is a duplicate of other flaws reported."},"out_of_scope":{"type":"boolean","description":"Denotes if this flaw falls outside the scope of the test and/or engagement."},"risk_accepted":{"type":"boolean","description":"Denotes if this finding has been marked as an accepted risk."},"under_review":{"type":"boolean","description":"Denotes is this flaw is currently being reviewed."},"last_status_update":{"type":"string","format":"date-time","readOnly":true,"nullable":true,"description":"Timestamp of latest status update (change in status related fields)."},"under_defect_review":{"type":"boolean","description":"Denotes if this finding is under defect review."},"is_mitigated":{"type":"boolean","description":"Denotes if this flaw has been fixed."},"thread_id":{"type":"integer","readOnly":true},"numerical_severity":{"type":"string","description":"The numerical representation of the severity (S0, S1, S2, S3, S4).","maxLength":4},"last_reviewed":{"type":"string","format":"date-time","readOnly":true,"nullable":true,"description":"Provides the date the flaw was last 'touched' by a tester."},"param":{"type":"string","readOnly":true,"nullable":true,"title":"Parameter","description":"Parameter used to trigger the issue (DAST)."},"payload":{"type":"string","readOnly":true,"nullable":true,"description":"Payload used to attack the service / application and trigger the bug / problem."},"hash_code":{"type":"string","readOnly":true,"nullable":true,"description":"A hash over a configurable set of fields that is used for findings deduplication."},"line":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true,"title":"Line number","description":"Source line number of the attack vector."},"file_path":{"type":"string","nullable":true,"description":"Identified file(s) containing the flaw.","maxLength":4000},"component_name":{"type":"string","nullable":true,"description":"Name of the affected component (library name, part of a system, ...).","maxLength":500},"component_version":{"type":"string","nullable":true,"description":"Version of the affected component.","maxLength":100},"static_finding":{"type":"boolean","title":"Static finding (SAST)","description":"Flaw has been detected from a Static Application Security Testing tool (SAST)."},"dynamic_finding":{"type":"boolean","title":"Dynamic finding (DAST)","description":"Flaw has been detected from a Dynamic Application Security Testing tool (DAST)."},"scanner_confidence":{"type":"integer","readOnly":true,"nullable":true,"description":"Confidence level of vulnerability which is supplied by the scanner."},"unique_id_from_tool":{"type":"string","nullable":true,"description":"Vulnerability technical id from the source tool. Allows to track unique vulnerabilities over time across subsequent scans.","maxLength":500},"vuln_id_from_tool":{"type":"string","nullable":true,"title":"Vulnerability ID from tool","description":"Non-unique technical id from the source tool associated with the vulnerability type.","maxLength":500},"sast_source_object":{"type":"string","nullable":true,"description":"Source object (variable, function...) of the attack vector.","maxLength":500},"sast_sink_object":{"type":"string","nullable":true,"description":"Sink object (variable, function...) of the attack vector.","maxLength":500},"sast_source_line":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true,"title":"SAST Source Line number","description":"Source line number of the attack vector."},"sast_source_file_path":{"type":"string","nullable":true,"description":"Source file path of the attack vector.","maxLength":4000},"nb_occurences":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true,"title":"Number of occurences","description":"Number of occurences in the source tool when several vulnerabilites were found and aggregated by the scanner."},"publish_date":{"type":"string","format":"date","nullable":true,"description":"Date when this vulnerability was made publicly available."},"service":{"type":"string","nullable":true,"description":"A service is a self-contained piece of functionality within a Product. This is an optional field which is used in deduplication of findings when set.","maxLength":200},"planned_remediation_date":{"type":"string","format":"date","nullable":true,"description":"The date the flaw is expected to be remediated."},"planned_remediation_version":{"type":"string","nullable":true,"description":"The target version when the vulnerability should be fixed / remediated","maxLength":99},"effort_for_fixing":{"type":"string","nullable":true,"description":"Effort for fixing / remediating the vulnerability (Low, Medium, High)","maxLength":99},"test":{"type":"integer","readOnly":true,"description":"The test that is associated with this flaw."},"duplicate_finding":{"type":"integer","readOnly":true,"nullable":true,"description":"Link to the original finding if this finding is a duplicate."},"review_requested_by":{"type":"integer","nullable":true,"description":"Documents who requested a review for this finding."},"defect_review_requested_by":{"type":"integer","nullable":true,"description":"Documents who requested a defect review for this flaw."},"last_reviewed_by":{"type":"integer","readOnly":true,"nullable":true,"description":"Provides the person who last reviewed the flaw."},"sonarqube_issue":{"type":"integer","nullable":true,"description":"The SonarQube issue associated with this finding."},"reviewers":{"type":"array","items":{"type":"integer"},"description":"Documents who reviewed the flaw."},"notes":{"type":"array","items":{"$ref":"#/components/schemas/Note"},"readOnly":true},"files":{"type":"array","items":{"type":"integer"},"readOnly":true,"description":"Files(s) related to the flaw."},"tags":{"type":"array","items":{"type":"string"}},"prefetch":{"type":"object","properties":{"auth_issues":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/EngagementCheckList"}},"author_issues":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/EngagementCheckList"}},"config_issues":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/EngagementCheckList"}},"crypto_issues":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/EngagementCheckList"}},"data_issues":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/EngagementCheckList"}},"defect_review_requested_by":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}},"duplicate_finding":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/Finding"}},"endpoint_set":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/Endpoint"}},"endpoints":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/Endpoint"}},"files":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/File"}},"finding_group_set":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/FindingGroup"}},"found_by":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/TestType"}},"last_reviewed_by":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}},"mitigated_by":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}},"notes":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/Note"}},"other_issues":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/EngagementCheckList"}},"reporter":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}},"review_requested_by":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}},"reviewers":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}},"risk_acceptance_set":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/RiskAcceptance"}},"sensitive_issues":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/EngagementCheckList"}},"session_issues":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/EngagementCheckList"}},"sonarqube_issue":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/SonarqubeIssue"}},"test":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/Test"}}}}},"required":["accepted_risks","age","created","description","display_status","duplicate_finding","files","finding_groups","finding_meta","found_by","hash_code","id","jira_change","jira_creation","jira_push_result","last_reviewed","last_reviewed_by","last_status_update","notes","numerical_severity","param","payload","related_fields","request_response","scanner_confidence","severity","sla_days_remaining","test","thread_id","title","updated","url"]},"FindingsRequest":{"type":"object","description":"Regression guard for Sentry DJANGO-D2P.\n\nDRF ``ModelSerializer.update()`` calls ``instance.<m2m>.set(new_list)`` for\nevery M2M field present in ``validated_data``, even when the new list is\nidentical to the current one. On tagulous ``TagField``s that triggers a\nfull teardown + re-add of the M2M, which runs SELECT + UPDATE ``count``\nbookkeeping per tag (N+1).\n\nThis mixin short-circuits the ``.set()`` call per ``TagListSerializerField``\nwhen the normalized incoming list equals ``instance.<attr>.get_tag_list()``.\nAll other M2M fields keep the stock DRF behavior.\n\nOpt in by adding ``SkipUnchangedTagsMixin`` to the base-class list of any\nserializer that exposes a ``TagListSerializerField`` for update.","properties":{"mitigated":{"type":"string","format":"date-time","nullable":true},"mitigated_by":{"type":"integer","nullable":true},"push_to_jira":{"type":"boolean","default":false},"found_by":{"type":"array","items":{"type":"integer"}},"vulnerability_ids":{"type":"array","items":{"$ref":"#/components/schemas/VulnerabilityIdRequest"}},"reporter":{"type":"integer"},"endpoints":{"type":"array","items":{"type":"integer"}},"priority":{"type":"number","format":"double","minimum":0,"nullable":true,"description":"The priority in which a finding should be considered for mitigation next"},"risk":{"enum":["Low","Medium","Needs Action","Urgent",null],"type":"string","x-spec-enum-id":"c09ae27af59e77a8","nullable":true,"description":"The risk score in which a finding poses to the system it was discovered on\n\n* `Low` - Low\n* `Medium` - Medium\n* `Needs Action` - Needs Action\n* `Urgent` - Urgent"},"overridden_priority_risk_calculation":{"type":"boolean","default":false,"description":"Dictates whether this object has had its priority/risk calculation manually overridden. If true, the priority and risk values will not be automatically recalculated again until this setting is set to false."},"owners":{"type":"integer","nullable":true,"description":"The group of users responsible for this finding (Dojo_Group ID)."},"mitigation_policy":{"type":"integer","nullable":true,"description":"The standardized mitigation policy for this finding"},"push_to_integrator":{"type":"boolean","default":false,"description":"Dictates whether this object will be dispatched to the associated integrator, and override the configured setting that decides if the object should be pushed or not."},"endpoints_to_add":{"type":"string","nullable":true,"minLength":1,"description":"A space deliminated list of endpoints that will be added to this Finding."},"recalculate_hash_code":{"type":"boolean","writeOnly":true,"default":false,"description":"When set to True, the hash code of the finding will be recalculated. This is flag is intended for power users. Please note, this may have an adverse effect on identifying duplicates through deduplication and reimport."},"title":{"type":"string","minLength":1,"description":"A short description of the flaw.","maxLength":511},"date":{"type":"string","format":"date","description":"The date the flaw was discovered."},"sla_start_date":{"type":"string","format":"date","nullable":true,"description":"(readonly)The date used as start date for SLA calculation. Set by expiring risk acceptances. Empty by default, causing a fallback to 'date'."},"sla_expiration_date":{"type":"string","format":"date","nullable":true,"description":"(readonly)The date SLA expires for this finding. Empty by default, causing a fallback to 'date'."},"cwe":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true,"description":"The CWE number associated with this flaw."},"epss_score":{"type":"number","format":"double","maximum":1.0,"minimum":0.0,"nullable":true,"description":"EPSS score for the CVE. Describes how likely it is the vulnerability will be exploited in the next 30 days."},"epss_percentile":{"type":"number","format":"double","maximum":1.0,"minimum":0.0,"nullable":true,"description":"EPSS percentile for the CVE. Describes how many CVEs are scored at or below this one."},"known_exploited":{"type":"boolean","description":"Whether this vulnerability is known to have been exploited in the wild."},"ransomware_used":{"type":"boolean","title":"Used in Ransomware","description":"Whether this vulnerability is known to have been leveraged as part of a ransomware campaign."},"kev_date":{"type":"string","format":"date","nullable":true,"title":"KEV Date Added","description":"The date the vulnerability was added to the KEV catalog."},"cvssv3":{"type":"string","nullable":true,"minLength":1,"title":"CVSS3 Vector","description":"Common Vulnerability Scoring System version 3 (CVSS3) score associated with this finding.","maxLength":117},"cvssv3_score":{"type":"number","format":"double","maximum":10.0,"minimum":0.0,"nullable":true,"title":"CVSS3 Score","description":"Numerical CVSSv3 score for the vulnerability. If the vector is given, the score is updated while saving the finding. The value must be between 0-10."},"cvssv4":{"type":"string","nullable":true,"minLength":1,"title":"CVSS4 vector","description":"Common Vulnerability Scoring System version 4 (CVSS4) score associated with this finding.","maxLength":255},"cvssv4_score":{"type":"number","format":"double","maximum":10.0,"minimum":0.0,"nullable":true,"description":"Numerical CVSSv4 score for the vulnerability. If the vector is given, the score is updated while saving the finding. The value must be between 0-10."},"severity":{"type":"string","minLength":1,"description":"The severity level of this flaw (Critical, High, Medium, Low, Info).","maxLength":200},"description":{"type":"string","minLength":1,"description":"Longer more descriptive information about the flaw."},"mitigation":{"type":"string","nullable":true,"description":"Text describing how to best fix the flaw."},"fix_available":{"type":"boolean","nullable":true,"description":"Denotes if there is a fix available for this flaw."},"fix_version":{"type":"string","nullable":true,"description":"Version of the affected component in which the flaw is fixed.","maxLength":100},"impact":{"type":"string","nullable":true,"description":"Text describing the impact this flaw has on systems, products, enterprise, etc."},"steps_to_reproduce":{"type":"string","nullable":true,"description":"Text describing the steps that must be followed in order to reproduce the flaw / bug."},"severity_justification":{"type":"string","nullable":true,"description":"Text describing why a certain severity was associated with this flaw."},"references":{"type":"string","nullable":true,"description":"The external documentation available for this flaw."},"active":{"type":"boolean","description":"Denotes if this flaw is active or not."},"verified":{"type":"boolean","description":"Denotes if this flaw has been manually verified by the tester."},"false_p":{"type":"boolean","title":"False Positive","description":"Denotes if this flaw has been deemed a false positive by the tester."},"duplicate":{"type":"boolean","description":"Denotes if this flaw is a duplicate of other flaws reported."},"out_of_scope":{"type":"boolean","description":"Denotes if this flaw falls outside the scope of the test and/or engagement."},"risk_accepted":{"type":"boolean","description":"Denotes if this finding has been marked as an accepted risk."},"under_review":{"type":"boolean","description":"Denotes is this flaw is currently being reviewed."},"under_defect_review":{"type":"boolean","description":"Denotes if this finding is under defect review."},"is_mitigated":{"type":"boolean","description":"Denotes if this flaw has been fixed."},"numerical_severity":{"type":"string","minLength":1,"description":"The numerical representation of the severity (S0, S1, S2, S3, S4).","maxLength":4},"line":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true,"title":"Line number","description":"Source line number of the attack vector."},"file_path":{"type":"string","nullable":true,"description":"Identified file(s) containing the flaw.","maxLength":4000},"component_name":{"type":"string","nullable":true,"description":"Name of the affected component (library name, part of a system, ...).","maxLength":500},"component_version":{"type":"string","nullable":true,"description":"Version of the affected component.","maxLength":100},"static_finding":{"type":"boolean","title":"Static finding (SAST)","description":"Flaw has been detected from a Static Application Security Testing tool (SAST)."},"dynamic_finding":{"type":"boolean","title":"Dynamic finding (DAST)","description":"Flaw has been detected from a Dynamic Application Security Testing tool (DAST)."},"unique_id_from_tool":{"type":"string","nullable":true,"description":"Vulnerability technical id from the source tool. Allows to track unique vulnerabilities over time across subsequent scans.","maxLength":500},"vuln_id_from_tool":{"type":"string","nullable":true,"title":"Vulnerability ID from tool","description":"Non-unique technical id from the source tool associated with the vulnerability type.","maxLength":500},"sast_source_object":{"type":"string","nullable":true,"description":"Source object (variable, function...) of the attack vector.","maxLength":500},"sast_sink_object":{"type":"string","nullable":true,"description":"Sink object (variable, function...) of the attack vector.","maxLength":500},"sast_source_line":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true,"title":"SAST Source Line number","description":"Source line number of the attack vector."},"sast_source_file_path":{"type":"string","nullable":true,"description":"Source file path of the attack vector.","maxLength":4000},"nb_occurences":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true,"title":"Number of occurences","description":"Number of occurences in the source tool when several vulnerabilites were found and aggregated by the scanner."},"publish_date":{"type":"string","format":"date","nullable":true,"description":"Date when this vulnerability was made publicly available."},"service":{"type":"string","nullable":true,"description":"A service is a self-contained piece of functionality within a Product. This is an optional field which is used in deduplication of findings when set.","maxLength":200},"planned_remediation_date":{"type":"string","format":"date","nullable":true,"description":"The date the flaw is expected to be remediated."},"planned_remediation_version":{"type":"string","nullable":true,"description":"The target version when the vulnerability should be fixed / remediated","maxLength":99},"effort_for_fixing":{"type":"string","nullable":true,"description":"Effort for fixing / remediating the vulnerability (Low, Medium, High)","maxLength":99},"review_requested_by":{"type":"integer","nullable":true,"description":"Documents who requested a review for this finding."},"defect_review_requested_by":{"type":"integer","nullable":true,"description":"Documents who requested a defect review for this flaw."},"sonarqube_issue":{"type":"integer","nullable":true,"description":"The SonarQube issue associated with this finding."},"reviewers":{"type":"array","items":{"type":"integer"},"description":"Documents who reviewed the flaw."},"tags":{"type":"array","items":{"type":"string","minLength":1}}},"required":["description","found_by","numerical_severity","severity","title"]},"FireWall":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"ip_ranges":{"type":"array","items":{"$ref":"#/components/schemas/IpMask"}},"locked":{"type":"boolean"},"external_services":{"nullable":true}},"required":["id","ip_ranges"]},"FirewallExternalServices":{"type":"object","properties":{"external_services":{"nullable":true}}},"FirewallExternalServicesRequest":{"type":"object","properties":{"external_services":{"nullable":true}}},"FixUsageReportRequest":{"type":"object","description":"Payload the scan-and-fix action POSTs after a ``/fix`` command applies fixes.\n\n``fixed_count`` is the number of findings successfully fixed in that command —\nthe billable unit. Repo/PR/finding context is recorded for read-only visibility.","properties":{"repo_full_name":{"type":"string","default":""},"pr_number":{"type":"integer","nullable":true},"fixed_count":{"type":"integer","minimum":0},"finding_ids":{"type":"array","items":{"type":"integer"}},"pr_url":{"type":"string","format":"uri","nullable":true},"kind":{"type":"string","default":""},"tokens_in":{"type":"integer","nullable":true,"default":0},"tokens_out":{"type":"integer","nullable":true,"default":0},"llm_model":{"type":"string","default":""},"llm_provider":{"type":"string","default":""}},"required":["fixed_count"]},"FullFindingGroup":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"push_to_jira":{"type":"boolean","default":false},"product_type":{"type":"integer","readOnly":true},"product":{"type":"integer","readOnly":true},"group_age":{"type":"integer","readOnly":true},"sla_days_remaining":{"type":"integer","readOnly":true},"findings_count":{"type":"integer","readOnly":true},"status":{"type":"string","readOnly":true},"severity":{"type":"string","readOnly":true},"jira_push_result":{"type":"object","additionalProperties":{},"nullable":true,"readOnly":true},"push_to_integrator":{"type":"boolean","default":false,"description":"Dictates whether this object will be dispatched to the associated integrator, and override the configured setting that decides if the object should be pushed or not."},"created":{"type":"string","format":"date-time","readOnly":true},"modified":{"type":"string","format":"date-time","readOnly":true},"name":{"type":"string","maxLength":255},"test":{"type":"integer"},"findings":{"type":"array","items":{"type":"integer"}},"prefetch":{"type":"object","properties":{"creator":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}},"findings":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/Finding"}},"test":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/Test"}}}}},"required":["created","findings","findings_count","group_age","id","jira_push_result","modified","name","product","product_type","severity","sla_days_remaining","status","test"]},"FullFindingGroupRequest":{"type":"object","properties":{"push_to_jira":{"type":"boolean","default":false},"push_to_integrator":{"type":"boolean","default":false,"description":"Dictates whether this object will be dispatched to the associated integrator, and override the configured setting that decides if the object should be pushed or not."},"name":{"type":"string","minLength":1,"maxLength":255},"test":{"type":"integer"},"findings":{"type":"array","items":{"type":"integer"}}},"required":["findings","name","test"]},"GenericMessage":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"message":{"type":"string","nullable":true,"description":"The contents of a given success message","maxLength":2000},"error":{"type":"string","nullable":true,"description":"The contents of a given error message","maxLength":2000},"status_code":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true,"description":"HTTP Status code presented only when an error is present"}},"required":["id"]},"GlobalRole":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"user":{"type":"integer","nullable":true},"group":{"type":"integer","nullable":true},"role":{"type":"integer","nullable":true,"title":"Global role","description":"The global role will be applied to all product types and products."},"prefetch":{"type":"object","properties":{"user":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}}}}},"required":["id"]},"GlobalRoleRequest":{"type":"object","properties":{"user":{"type":"integer","nullable":true},"group":{"type":"integer","nullable":true},"role":{"type":"integer","nullable":true,"title":"Global role","description":"The global role will be applied to all product types and products."}}},"ImportFindings":{"type":"object","properties":{"limit":{"type":"integer"},"created":{"type":"array","items":{"$ref":"#/components/schemas/FindingPreviewItem"}},"closed":{"type":"array","items":{"$ref":"#/components/schemas/FindingPreviewItem"}}},"required":["closed","created","limit"]},"ImportLanguages":{"type":"object","properties":{"product":{"type":"integer"},"file":{"type":"string","format":"uri"}},"required":["file","product"]},"ImportLanguagesRequest":{"type":"object","properties":{"product":{"type":"integer"},"file":{"type":"string","format":"binary"}},"required":["file","product"]},"ImportPreviewRequestRequest":{"type":"object","description":"Request serializer for import preview.","properties":{"scan_type":{"type":"string","minLength":1},"file":{"type":"string","format":"binary"},"product":{"type":"integer","description":"Product ID"},"engagement":{"type":"object","description":"Exactly one of: engagement_id, name, branch_tag, or tags. With multipart/form-data, pass this field as a JSON string.","properties":{"engagement_id":{"type":"integer","nullable":true},"name":{"type":"string","nullable":true},"branch_tag":{"type":"string","nullable":true},"tags":{"type":"array","items":{"type":"string"},"nullable":true}}},"close_old_findings":{"type":"boolean","default":false},"close_old_findings_product_scope":{"type":"boolean","default":false},"deduplication_on_engagement":{"type":"boolean","nullable":true},"service":{"type":"string","nullable":true},"minimum_severity":{"enum":["Info","Low","Medium","High","Critical"],"type":"string","description":"* `Info` - Info\n* `Low` - Low\n* `Medium` - Medium\n* `High` - High\n* `Critical` - Critical","x-spec-enum-id":"fc5d16a20ed06136","default":"Info"},"findings_limit":{"type":"integer","maximum":250,"minimum":1,"default":10}},"required":["engagement","file","product","scan_type"]},"ImportPreviewResponse":{"type":"object","description":"Response serializer for import preview.","properties":{"parsed_findings_count":{"type":"integer"},"statistics":{"$ref":"#/components/schemas/PreviewStatistics"},"findings":{"$ref":"#/components/schemas/ImportFindings"},"product_id":{"type":"integer"},"product_name":{"type":"string"},"engagement_id":{"type":"integer"},"engagement_name":{"type":"string"},"engagement_branch_tag":{"type":"string","nullable":true},"engagement_version":{"type":"string","nullable":true},"engagement_tags":{"type":"array","items":{"type":"string"}},"scan_type":{"type":"string"}},"required":["engagement_branch_tag","engagement_id","engagement_name","engagement_tags","engagement_version","findings","parsed_findings_count","product_id","product_name","scan_type","statistics"]},"ImportStatistics":{"type":"object","properties":{"before":{"allOf":[{"$ref":"#/components/schemas/SeverityStatusStatistics"}],"description":"Finding statistics as stored in Defect Dojo before the import"},"delta":{"allOf":[{"$ref":"#/components/schemas/DeltaStatistics"}],"description":"Finding statistics of modifications made by the reimport. Only available when TRACK_IMPORT_HISTORY has not been disabled."},"after":{"allOf":[{"$ref":"#/components/schemas/SeverityStatusStatistics"}],"description":"Finding statistics as stored in Defect Dojo after the import"}},"required":["after"]},"ImportStatisticsRequest":{"type":"object","properties":{"before":{"allOf":[{"$ref":"#/components/schemas/SeverityStatusStatisticsRequest"}],"description":"Finding statistics as stored in Defect Dojo before the import"},"delta":{"allOf":[{"$ref":"#/components/schemas/DeltaStatisticsRequest"}],"description":"Finding statistics of modifications made by the reimport. Only available when TRACK_IMPORT_HISTORY has not been disabled."},"after":{"allOf":[{"$ref":"#/components/schemas/SeverityStatusStatisticsRequest"}],"description":"Finding statistics as stored in Defect Dojo after the import"}},"required":["after"]},"IpMask":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"ip":{"type":"string","title":"IP Address"},"mask":{"type":"integer","maximum":32,"minimum":0,"nullable":true},"label":{"type":"string","nullable":true,"maxLength":128}},"required":["id","ip"]},"IpMaskRequest":{"type":"object","properties":{"ip":{"type":"string","minLength":1,"title":"IP Address"},"mask":{"type":"integer","maximum":32,"minimum":0,"nullable":true},"label":{"type":"string","nullable":true,"maxLength":128}},"required":["ip"]},"JIRAInstance":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"configuration_name":{"type":"string","description":"Enter a name to give to this configuration","maxLength":2000},"url":{"type":"string","format":"uri","title":"JIRA URL","description":"For more information how to configure Jira, read the DefectDojo documentation.","maxLength":2000},"username":{"type":"string","title":"Username/Email","description":"Username or Email Address, see DefectDojo documentation for more information.","maxLength":2000},"default_issue_type":{"enum":["Task","Story","Epic","Spike","Bug","Security"],"type":"string","x-spec-enum-id":"5ded50425ca94b38","description":"You can define extra issue types in settings.py\n\n* `Task` - Task\n* `Story` - Story\n* `Epic` - Epic\n* `Spike` - Spike\n* `Bug` - Bug\n* `Security` - Security"},"issue_template_dir":{"type":"string","nullable":true,"description":"Choose the folder containing the Django templates used to render the JIRA issue description. These are stored in dojo/templates/issue-trackers. Leave empty to use the default jira_full templates.","maxLength":255},"epic_name_id":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"description":"To obtain the 'Epic name id' visit https://<YOUR JIRA URL>/rest/api/2/field and search for Epic Name. Copy the number out of cf[number] and paste it here."},"open_status_key":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"title":"Reopen Transition ID","description":"Transition ID to Re-Open JIRA issues, visit https://<YOUR JIRA URL>/rest/api/latest/issue/<ANY VALID ISSUE KEY>/transitions?expand=transitions.fields to find the ID for your JIRA instance"},"close_status_key":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"title":"Close Transition ID","description":"Transition ID to Close JIRA issues, visit https://<YOUR JIRA URL>/rest/api/latest/issue/<ANY VALID ISSUE KEY>/transitions?expand=transitions.fields to find the ID for your JIRA instance"},"info_mapping_severity":{"type":"string","description":"Maps to the 'Priority' field in Jira. For example: Info","maxLength":200},"low_mapping_severity":{"type":"string","description":"Maps to the 'Priority' field in Jira. For example: Low","maxLength":200},"medium_mapping_severity":{"type":"string","description":"Maps to the 'Priority' field in Jira. For example: Medium","maxLength":200},"high_mapping_severity":{"type":"string","description":"Maps to the 'Priority' field in Jira. For example: High","maxLength":200},"critical_mapping_severity":{"type":"string","description":"Maps to the 'Priority' field in Jira. For example: Critical","maxLength":200},"finding_text":{"type":"string","nullable":true,"description":"Additional text that will be added to the finding in Jira. For example including how the finding was created or who to contact for more information."},"accepted_mapping_resolution":{"type":"string","nullable":true,"title":"Risk Accepted resolution mapping","description":"JIRA issues that are closed in JIRA with one of these resolutions will result in the Finding becoming Risk Accepted in Defect Dojo. JIRA issues that are closed in JIRA with one of these resolutions will result in the Finding becoming Risk Accepted in Defect Dojo. The expiration time for this Risk Acceptance will be determined by the \"Risk acceptance form default days\" in \"System Settings\". This mapping is not used when Findings are pushed to JIRA. In that case the Risk Accepted Findings are closed in JIRA and JIRA sets the default resolution.","maxLength":300},"false_positive_mapping_resolution":{"type":"string","nullable":true,"title":"False Positive resolution mapping","description":"JIRA issues that are closed in JIRA with one of these resolutions will result in the Finding being marked as False Positive Defect Dojo. This mapping is not used when Findings are pushed to JIRA. In that case the Finding is closed in JIRA and JIRA sets the default resolution.","maxLength":300},"global_jira_sla_notification":{"type":"boolean","title":"Globally send SLA notifications as comment?","description":"This setting can be overidden at the Product level"},"finding_jira_sync":{"type":"boolean","title":"Automatically sync Findings with JIRA?","description":"If enabled, this will sync changes to a Finding automatically to JIRA"}},"required":["close_status_key","critical_mapping_severity","epic_name_id","high_mapping_severity","id","info_mapping_severity","low_mapping_severity","medium_mapping_severity","open_status_key","url","username"]},"JIRAInstanceRequest":{"type":"object","properties":{"configuration_name":{"type":"string","minLength":1,"description":"Enter a name to give to this configuration","maxLength":2000},"url":{"type":"string","format":"uri","minLength":1,"title":"JIRA URL","description":"For more information how to configure Jira, read the DefectDojo documentation.","maxLength":2000},"username":{"type":"string","minLength":1,"title":"Username/Email","description":"Username or Email Address, see DefectDojo documentation for more information.","maxLength":2000},"password":{"type":"string","writeOnly":true,"minLength":1,"title":"Password/Token","description":"Password or API Token, see DefectDojo documentation for more information.","maxLength":2000},"default_issue_type":{"enum":["Task","Story","Epic","Spike","Bug","Security"],"type":"string","x-spec-enum-id":"5ded50425ca94b38","description":"You can define extra issue types in settings.py\n\n* `Task` - Task\n* `Story` - Story\n* `Epic` - Epic\n* `Spike` - Spike\n* `Bug` - Bug\n* `Security` - Security"},"issue_template_dir":{"type":"string","nullable":true,"description":"Choose the folder containing the Django templates used to render the JIRA issue description. These are stored in dojo/templates/issue-trackers. Leave empty to use the default jira_full templates.","maxLength":255},"epic_name_id":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"description":"To obtain the 'Epic name id' visit https://<YOUR JIRA URL>/rest/api/2/field and search for Epic Name. Copy the number out of cf[number] and paste it here."},"open_status_key":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"title":"Reopen Transition ID","description":"Transition ID to Re-Open JIRA issues, visit https://<YOUR JIRA URL>/rest/api/latest/issue/<ANY VALID ISSUE KEY>/transitions?expand=transitions.fields to find the ID for your JIRA instance"},"close_status_key":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"title":"Close Transition ID","description":"Transition ID to Close JIRA issues, visit https://<YOUR JIRA URL>/rest/api/latest/issue/<ANY VALID ISSUE KEY>/transitions?expand=transitions.fields to find the ID for your JIRA instance"},"info_mapping_severity":{"type":"string","minLength":1,"description":"Maps to the 'Priority' field in Jira. For example: Info","maxLength":200},"low_mapping_severity":{"type":"string","minLength":1,"description":"Maps to the 'Priority' field in Jira. For example: Low","maxLength":200},"medium_mapping_severity":{"type":"string","minLength":1,"description":"Maps to the 'Priority' field in Jira. For example: Medium","maxLength":200},"high_mapping_severity":{"type":"string","minLength":1,"description":"Maps to the 'Priority' field in Jira. For example: High","maxLength":200},"critical_mapping_severity":{"type":"string","minLength":1,"description":"Maps to the 'Priority' field in Jira. For example: Critical","maxLength":200},"finding_text":{"type":"string","nullable":true,"description":"Additional text that will be added to the finding in Jira. For example including how the finding was created or who to contact for more information."},"accepted_mapping_resolution":{"type":"string","nullable":true,"title":"Risk Accepted resolution mapping","description":"JIRA issues that are closed in JIRA with one of these resolutions will result in the Finding becoming Risk Accepted in Defect Dojo. JIRA issues that are closed in JIRA with one of these resolutions will result in the Finding becoming Risk Accepted in Defect Dojo. The expiration time for this Risk Acceptance will be determined by the \"Risk acceptance form default days\" in \"System Settings\". This mapping is not used when Findings are pushed to JIRA. In that case the Risk Accepted Findings are closed in JIRA and JIRA sets the default resolution.","maxLength":300},"false_positive_mapping_resolution":{"type":"string","nullable":true,"title":"False Positive resolution mapping","description":"JIRA issues that are closed in JIRA with one of these resolutions will result in the Finding being marked as False Positive Defect Dojo. This mapping is not used when Findings are pushed to JIRA. In that case the Finding is closed in JIRA and JIRA sets the default resolution.","maxLength":300},"global_jira_sla_notification":{"type":"boolean","title":"Globally send SLA notifications as comment?","description":"This setting can be overidden at the Product level"},"finding_jira_sync":{"type":"boolean","title":"Automatically sync Findings with JIRA?","description":"If enabled, this will sync changes to a Finding automatically to JIRA"}},"required":["close_status_key","critical_mapping_severity","epic_name_id","high_mapping_severity","info_mapping_severity","low_mapping_severity","medium_mapping_severity","open_status_key","password","url","username"]},"JIRAIssue":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"url":{"type":"string","readOnly":true},"jira_id":{"type":"string","maxLength":200},"jira_key":{"type":"string","maxLength":200},"jira_creation":{"type":"string","format":"date-time","nullable":true,"description":"The date a Jira issue was created from this finding."},"jira_change":{"type":"string","format":"date-time","nullable":true,"title":"Jira last update","description":"The date the linked Jira issue was last modified."},"jira_project":{"type":"integer","nullable":true},"finding":{"type":"integer","nullable":true},"engagement":{"type":"integer","nullable":true},"finding_group":{"type":"integer","nullable":true}},"required":["id","jira_id","jira_key","url"]},"JIRAIssueRequest":{"type":"object","properties":{"jira_id":{"type":"string","minLength":1,"maxLength":200},"jira_key":{"type":"string","minLength":1,"maxLength":200},"jira_creation":{"type":"string","format":"date-time","nullable":true,"description":"The date a Jira issue was created from this finding."},"jira_change":{"type":"string","format":"date-time","nullable":true,"title":"Jira last update","description":"The date the linked Jira issue was last modified."},"jira_project":{"type":"integer","nullable":true},"finding":{"type":"integer","nullable":true},"engagement":{"type":"integer","nullable":true},"finding_group":{"type":"integer","nullable":true}},"required":["jira_id","jira_key"]},"JIRAProject":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"project_key":{"type":"string","maxLength":200},"issue_template_dir":{"type":"string","nullable":true,"description":"Choose the folder containing the Django templates used to render the JIRA issue description. These are stored in dojo/templates/issue-trackers. Leave empty to use the default jira_full templates.","maxLength":255},"component":{"type":"string","maxLength":200},"custom_fields":{"nullable":true,"description":"JIRA custom field JSON mapping of Id to value, e.g. {\"customfield_10122\": [{\"name\": \"8.0.1\"}]}"},"close_transition_fields":{"nullable":true,"description":"JIRA fields to send as part of the Close transition, e.g. {\"resolution\": {\"name\": \"Won't Fix\"}, \"customfield_10200\": \"justification\"}. Use this when the JIRA workflow requires fields on the close transition screen. Fields not on the transition screen are rejected by JIRA."},"reopen_transition_fields":{"nullable":true,"description":"JIRA fields to send as part of the Reopen transition, e.g. {\"customfield_10201\": \"reopened by DefectDojo\"}. Fields not on the transition screen are rejected by JIRA."},"default_assignee":{"type":"string","nullable":true,"description":"JIRA default assignee (name). If left blank then it defaults to whatever is configured in JIRA.","maxLength":200},"jira_labels":{"type":"string","nullable":true,"description":"JIRA issue labels space seperated","maxLength":200},"add_vulnerability_id_to_jira_label":{"type":"boolean","title":"Add vulnerability Id as a JIRA label"},"push_all_issues":{"type":"boolean","description":"Automatically create JIRA tickets for verified findings, assuming enforce_verified_status is True, or for all findings otherwise. Once linked, the JIRA ticket will continue to sync, regardless of status in DefectDojo."},"enable_engagement_epic_mapping":{"type":"boolean"},"epic_issue_type_name":{"type":"string","description":"The name of the of structure that represents an Epic","maxLength":64},"push_notes":{"type":"boolean"},"product_jira_sla_notification":{"type":"boolean","title":"Send SLA notifications as comment?"},"risk_acceptance_expiration_notification":{"type":"boolean","title":"Send Risk Acceptance expiration notifications as comment?"},"enabled":{"type":"boolean","title":"Enable Connection With Jira Project","description":"When disabled, Findings will no longer be pushed to Jira, even if they have already been pushed previously."},"jira_instance":{"type":"integer","nullable":true},"product":{"type":"integer","nullable":true},"engagement":{"type":"integer","nullable":true},"prefetch":{"type":"object","properties":{"engagement":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/FindingEngagement"}},"jira_instance":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/JIRAInstance"}},"product":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/Product"}}}}},"required":["id"]},"JIRAProjectRequest":{"type":"object","properties":{"project_key":{"type":"string","maxLength":200},"issue_template_dir":{"type":"string","nullable":true,"description":"Choose the folder containing the Django templates used to render the JIRA issue description. These are stored in dojo/templates/issue-trackers. Leave empty to use the default jira_full templates.","maxLength":255},"component":{"type":"string","maxLength":200},"custom_fields":{"nullable":true,"description":"JIRA custom field JSON mapping of Id to value, e.g. {\"customfield_10122\": [{\"name\": \"8.0.1\"}]}"},"close_transition_fields":{"nullable":true,"description":"JIRA fields to send as part of the Close transition, e.g. {\"resolution\": {\"name\": \"Won't Fix\"}, \"customfield_10200\": \"justification\"}. Use this when the JIRA workflow requires fields on the close transition screen. Fields not on the transition screen are rejected by JIRA."},"reopen_transition_fields":{"nullable":true,"description":"JIRA fields to send as part of the Reopen transition, e.g. {\"customfield_10201\": \"reopened by DefectDojo\"}. Fields not on the transition screen are rejected by JIRA."},"default_assignee":{"type":"string","nullable":true,"description":"JIRA default assignee (name). If left blank then it defaults to whatever is configured in JIRA.","maxLength":200},"jira_labels":{"type":"string","nullable":true,"description":"JIRA issue labels space seperated","maxLength":200},"add_vulnerability_id_to_jira_label":{"type":"boolean","title":"Add vulnerability Id as a JIRA label"},"push_all_issues":{"type":"boolean","description":"Automatically create JIRA tickets for verified findings, assuming enforce_verified_status is True, or for all findings otherwise. Once linked, the JIRA ticket will continue to sync, regardless of status in DefectDojo."},"enable_engagement_epic_mapping":{"type":"boolean"},"epic_issue_type_name":{"type":"string","description":"The name of the of structure that represents an Epic","maxLength":64},"push_notes":{"type":"boolean"},"product_jira_sla_notification":{"type":"boolean","title":"Send SLA notifications as comment?"},"risk_acceptance_expiration_notification":{"type":"boolean","title":"Send Risk Acceptance expiration notifications as comment?"},"enabled":{"type":"boolean","title":"Enable Connection With Jira Project","description":"When disabled, Findings will no longer be pushed to Jira, even if they have already been pushed previously."},"jira_instance":{"type":"integer","nullable":true},"product":{"type":"integer","nullable":true},"engagement":{"type":"integer","nullable":true}}},"Language":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"files":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true,"title":"Number of files"},"blank":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true,"title":"Number of blank lines"},"comment":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true,"title":"Number of comment lines"},"code":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true,"title":"Number of code lines"},"created":{"type":"string","format":"date-time","readOnly":true},"language":{"type":"integer"},"product":{"type":"integer"},"user":{"type":"integer","nullable":true},"prefetch":{"type":"object","properties":{"language":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/LanguageType"}},"product":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/Product"}},"user":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}}}}},"required":["created","id","language","product"]},"LanguageRequest":{"type":"object","properties":{"files":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true,"title":"Number of files"},"blank":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true,"title":"Number of blank lines"},"comment":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true,"title":"Number of comment lines"},"code":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true,"title":"Number of code lines"},"language":{"type":"integer"},"product":{"type":"integer"},"user":{"type":"integer","nullable":true}},"required":["language","product"]},"LanguageType":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"language":{"type":"string","maxLength":100},"color":{"type":"string","nullable":true,"title":"HTML color","maxLength":7}},"required":["id","language"]},"LanguageTypeRequest":{"type":"object","properties":{"language":{"type":"string","minLength":1,"maxLength":100},"color":{"type":"string","nullable":true,"title":"HTML color","maxLength":7}},"required":["language"]},"LegacyAuditLog":{"type":"object","properties":{"model_name":{"type":"string","readOnly":true},"object_id":{"type":"integer","maximum":9223372036854775807,"minimum":-9223372036854775808,"format":"int64","nullable":true},"object_name":{"type":"string","readOnly":true},"action":{"enum":[0,1,2,3],"type":"integer","description":"* `0` - create\n* `1` - update\n* `2` - delete\n* `3` - access","x-spec-enum-id":"f07ca4f574297d89","minimum":0,"maximum":32767},"changes":{},"user":{"$ref":"#/components/schemas/Actor"},"timestamp":{"type":"string","format":"date-time"},"remote_addr":{"type":"string","nullable":true}},"required":["action","changes","model_name","object_name","user"]},"LicenseManager":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"remind_on":{"type":"string","format":"date","nullable":true,"title":"Scheduled Reminder Date","description":"The reminder will occur on the set date"},"snooze_exp":{"type":"string","format":"date-time","readOnly":true,"nullable":true,"title":"Snooze Expiration Time Stamp","description":"Records when the snooze will expire"},"snoozed_on":{"type":"string","format":"date-time","readOnly":true,"nullable":true,"title":"Snooze Time Stamp","description":"Records the last time the update was delayed"},"remind":{"type":"boolean","readOnly":true,"description":"Allow the remind popup to be seen"},"enable_reminders":{"type":"boolean","title":"Enable Popup Reminders","description":"When enabled, a popup message will appear as a reminder that the license will expire shortly"},"license_contents":{"type":"string"}},"required":["id","remind","snooze_exp","snoozed_on"]},"Location":{"type":"object","description":"Serializer for the Location model with serializers for the related objects.","properties":{"id":{"type":"integer","readOnly":true},"tags":{"type":"array","items":{"type":"string"}},"inherited_tags":{"type":"array","items":{"type":"string"}},"created":{"type":"string","format":"date-time","readOnly":true,"nullable":true,"description":"Time that the object was initially created, and saved to the database"},"updated":{"type":"string","format":"date-time","readOnly":true,"nullable":true,"description":"Time that the object was most recently saved to the database"},"location_type":{"type":"string","readOnly":true,"description":"The type of location that is stored. This field is automatically managed"},"location_value":{"type":"string","readOnly":true,"description":"The string representation of a given location. This field is automatically managed"}},"required":["created","id","location_type","location_value","updated"]},"LocationFindingReference":{"type":"object","description":"Serializer for the LocationFindingReference model with serializers for the related objects.","properties":{"id":{"type":"integer","readOnly":true},"location_type":{"type":"string","readOnly":true},"location_value":{"type":"string","readOnly":true},"created":{"type":"string","format":"date-time","readOnly":true,"nullable":true,"description":"Time that the object was initially created, and saved to the database"},"updated":{"type":"string","format":"date-time","readOnly":true,"nullable":true,"description":"Time that the object was most recently saved to the database"},"relationship":{"enum":["owned_by","used_by",""],"type":"string","x-spec-enum-id":"8c638fc6583828e5","description":"The relationship between two locations\n\n* `owned_by` - is owned by\n* `used_by` - is used by"},"relationship_data":{"description":"Any extra data about this relationship"},"audit_time":{"type":"string","format":"date-time","readOnly":true,"nullable":true,"description":"The time when the audit was performed"},"status":{"enum":["Active","Mitigated","FalsePositive","RiskAccepted","OutOfScope"],"type":"string","x-spec-enum-id":"918ee82ac8d9cac7","description":"The status of the the given Location\n\n* `Active` - Active\n* `Mitigated` - Mitigated\n* `FalsePositive` - False Positive\n* `RiskAccepted` - Risk Accepted\n* `OutOfScope` - Out Of Scope"},"location":{"type":"integer"},"finding":{"type":"integer"},"auditor":{"type":"integer","nullable":true,"description":"The user who audited the location"}},"required":["audit_time","created","finding","id","location","location_type","location_value","updated"]},"LocationFindingReferenceRequest":{"type":"object","description":"Serializer for the LocationFindingReference model with serializers for the related objects.","properties":{"relationship":{"enum":["owned_by","used_by",""],"type":"string","x-spec-enum-id":"8c638fc6583828e5","description":"The relationship between two locations\n\n* `owned_by` - is owned by\n* `used_by` - is used by"},"relationship_data":{"description":"Any extra data about this relationship"},"status":{"enum":["Active","Mitigated","FalsePositive","RiskAccepted","OutOfScope"],"type":"string","x-spec-enum-id":"918ee82ac8d9cac7","description":"The status of the the given Location\n\n* `Active` - Active\n* `Mitigated` - Mitigated\n* `FalsePositive` - False Positive\n* `RiskAccepted` - Risk Accepted\n* `OutOfScope` - Out Of Scope"},"location":{"type":"integer"},"finding":{"type":"integer"},"auditor":{"type":"integer","nullable":true,"description":"The user who audited the location"}},"required":["finding","location"]},"LocationProductReference":{"type":"object","description":"Serializer for the LocationProductReference model with serializers for the related objects.","properties":{"id":{"type":"integer","readOnly":true},"location_type":{"type":"string","readOnly":true},"location_value":{"type":"string","readOnly":true},"created":{"type":"string","format":"date-time","readOnly":true,"nullable":true,"description":"Time that the object was initially created, and saved to the database"},"updated":{"type":"string","format":"date-time","readOnly":true,"nullable":true,"description":"Time that the object was most recently saved to the database"},"relationship":{"enum":["owned_by","used_by",""],"type":"string","x-spec-enum-id":"8c638fc6583828e5","description":"The relationship between two locations\n\n* `owned_by` - is owned by\n* `used_by` - is used by"},"relationship_data":{"description":"Any extra data about this relationship"},"status":{"enum":["Active","Mitigated"],"type":"string","x-spec-enum-id":"bcfb073a62b96b70","description":"The status of the the given Location\n\n* `Active` - Active\n* `Mitigated` - Mitigated"},"location":{"type":"integer"},"product":{"type":"integer"}},"required":["created","id","location","location_type","location_value","product","updated"]},"LocationProductReferenceRequest":{"type":"object","description":"Serializer for the LocationProductReference model with serializers for the related objects.","properties":{"relationship":{"enum":["owned_by","used_by",""],"type":"string","x-spec-enum-id":"8c638fc6583828e5","description":"The relationship between two locations\n\n* `owned_by` - is owned by\n* `used_by` - is used by"},"relationship_data":{"description":"Any extra data about this relationship"},"status":{"enum":["Active","Mitigated"],"type":"string","x-spec-enum-id":"bcfb073a62b96b70","description":"The status of the the given Location\n\n* `Active` - Active\n* `Mitigated` - Mitigated"},"location":{"type":"integer"},"product":{"type":"integer"}},"required":["location","product"]},"LoginBanner":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"banner_enable":{"type":"boolean"},"banner_message":{"type":"string","default":"","maxLength":500}},"required":["banner_enable","id"]},"LoginBannerRequest":{"type":"object","properties":{"banner_enable":{"type":"boolean"},"banner_message":{"type":"string","default":"","maxLength":500}},"required":["banner_enable"]},"MFAAuthToken":{"type":"object","properties":{"token":{"type":"string","readOnly":true}},"required":["token"]},"MFAAuthTokenRequest":{"type":"object","properties":{"username":{"type":"string","writeOnly":true,"minLength":1},"password":{"type":"string","writeOnly":true,"minLength":1},"mfa_code":{"type":"string","writeOnly":true,"minLength":1}},"required":["password","username"]},"MaintenanceWindow":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"monthly_start_time":{"type":"string","format":"date-time","nullable":true,"title":"Maintenance Start Time","description":"The starting date and time the server will be expected to be down for Maintenance"},"monthly_end_time":{"type":"string","format":"date-time","nullable":true,"title":"Maintenance End Time","description":"The ending date and time that Maintenance will conclide and the server will be available again"},"daily_start_time":{"type":"string","format":"date-time","nullable":true,"title":"Daily Maintenance Start Time","description":"The starting time of a preferred window of downtime for a given day if the server needs to be reset for any reason"},"daily_end_time":{"type":"string","format":"date-time","nullable":true,"title":"Daily Maintenance End Time","description":"The ending time of a preferred window of downtime for a given day if the server needs to be reset for any reason"}},"required":["id"]},"MaintenanceWindowRequest":{"type":"object","properties":{"monthly_start_time":{"type":"string","format":"date-time","nullable":true,"title":"Maintenance Start Time","description":"The starting date and time the server will be expected to be down for Maintenance"},"monthly_end_time":{"type":"string","format":"date-time","nullable":true,"title":"Maintenance End Time","description":"The ending date and time that Maintenance will conclide and the server will be available again"},"daily_start_time":{"type":"string","format":"date-time","nullable":true,"title":"Daily Maintenance Start Time","description":"The starting time of a preferred window of downtime for a given day if the server needs to be reset for any reason"},"daily_end_time":{"type":"string","format":"date-time","nullable":true,"title":"Daily Maintenance End Time","description":"The ending time of a preferred window of downtime for a given day if the server needs to be reset for any reason"}}},"Mapping":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"created_at":{"type":"string","format":"date-time","readOnly":true,"title":"Created Timestamp","description":"The time that the mapping was created"},"updated_at":{"type":"string","format":"date-time","readOnly":true,"title":"Test ID","description":"The last time the mapping was updated"},"defectdojo_product_type_id":{"type":"integer","nullable":true,"title":"Product Type ID","description":"The ID of the Product Type associated with the record"},"defectdojo_product_id":{"type":"integer","nullable":true,"title":"Product ID","description":"The ID of the Product associated with the record"},"defectdojo_engagement_id":{"type":"integer","nullable":true,"title":"Engagement ID","description":"The ID of the Engagement associated with the record"}},"required":["created_at","id","updated_at"]},"MappingEngagement":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"name":{"type":"string","nullable":true,"maxLength":300}},"required":["id"]},"MappingProduct":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"name":{"type":"string","maxLength":255}},"required":["id","name"]},"MappingProductType":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"name":{"type":"string","maxLength":255}},"required":["id","name"]},"MappingSubtype":{"type":"object","description":"Serializes the through row -- per-subtype status with the nested Test (or null when STALE).","properties":{"test_type_name":{"type":"string","description":"The test type name (scan type) this row was created for; preserved after Test deletion","maxLength":256},"status":{"enum":["GOOD","STALE","MISSING","IGNORED"],"type":"string","x-spec-enum-id":"4cd523f14e7933df","description":"Per-subtype status, tracked independently of the Record's overall state\n\n* `GOOD` - GOOD\n* `STALE` - STALE\n* `MISSING` - MISSING\n* `IGNORED` - IGNORED"},"test":{"allOf":[{"$ref":"#/components/schemas/_MappedTest"}],"readOnly":true},"filters":{"description":"Per-subtype filter overrides"}},"required":["test","test_type_name"]},"MappingSubtypeFilters":{"type":"object","description":"Per-subtype filter overrides. The criteria dict is flat (no stage key) -- subtype\nfilters only apply at sync, merged over ConnectorConfig.filters['sync']. An empty dict\nclears all overrides for the subtype.","properties":{"test_type_name":{"type":"string","description":"The test_type_name of the subtype whose filters to update."},"filters":{"description":"Flat criterion dict (e.g. {'severity': 'Critical'}). Empty dict clears overrides."}},"required":["filters","test_type_name"]},"Meta":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"product":{"type":"integer","nullable":true},"endpoint":{"type":"integer","nullable":true},"location":{"type":"integer","nullable":true},"finding":{"type":"integer","nullable":true},"name":{"type":"string","maxLength":120},"value":{"type":"string","maxLength":300}},"required":["id","name","value"]},"MetaMain":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"product":{"type":"integer","nullable":true},"finding":{"type":"integer","nullable":true},"metadata":{"type":"array","items":{"$ref":"#/components/schemas/Metadata"}}},"required":["id","metadata"]},"MetaMainRequest":{"type":"object","properties":{"product":{"type":"integer","nullable":true},"finding":{"type":"integer","nullable":true},"metadata":{"type":"array","items":{"$ref":"#/components/schemas/MetadataRequest"}}},"required":["metadata"]},"MetaRequest":{"type":"object","properties":{"product":{"type":"integer","nullable":true},"endpoint":{"type":"integer","nullable":true},"location":{"type":"integer","nullable":true},"finding":{"type":"integer","nullable":true},"name":{"type":"string","minLength":1,"maxLength":120},"value":{"type":"string","minLength":1,"maxLength":300}},"required":["name","value"]},"Metadata":{"type":"object","properties":{"name":{"type":"string","maxLength":120},"value":{"type":"string","maxLength":300}},"required":["name","value"]},"MetadataRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120},"value":{"type":"string","minLength":1,"maxLength":300}},"required":["name","value"]},"MitigationPolicy":{"type":"object","description":"Base serializer for all models.","properties":{"id":{"type":"integer","readOnly":true},"created":{"type":"string","format":"date-time","readOnly":true,"nullable":true,"description":"Time that the object was initially created, and saved to the database"},"updated":{"type":"string","format":"date-time","readOnly":true,"nullable":true,"description":"Time that the object was most recently saved to the database"},"title":{"type":"string","description":"A brief description of the mitigation policy","maxLength":1024},"description":{"type":"string","description":"The detailed description of the policy, including how to mitigate the finding and any stakeholders to inform"},"is_default":{"type":"boolean","description":"Whether this policy is the default policy for findings where no policy is specified"}},"required":["created","description","id","title","updated"]},"MitigationPolicyRequest":{"type":"object","description":"Base serializer for all models.","properties":{"title":{"type":"string","minLength":1,"description":"A brief description of the mitigation policy","maxLength":1024},"description":{"type":"string","minLength":1,"description":"The detailed description of the policy, including how to mitigate the finding and any stakeholders to inform"},"is_default":{"type":"boolean","description":"Whether this policy is the default policy for findings where no policy is specified"}},"required":["description","title"]},"ModifyFireWallRules":{"type":"object","properties":{"ip_ranges":{"type":"array","items":{"$ref":"#/components/schemas/IpMask"}}},"required":["ip_ranges"]},"ModifyFireWallRulesRequest":{"type":"object","properties":{"ip_ranges":{"type":"array","items":{"$ref":"#/components/schemas/IpMaskRequest"}}},"required":["ip_ranges"]},"NetworkLocations":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"location":{"type":"string","description":"Location of network testing: Examples: VPN, Internet or Internal.","maxLength":500}},"required":["id","location"]},"NetworkLocationsRequest":{"type":"object","properties":{"location":{"type":"string","minLength":1,"description":"Location of network testing: Examples: VPN, Internet or Internal.","maxLength":500}},"required":["location"]},"Note":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"author":{"allOf":[{"$ref":"#/components/schemas/UserStub"}],"readOnly":true},"editor":{"allOf":[{"$ref":"#/components/schemas/UserStub"}],"readOnly":true,"nullable":true},"history":{"type":"array","items":{"$ref":"#/components/schemas/NoteHistory"},"readOnly":true},"note_type":{"allOf":[{"$ref":"#/components/schemas/NoteType"}],"readOnly":true},"entry":{"type":"string"},"date":{"type":"string","format":"date-time","readOnly":true},"private":{"type":"boolean"},"edited":{"type":"boolean"},"edit_time":{"type":"string","format":"date-time","readOnly":true,"nullable":true}},"required":["author","date","edit_time","editor","entry","history","id","note_type"]},"NoteHistory":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"current_editor":{"allOf":[{"$ref":"#/components/schemas/UserStub"}],"readOnly":true},"note_type":{"allOf":[{"$ref":"#/components/schemas/NoteType"}],"readOnly":true},"data":{"type":"string"},"time":{"type":"string","format":"date-time","readOnly":true,"nullable":true}},"required":["current_editor","data","id","note_type","time"]},"NoteHistoryRequest":{"type":"object","properties":{"data":{"type":"string","minLength":1}},"required":["data"]},"NoteRequest":{"type":"object","properties":{"entry":{"type":"string","minLength":1},"private":{"type":"boolean"},"edited":{"type":"boolean"}},"required":["entry"]},"NoteType":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"name":{"type":"string","maxLength":100},"description":{"type":"string","maxLength":200},"is_single":{"type":"boolean"},"is_active":{"type":"boolean"},"is_mandatory":{"type":"boolean"}},"required":["description","id","name"]},"NoteTypeRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"description":{"type":"string","minLength":1,"maxLength":200},"is_single":{"type":"boolean"},"is_active":{"type":"boolean"},"is_mandatory":{"type":"boolean"}},"required":["description","name"]},"NotificationWebhooks":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"name":{"type":"string","description":"Name of the incoming webhook","maxLength":100},"url":{"type":"string","format":"uri","description":"The full URL of the incoming webhook","maxLength":200},"header_name":{"type":"string","nullable":true,"description":"Name of the header required for interacting with Webhook endpoint","maxLength":100},"header_value":{"type":"string","nullable":true,"description":"Content of the header required for interacting with Webhook endpoint","maxLength":100},"status":{"type":"string","readOnly":true,"description":"Status of the incoming webhook"},"first_error":{"type":"string","format":"date-time","readOnly":true,"nullable":true,"description":"If endpoint is active, when error happened first time"},"last_error":{"type":"string","format":"date-time","readOnly":true,"nullable":true,"description":"If endpoint is active, when error happened last time"},"note":{"type":"string","readOnly":true,"nullable":true,"description":"Description of the latest error"},"owner":{"type":"integer","nullable":true,"description":"Owner/receiver of notification, if empty processed as system notification"}},"required":["first_error","id","last_error","note","status"]},"NotificationWebhooksRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Name of the incoming webhook","maxLength":100},"url":{"type":"string","format":"uri","minLength":1,"description":"The full URL of the incoming webhook","maxLength":200},"header_name":{"type":"string","nullable":true,"description":"Name of the header required for interacting with Webhook endpoint","maxLength":100},"header_value":{"type":"string","nullable":true,"description":"Content of the header required for interacting with Webhook endpoint","maxLength":100},"owner":{"type":"integer","nullable":true,"description":"Owner/receiver of notification, if empty processed as system notification"}}},"Notifications":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"product":{"type":"integer","nullable":true},"user":{"type":"integer","nullable":true},"product_type_added":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["alert"]},"product_added":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["alert"]},"engagement_added":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["alert"]},"test_added":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["alert"]},"scan_added":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["alert"]},"jira_update":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["alert"]},"upcoming_engagement":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["alert"]},"stale_engagement":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["alert"]},"auto_close_engagement":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["alert"]},"close_engagement":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["alert"]},"user_mentioned":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["alert"]},"code_review":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["alert"]},"review_requested":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["alert"]},"other":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["alert"]},"sla_breach":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["alert"]},"sla_breach_combined":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["alert"]},"risk_acceptance_expiration":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["alert"]},"template":{"type":"boolean","default":false},"digest":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["mail"]},"digest_frequency":{"enum":["Daily","Weekly - Monday","Weekly - Tuesday","Weekly - Wednesday","Weekly - Thursday","Weekly - Friday","Weekly - Saturday","Weekly - Sunday","Monthly - 1st","Monthly - 15th","",null],"type":"string","description":"* `Daily` - Daily\n* `Weekly - Monday` - Weekly - Monday\n* `Weekly - Tuesday` - Weekly - Tuesday\n* `Weekly - Wednesday` - Weekly - Wednesday\n* `Weekly - Thursday` - Weekly - Thursday\n* `Weekly - Friday` - Weekly - Friday\n* `Weekly - Saturday` - Weekly - Saturday\n* `Weekly - Sunday` - Weekly - Sunday\n* `Monthly - 1st` - Monthly - 1st\n* `Monthly - 15th` - Monthly - 15th","x-spec-enum-id":"4b2def200351ec56","nullable":true},"finding_risk_accepted":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["alert"]},"scan_added_empty":{"enum":["slack","msteams","mail","webhooks","alert",""],"type":"string","x-spec-enum-id":"1b984ac114f52c4c","description":"Triggered whenever an (re-)import has been done (even if that created/updated/closed no findings).\n\n* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert"},"prefetch":{"type":"object","properties":{"product":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/Product"}},"user":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}}}}},"required":["id"]},"NotificationsRequest":{"type":"object","properties":{"product":{"type":"integer","nullable":true},"user":{"type":"integer","nullable":true},"product_type_added":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["alert"]},"product_added":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["alert"]},"engagement_added":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["alert"]},"test_added":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["alert"]},"scan_added":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["alert"]},"jira_update":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["alert"]},"upcoming_engagement":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["alert"]},"stale_engagement":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["alert"]},"auto_close_engagement":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["alert"]},"close_engagement":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["alert"]},"user_mentioned":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["alert"]},"code_review":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["alert"]},"review_requested":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["alert"]},"other":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["alert"]},"sla_breach":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["alert"]},"sla_breach_combined":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["alert"]},"risk_acceptance_expiration":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["alert"]},"template":{"type":"boolean","default":false},"digest":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["mail"]},"digest_frequency":{"enum":["Daily","Weekly - Monday","Weekly - Tuesday","Weekly - Wednesday","Weekly - Thursday","Weekly - Friday","Weekly - Saturday","Weekly - Sunday","Monthly - 1st","Monthly - 15th","",null],"type":"string","description":"* `Daily` - Daily\n* `Weekly - Monday` - Weekly - Monday\n* `Weekly - Tuesday` - Weekly - Tuesday\n* `Weekly - Wednesday` - Weekly - Wednesday\n* `Weekly - Thursday` - Weekly - Thursday\n* `Weekly - Friday` - Weekly - Friday\n* `Weekly - Saturday` - Weekly - Saturday\n* `Weekly - Sunday` - Weekly - Sunday\n* `Monthly - 1st` - Monthly - 1st\n* `Monthly - 15th` - Monthly - 15th","x-spec-enum-id":"4b2def200351ec56","nullable":true},"finding_risk_accepted":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["alert"]},"scan_added_empty":{"enum":["slack","msteams","mail","webhooks","alert",""],"type":"string","x-spec-enum-id":"1b984ac114f52c4c","description":"Triggered whenever an (re-)import has been done (even if that created/updated/closed no findings).\n\n* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert"}}},"Operation":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"duration":{"type":"string","nullable":true,"readOnly":true},"errors":{"type":"array","items":{"$ref":"#/components/schemas/GenericMessage"}},"operation":{"enum":["DISCOVER","SYNC","",null],"type":"string","x-spec-enum-id":"60d91fd4719782f6","nullable":true,"description":"The type of operation that is currently being ran on a given connector\n\n* `DISCOVER` - DISCOVER\n* `SYNC` - SYNC"},"status":{"enum":["SUCCESS","ERROR","TIMEOUT","PENDING","",null],"type":"string","x-spec-enum-id":"eafe5fec03783907","nullable":true,"description":"The status of the operation at a given point in time\n\n* `SUCCESS` - SUCCESS\n* `ERROR` - ERROR\n* `TIMEOUT` - TIMEOUT\n* `PENDING` - PENDING"},"trigger":{"enum":["SCHEDULED","MANUAL","",null],"type":"string","x-spec-enum-id":"b656895639c7afd7","nullable":true,"description":"Dictates how the operation was triggered\n\n* `SCHEDULED` - SCHEDULED\n* `MANUAL` - MANUAL"},"start_time":{"type":"string","format":"date-time","description":"The time that the operation was started"},"end_time":{"type":"string","format":"date-time","nullable":true,"description":"The time that the operation was completed"}},"required":["duration","id","start_time"]},"PaginatedAnnouncementList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/Announcement"}}}},"PaginatedAppAnalysisList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/AppAnalysis"}},"prefetch":{"type":"object","properties":{"product":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/Product"}},"user":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}}}}}},"PaginatedAssetAPIScanConfigurationList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/AssetAPIScanConfiguration"}},"prefetch":{"type":"object","properties":{"product":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/Product"}},"tool_configuration":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/ToolConfiguration"}}}}}},"PaginatedAssetsList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/Assets"}},"prefetch":{"type":"object","properties":{"authorized_users":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}},"prod_type":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/ProductType"}},"product_manager":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}},"regulations":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/Regulation"}},"sla_configuration":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/SLAConfiguration"}},"team_manager":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}},"technical_contact":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}}}}}},"PaginatedAuditLogList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/AuditLog"}}}},"PaginatedBenchmarkCategoryList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/BenchmarkCategory"}},"prefetch":{"type":"object","properties":{}}}},"PaginatedBenchmarkProductList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/BenchmarkProduct"}},"prefetch":{"type":"object","properties":{"notes":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/Note"}},"product":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/Product"}}}}}},"PaginatedBenchmarkProductSummaryList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/BenchmarkProductSummary"}},"prefetch":{"type":"object","properties":{"product":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/Product"}}}}}},"PaginatedBenchmarkRequirementList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/BenchmarkRequirement"}},"prefetch":{"type":"object","properties":{}}}},"PaginatedBenchmarkTypeList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/BenchmarkType"}}}},"PaginatedBurpRawRequestResponseMultiList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/BurpRawRequestResponseMulti"}}}},"PaginatedDashboardConfigurationList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/DashboardConfiguration"}},"prefetch":{"type":"object","properties":{"user":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}}}}}},"PaginatedDashboardLayoutList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/DashboardLayout"}}}},"PaginatedDashboardTileList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/DashboardTile"}}}},"PaginatedDeletePreviewList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/DeletePreview"}}}},"PaginatedDependencyList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/Dependency"}}}},"PaginatedDevelopmentEnvironmentList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/DevelopmentEnvironment"}}}},"PaginatedDojoGroupList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/DojoGroup"}},"prefetch":{"type":"object","properties":{"users":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}}}}}},"PaginatedEndpointStatusList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/EndpointStatus"}}}},"PaginatedEngagementPresetsList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/EngagementPresets"}},"prefetch":{"type":"object","properties":{"network_locations":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/NetworkLocations"}},"product":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/Product"}},"test_type":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/TestType"}}}}}},"PaginatedEnhancedDojoGroupMemberList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/EnhancedDojoGroupMember"}},"prefetch":{"type":"object","properties":{"user":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}}}}}},"PaginatedEnhancedEndpointList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/EnhancedEndpoint"}}}},"PaginatedEnhancedEngagementList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/EnhancedEngagement"}},"prefetch":{"type":"object","properties":{"build_server":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/ToolConfiguration"}},"files":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/File"}},"lead":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}},"notes":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/Note"}},"orchestration_engine":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/ToolConfiguration"}},"product":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/Product"}},"risk_acceptance":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/RiskAcceptance"}},"source_code_management_server":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/ToolConfiguration"}}}}}},"PaginatedEnhancedOrganizationList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/EnhancedOrganization"}},"prefetch":{"type":"object","properties":{"authorized_users":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}}}}}},"PaginatedEnhancedProductGroupList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/EnhancedProductGroup"}},"prefetch":{"type":"object","properties":{"product":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/Product"}}}}}},"PaginatedEnhancedProductMemberList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/EnhancedProductMember"}},"prefetch":{"type":"object","properties":{"product":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/Product"}},"user":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}}}}}},"PaginatedEnhancedProductTypeGroupList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/EnhancedProductTypeGroup"}},"prefetch":{"type":"object","properties":{"product_type":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/ProductType"}}}}}},"PaginatedEnhancedProductTypeList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/EnhancedProductType"}},"prefetch":{"type":"object","properties":{"authorized_users":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}}}}}},"PaginatedEnhancedProductTypeMemberList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/EnhancedProductTypeMember"}},"prefetch":{"type":"object","properties":{"product_type":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/ProductType"}},"user":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}}}}}},"PaginatedEnhancedRiskAcceptanceList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/EnhancedRiskAcceptance"}}}},"PaginatedEnhancedSystemSettingsList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/EnhancedSystemSettings"}}}},"PaginatedEnhancedUserList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/EnhancedUser"}}}},"PaginatedExtendedConfigurationPermissionList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/ExtendedConfigurationPermission"}}}},"PaginatedExtendedUserContactInfoList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/ExtendedUserContactInfo"}},"prefetch":{"type":"object","properties":{"user":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}}}}}},"PaginatedFindingTemplateList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/FindingTemplate"}}}},"PaginatedFindingsList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/Findings"}},"prefetch":{"type":"object","properties":{"auth_issues":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/EngagementCheckList"}},"author_issues":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/EngagementCheckList"}},"config_issues":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/EngagementCheckList"}},"crypto_issues":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/EngagementCheckList"}},"data_issues":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/EngagementCheckList"}},"defect_review_requested_by":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}},"duplicate_finding":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/Finding"}},"endpoint_set":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/Endpoint"}},"endpoints":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/Endpoint"}},"files":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/File"}},"finding_group_set":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/FindingGroup"}},"found_by":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/TestType"}},"last_reviewed_by":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}},"mitigated_by":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}},"notes":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/Note"}},"other_issues":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/EngagementCheckList"}},"reporter":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}},"review_requested_by":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}},"reviewers":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}},"risk_acceptance_set":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/RiskAcceptance"}},"sensitive_issues":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/EngagementCheckList"}},"session_issues":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/EngagementCheckList"}},"sonarqube_issue":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/SonarqubeIssue"}},"test":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/Test"}}}}}},"PaginatedFireWallList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/FireWall"}}}},"PaginatedFullFindingGroupList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/FullFindingGroup"}},"prefetch":{"type":"object","properties":{"creator":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}},"findings":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/Finding"}},"test":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/Test"}}}}}},"PaginatedGlobalRoleList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/GlobalRole"}},"prefetch":{"type":"object","properties":{"user":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}}}}}},"PaginatedJIRAInstanceList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/JIRAInstance"}}}},"PaginatedJIRAIssueList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/JIRAIssue"}}}},"PaginatedJIRAProjectList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/JIRAProject"}},"prefetch":{"type":"object","properties":{"engagement":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/FindingEngagement"}},"jira_instance":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/JIRAInstance"}},"product":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/Product"}}}}}},"PaginatedLanguageList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/Language"}},"prefetch":{"type":"object","properties":{"language":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/LanguageType"}},"product":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/Product"}},"user":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}}}}}},"PaginatedLanguageTypeList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/LanguageType"}}}},"PaginatedLegacyAuditLogList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/LegacyAuditLog"}}}},"PaginatedLocationFindingReferenceList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/LocationFindingReference"}}}},"PaginatedLocationList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/Location"}}}},"PaginatedLocationProductReferenceList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/LocationProductReference"}}}},"PaginatedMaintenanceWindowList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/MaintenanceWindow"}}}},"PaginatedMetaList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/Meta"}}}},"PaginatedMitigationPolicyList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/MitigationPolicy"}}}},"PaginatedNetworkLocationsList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/NetworkLocations"}}}},"PaginatedNoteList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/Note"}}}},"PaginatedNoteTypeList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/NoteType"}}}},"PaginatedNotificationWebhooksList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/NotificationWebhooks"}}}},"PaginatedNotificationsList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/Notifications"}},"prefetch":{"type":"object","properties":{"product":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/Product"}},"user":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}}}}}},"PaginatedOperationList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/Operation"}}}},"PaginatedPrioritizationEngineList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/PrioritizationEngine"}}}},"PaginatedProAnsweredSurveyList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/ProAnsweredSurvey"}},"prefetch":{"type":"object","properties":{"assignee":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}},"engagement":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/FindingEngagement"}},"responder":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}}}}}},"PaginatedProGeneratedReportListList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/ProGeneratedReportList"}}}},"PaginatedProOpenSurveyList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/ProOpenSurvey"}},"prefetch":{"type":"object","properties":{}}}},"PaginatedProQuestionList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/ProQuestion"}},"prefetch":{"type":"object","properties":{}}}},"PaginatedProReportBlockListList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/ProReportBlockList"}}}},"PaginatedProReportTemplateListList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/ProReportTemplateList"}}}},"PaginatedProReportThemeList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/ProReportTheme"}}}},"PaginatedProSurveyList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/ProSurvey"}},"prefetch":{"type":"object","properties":{}}}},"PaginatedProductAPIScanConfigurationList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/ProductAPIScanConfiguration"}},"prefetch":{"type":"object","properties":{"product":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/Product"}},"tool_configuration":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/ToolConfiguration"}}}}}},"PaginatedProductsList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/Products"}},"prefetch":{"type":"object","properties":{"authorized_users":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}},"prod_type":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/ProductType"}},"product_manager":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}},"regulations":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/Regulation"}},"sla_configuration":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/SLAConfiguration"}},"team_manager":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}},"technical_contact":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}}}}}},"PaginatedRecordList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/Record"}}}},"PaginatedRegulationList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/Regulation"}}}},"PaginatedRiskAcceptanceList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/RiskAcceptance"}}}},"PaginatedRoleList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/Role"}}}},"PaginatedSLAConfigurationList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/SLAConfiguration"}}}},"PaginatedSonarqubeIssueList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/SonarqubeIssue"}}}},"PaginatedSonarqubeIssueTransitionList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/SonarqubeIssueTransition"}}}},"PaginatedTestImportList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/TestImport"}}}},"PaginatedTestTypeList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/TestType"}}}},"PaginatedTestsList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/Tests"}},"prefetch":{"type":"object","properties":{"api_scan_configuration":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/ProductAPIScanConfiguration"}},"engagement":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/FindingEngagement"}},"environment":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/FindingEnvironment"}},"files":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/File"}},"lead":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}},"notes":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/Note"}},"test_type":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/TestType"}}}}}},"PaginatedToolConfigurationList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/ToolConfiguration"}},"prefetch":{"type":"object","properties":{"tool_type":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/ToolType"}}}}}},"PaginatedToolProductSettingsList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/ToolProductSettings"}},"prefetch":{"type":"object","properties":{"notes":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/Note"}},"product":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/Product"}},"tool_configuration":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/ToolConfiguration"}}}}}},"PaginatedToolTypeList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/ToolType"}}}},"PaginatedURLList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/URL"}}}},"PaginatedUnassignedFindingList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/UnassignedFinding"}},"prefetch":{"type":"object","properties":{"reporter":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/AddUser"}},"test_type":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/TestType"}}}}}},"PaginatedUsageRecordList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/UsageRecord"}}}},"PaginatedWidgetCatalogResponseList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer","example":123},"next":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=400&limit=100"},"previous":{"type":"string","nullable":true,"format":"uri","example":"http://api.example.org/accounts/?offset=200&limit=100"},"results":{"type":"array","items":{"$ref":"#/components/schemas/WidgetCatalogResponse"}}}},"PatchedAnnouncementRequest":{"type":"object","properties":{"message":{"type":"string","minLength":1,"description":"This dismissable message will be displayed on all pages for authenticated users. It can contain basic html tags, for example <a href='https://www.fred.com' style='color: #337ab7;' target='_blank'>https://example.com</a>","maxLength":500},"style":{"enum":["info","success","warning","danger"],"type":"string","x-spec-enum-id":"6f65abe0aab2c78c","description":"The style of banner to display. (info, success, warning, danger)\n\n* `info` - Info\n* `success` - Success\n* `warning` - Warning\n* `danger` - Danger"},"dismissable":{"type":"boolean","title":"Dismissable?","description":"Ticking this box allows users to dismiss the current announcement"}}},"PatchedAppAnalysisRequest":{"type":"object","properties":{"tags":{"type":"array","items":{"type":"string","minLength":1}},"name":{"type":"string","minLength":1,"maxLength":200},"confidence":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true,"title":"Confidence level"},"version":{"type":"string","nullable":true,"title":"Version Number","maxLength":200},"icon":{"type":"string","nullable":true,"maxLength":200},"website":{"type":"string","format":"uri","nullable":true,"maxLength":400},"website_found":{"type":"string","format":"uri","nullable":true,"maxLength":400},"product":{"type":"integer"},"user":{"type":"integer"}}},"PatchedAssetAPIScanConfigurationRequest":{"type":"object","properties":{"asset":{"type":"integer"},"service_key_1":{"type":"string","nullable":true,"maxLength":200},"service_key_2":{"type":"string","nullable":true,"maxLength":200},"service_key_3":{"type":"string","nullable":true,"maxLength":200},"tool_configuration":{"type":"integer"}}},"PatchedAssetsRequest":{"type":"object","description":"Extend from the BaseModelSerializer to allow for generalized extensions.","properties":{"tags":{"type":"array","items":{"type":"string","minLength":1}},"organization":{"type":"integer"},"asset_numeric_grade":{"type":"integer","nullable":true},"enable_asset_tag_inheritance":{"type":"boolean","default":false},"asset_managers":{"type":"integer","nullable":true},"business_criticality":{"enum":["very high","high","medium","low","very low","none","",null],"type":"string","description":"* `very high` - Very High\n* `high` - High\n* `medium` - Medium\n* `low` - Low\n* `very low` - Very Low\n* `none` - None","x-spec-enum-id":"ef412461eb271471","nullable":true},"platform":{"enum":["web service","desktop","iot","mobile","web","",null],"type":"string","description":"* `web service` - API\n* `desktop` - Desktop\n* `iot` - Internet of Things\n* `mobile` - Mobile\n* `web` - Web","x-spec-enum-id":"48ed03cfd9c8641d","nullable":true},"lifecycle":{"enum":["construction","production","retirement","",null],"type":"string","description":"* `construction` - Construction\n* `production` - Production\n* `retirement` - Retirement","x-spec-enum-id":"65f9d93250b96377","nullable":true},"origin":{"enum":["third party library","purchased","contractor","internal","open source","outsourced","",null],"type":"string","description":"* `third party library` - Third Party Library\n* `purchased` - Purchased\n* `contractor` - Contractor Developed\n* `internal` - Internally Developed\n* `open source` - Open Source\n* `outsourced` - Outsourced","x-spec-enum-id":"435026afe6c513fa","nullable":true},"parent":{"type":"integer","nullable":true},"prioritization_engine":{"type":"integer","nullable":true},"name":{"type":"string","minLength":1,"maxLength":255},"description":{"type":"string","minLength":1,"maxLength":4000},"user_records":{"type":"integer","maximum":2147483647,"minimum":0,"nullable":true,"description":"Estimate the number of user records within the application."},"revenue":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$","nullable":true,"description":"Estimate the application's revenue."},"external_audience":{"type":"boolean","description":"Specify if the application is used by people outside the organization."},"internet_accessible":{"type":"boolean","description":"Specify if the application is accessible from the public internet."},"enable_simple_risk_acceptance":{"type":"boolean","description":"Allows simple risk acceptance by checking/unchecking a checkbox."},"enable_full_risk_acceptance":{"type":"boolean","description":"Allows full risk acceptance using a risk acceptance form, expiration date, uploaded proof, etc."},"disable_sla_breach_notifications":{"type":"boolean","description":"Disable SLA breach notifications if configured in the global settings"},"technical_contact":{"type":"integer","nullable":true},"team_manager":{"type":"integer","nullable":true},"sla_configuration":{"type":"integer"},"regulations":{"type":"array","items":{"type":"integer"}}}},"PatchedBenchmarkCategoryRequest":{"type":"object","description":"Base serializer for all models.","properties":{"name":{"type":"string","minLength":1,"maxLength":300},"objective":{"type":"string","minLength":1},"references":{"type":"string","nullable":true},"enabled":{"type":"boolean"},"type":{"type":"integer","title":"Benchmark Type"}}},"PatchedBenchmarkProductRequest":{"type":"object","description":"Base serializer for all models.","properties":{"pass_fail":{"type":"boolean","title":"Pass","description":"Does the product meet the requirement?"},"enabled":{"type":"boolean","description":"Applicable for this specific product."},"product":{"type":"integer"},"control":{"type":"integer"}}},"PatchedBenchmarkProductSummaryRequest":{"type":"object","description":"Base serializer for all models.","properties":{"desired_level":{"enum":["Level 1","Level 2","Level 3"],"type":"string","description":"* `Level 1` - Level 1\n* `Level 2` - Level 2\n* `Level 3` - Level 3","x-spec-enum-id":"51d382524500f67b"},"current_level":{"enum":["Level 1","Level 2","Level 3","",null],"type":"string","description":"* `Level 1` - Level 1\n* `Level 2` - Level 2\n* `Level 3` - Level 3","x-spec-enum-id":"51d382524500f67b","nullable":true},"asvs_level_1_benchmark":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"description":"Total number of active benchmarks for this application."},"asvs_level_1_score":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"description":"ASVS Level 1 Score"},"asvs_level_2_benchmark":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"description":"Total number of active benchmarks for this application."},"asvs_level_2_score":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"description":"ASVS Level 2 Score"},"asvs_level_3_benchmark":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"description":"Total number of active benchmarks for this application."},"asvs_level_3_score":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"description":"ASVS Level 3 Score"},"publish":{"type":"boolean","description":"Publish score to Product."},"product":{"type":"integer"},"benchmark_type":{"type":"integer"}}},"PatchedBenchmarkRequirementRequest":{"type":"object","description":"Base serializer for all models.","properties":{"objective_number":{"type":"string","nullable":true,"maxLength":15},"objective":{"type":"string","minLength":1},"references":{"type":"string","nullable":true},"level_1":{"type":"boolean"},"level_2":{"type":"boolean"},"level_3":{"type":"boolean"},"enabled":{"type":"boolean"},"category":{"type":"integer"}}},"PatchedBenchmarkTypeRequest":{"type":"object","description":"Base serializer for all models.","properties":{"name":{"type":"string","minLength":1,"maxLength":300},"version":{"type":"string","minLength":1,"maxLength":15},"benchmark_source":{"enum":["PCI","OWASP ASVS","OWASP Mobile ASVS",null],"type":"string","description":"* `PCI` - PCI\n* `OWASP ASVS` - OWASP ASVS\n* `OWASP Mobile ASVS` - OWASP Mobile ASVS","x-spec-enum-id":"091a6ccd03b2ee84","nullable":true},"enabled":{"type":"boolean"}}},"PatchedBurpRawRequestResponseMultiRequest":{"type":"object","properties":{"burpRequestBase64":{"type":"string","minLength":1},"burpResponseBase64":{"type":"string","minLength":1},"finding":{"type":"integer","nullable":true}}},"PatchedDashboardConfigurationRequest":{"type":"object","properties":{"user":{"type":"array","items":{"type":"integer","title":"Configuration Owner"},"title":"Configuration Owner"},"graphs":{"type":"boolean","title":"Show Graphs"},"tables":{"type":"boolean","title":"Show Tables"},"questionnaires":{"type":"boolean","title":"Show Questionaires"}}},"PatchedDashboardLayoutRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"is_shared":{"type":"boolean","title":"Shared","description":"If true, this layout is published as a template available to every user."},"layout":{"description":"Map of widget id -> grid position {x, y, w, h, min_w, min_h}."},"widgets":{"description":"Ordered list of widget configurations (type, title, refresh_interval, config)."},"settings":{"description":"Layout-level options such as grid density and column count."}}},"PatchedDashboardTileRequest":{"type":"object","properties":{"model":{"enum":["product","engagement","test","finding","endpoint","sla","scan-time","prod-grade",""],"type":"string","x-spec-enum-id":"a6e596d1d03709b5","title":"Tile Type","description":"The type of data to display within this tile.\n\n* `product` - Product\n* `engagement` - Engagement\n* `test` - Test\n* `finding` - Finding\n* `endpoint` - Endpoint\n* `sla` - SLA Violation\n* `scan-time` - Scan Time Violation\n* `prod-grade` - Product Grade"},"filters":{"nullable":true,"title":"Tile Filters","description":"The filters to obtain the data count for this tile."},"icon":{"enum":["align-left","box-archive","bars","ban","bolt","bug","bullseye","calendar-days","certificate","check","code","gear","clock","download","circle-exclamation","file","filter","fire-extinguisher","flag","house","circle-info","lock","circle-question","magnifying-glass","list-check","lock-open","user",""],"type":"string","x-spec-enum-id":"c3556497146d88cf","title":"Tile Icon","description":"The icon to display within this tile.\n\n* `align-left` - Align Left\n* `box-archive` - Archive\n* `bars` - Bars\n* `ban` - Ban\n* `bolt` - Bolt\n* `bug` - Bug\n* `bullseye` - Bullseye\n* `calendar-days` - Calendar\n* `certificate` - Certificate\n* `check` - Check\n* `code` - Code\n* `gear` - Cog\n* `clock` - Clock\n* `download` - Download\n* `circle-exclamation` - Exclamation\n* `file` - File\n* `filter` - Filter\n* `fire-extinguisher` - Fire Extinguisher\n* `flag` - Flag\n* `house` - Home\n* `circle-info` - Info\n* `lock` - Lock\n* `circle-question` - Question\n* `magnifying-glass` - Search\n* `list-check` - Tasks\n* `lock-open` - Unlock\n* `user` - User"},"header":{"type":"string","title":"Tile Header","description":"The header text to display under the count of this tile.","maxLength":64},"footer":{"type":"string","title":"Tile Footer","description":"The footer text to display in the button of this tile.","maxLength":64},"color":{"enum":["red","orange","yellow","green","teal","cyan","blue","indigo","purple","pink","dark","light",""],"type":"string","x-spec-enum-id":"9c9a36b0f59676ad","title":"Tile Color","description":"The color of this tile (if dynamic tile is enabled, selected color will be ignored).\n\n* `red` - Red\n* `orange` - Orange\n* `yellow` - Yellow\n* `green` - Green\n* `teal` - Teal\n* `cyan` - Cyan\n* `blue` - Blue\n* `indigo` - Indigo\n* `purple` - Purple\n* `pink` - Pink\n* `dark` - Dark\n* `light` - Light"},"dynamic":{"type":"boolean","title":"Dynamic Color Tile","description":"When selected, the color of this tile will dynamically change based on the minimum and maximum threshold."},"minimum":{"type":"integer","maximum":2147483647,"minimum":0,"nullable":true,"title":"Dynamic Color Minimum","description":"The minimum acceptable threshold for this tile's count (i.e. green in color)."},"maximum":{"type":"integer","maximum":2147483647,"minimum":0,"nullable":true,"title":"Dynamic Color Maximum","description":"The maximum acceptable threshold for this tile's count (i.e. red in color)."}}},"PatchedDependencyRequest":{"type":"object","description":"Serializer for the Dependency model with primary keys for related objects.","properties":{"tags":{"type":"array","items":{"type":"string","minLength":1}},"purl_type":{"type":"string","minLength":1,"description":"The package type/ecosystem (e.g., maven, npm, pypi, golang).","maxLength":64},"namespace":{"type":"string","description":"The type-specific package namespace (e.g., groupId for Maven, scope for npm).","maxLength":256},"name":{"type":"string","description":"The name of the package.","maxLength":256},"version":{"type":"string","description":"The version of the package.","maxLength":128},"qualifiers":{"type":"string","description":"Package URL qualifiers (e.g., 'arch=x86_64&distro=ubuntu-22.04').","maxLength":1024},"subpath":{"type":"string","description":"A subpath within the package.","maxLength":512},"purl_validation_failure":{"type":"boolean","description":"Dictates whether the dependency was found to have Package URL validation issues during creation"},"artifact_hashes":{"description":"Mapping of hash algorithms to hash values for this dependency"}}},"PatchedDevelopmentEnvironmentRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200}}},"PatchedDojoGroupRequest":{"type":"object","description":"Base serializer for all models.","properties":{"configuration_permissions":{"type":"array","items":{"type":"integer","nullable":true}},"email":{"type":"string","format":"email","nullable":true,"pattern":"^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$"},"name":{"type":"string","minLength":1,"maxLength":255},"description":{"type":"string","nullable":true,"maxLength":4000},"social_provider":{"enum":["AzureAD","Remote","",null],"type":"string","x-spec-enum-id":"fe57c2b04188fb94","nullable":true,"title":"Social Authentication Provider","description":"Group imported from a social provider.\n\n* `AzureAD` - AzureAD\n* `Remote` - Remote"}}},"PatchedEndpointStatusRequest":{"type":"object","properties":{"date":{"type":"string","format":"date"},"mitigated":{"type":"boolean"},"false_positive":{"type":"boolean"},"out_of_scope":{"type":"boolean"},"risk_accepted":{"type":"boolean"},"mitigated_by":{"type":"integer","nullable":true},"endpoint":{"type":"integer"},"finding":{"type":"integer"}}},"PatchedEngagementPresetsRequest":{"type":"object","properties":{"title":{"type":"string","minLength":1,"description":"Brief description of preset.","maxLength":500},"notes":{"type":"string","nullable":true,"description":"Description of what needs to be tested or setting up environment for testing","maxLength":2000},"scope":{"type":"string","description":"Scope of Engagement testing, IP's/Resources/URL's)","maxLength":800},"product":{"type":"integer"},"test_type":{"type":"array","items":{"type":"integer"}},"network_locations":{"type":"array","items":{"type":"integer"}}}},"PatchedEnhancedEndpointRequest":{"type":"object","description":"Extend from the BaseModelSerializer to allow for generalized extensions.","properties":{"protocol":{"type":"string","nullable":true,"description":"The communication protocol/scheme such as 'http', 'ftp', 'dns', etc.","maxLength":20},"userinfo":{"type":"string","nullable":true,"description":"User info as 'alice', 'bob', etc.","maxLength":500},"host":{"type":"string","nullable":true,"description":"The host name or IP address. It must not include the port number. For example '127.0.0.1', 'localhost', 'yourdomain.com'.","maxLength":500},"port":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true,"description":"The network port associated with the endpoint."},"path":{"type":"string","nullable":true,"description":"The location of the resource, it must not start with a '/'. For example endpoint/420/edit","maxLength":500},"query":{"type":"string","nullable":true,"description":"The query string, the question mark should be omitted.For example 'group=4&team=8'","maxLength":1000},"fragment":{"type":"string","nullable":true,"description":"The fragment identifier which follows the hash mark. The hash mark should be omitted. For example 'section-13', 'paragraph-2'.","maxLength":500},"product":{"type":"integer","nullable":true},"tags":{"type":"array","items":{"type":"string","minLength":1}}}},"PatchedEnhancedEngagementRequest":{"type":"object","description":"Extend from the BaseModelSerializer to allow for generalized extensions.","properties":{"name":{"type":"string","nullable":true,"maxLength":300},"description":{"type":"string","nullable":true,"maxLength":2000},"version":{"type":"string","nullable":true,"description":"Version of the product the engagement tested.","maxLength":100},"first_contacted":{"type":"string","format":"date","nullable":true},"target_start":{"type":"string","format":"date"},"target_end":{"type":"string","format":"date"},"reason":{"type":"string","nullable":true,"maxLength":2000},"tracker":{"type":"string","format":"uri","nullable":true,"description":"Link to epic or ticket system with changes to version.","maxLength":200},"test_strategy":{"type":"string","format":"uri","nullable":true,"maxLength":200},"threat_model":{"type":"boolean"},"api_test":{"type":"boolean"},"pen_test":{"type":"boolean"},"check_list":{"type":"boolean"},"status":{"enum":["Not Started","Blocked","Cancelled","Completed","In Progress","On Hold","Scheduled","Waiting for Resource",null],"type":"string","description":"* `Not Started` - Not Started\n* `Blocked` - Blocked\n* `Cancelled` - Cancelled\n* `Completed` - Completed\n* `In Progress` - In Progress\n* `On Hold` - On Hold\n* `Scheduled` - Scheduled\n* `Waiting for Resource` - Waiting for Resource","x-spec-enum-id":"ff79738e944f9d44","nullable":true},"engagement_type":{"enum":["Interactive","CI/CD",null],"type":"string","description":"* `Interactive` - Interactive\n* `CI/CD` - CI/CD","x-spec-enum-id":"531df25eeddb1f62","nullable":true},"build_id":{"type":"string","nullable":true,"description":"Build ID of the product the engagement tested.","maxLength":150},"commit_hash":{"type":"string","nullable":true,"description":"Commit hash from repo","maxLength":150},"branch_tag":{"type":"string","nullable":true,"title":"Branch/Tag","description":"Tag or branch of the product the engagement tested.","maxLength":150},"source_code_management_uri":{"type":"string","format":"uri","nullable":true,"title":"Repo","description":"Resource link to source code","maxLength":600},"deduplication_on_engagement":{"type":"boolean","title":"Deduplication within this engagement only","description":"If enabled deduplication will only mark a finding in this engagement as duplicate of another finding if both findings are in this engagement. If disabled, deduplication is on the product level."},"lead":{"type":"integer","nullable":true},"requester":{"type":"integer","nullable":true},"preset":{"type":"integer","nullable":true,"description":"Settings and notes for performing this engagement."},"report_type":{"type":"integer","nullable":true},"product":{"type":"integer"},"build_server":{"type":"integer","nullable":true,"description":"Build server responsible for CI/CD test"},"source_code_management_server":{"type":"integer","nullable":true,"title":"SCM Server","description":"Source code server for CI/CD test"},"orchestration_engine":{"type":"integer","nullable":true,"description":"Orchestration service responsible for CI/CD test"},"tags":{"type":"array","items":{"type":"string","minLength":1}}}},"PatchedEnhancedOrganizationRequest":{"type":"object","description":"Extend from the BaseModelSerializer to allow for generalized extensions.","properties":{"critical_asset":{"type":"boolean","default":false},"key_asset":{"type":"boolean","default":false},"name":{"type":"string","minLength":1,"maxLength":255},"description":{"type":"string","nullable":true,"maxLength":4000}}},"PatchedEnhancedProductTypeRequest":{"type":"object","description":"Extend from the BaseModelSerializer to allow for generalized extensions.","properties":{"name":{"type":"string","minLength":1,"maxLength":255},"description":{"type":"string","nullable":true,"maxLength":4000},"critical_product":{"type":"boolean"},"key_product":{"type":"boolean"}}},"PatchedEnhancedRiskAcceptanceRequest":{"type":"object","description":"Base serializer for all models.","properties":{"is_global":{"type":"boolean","default":false},"recommendation":{"enum":["A","V","M","F","T"],"type":"string","description":"* `A` - Accept (The risk is acknowledged, yet remains)\n* `V` - Avoid (Do not engage with whatever creates the risk)\n* `M` - Mitigate (The risk still exists, yet compensating controls make it less of a threat)\n* `F` - Fix (The risk is eradicated)\n* `T` - Transfer (The risk is transferred to a 3rd party)","x-spec-enum-id":"8690fff015f0d4c3"},"decision":{"enum":["A","V","M","F","T"],"type":"string","description":"* `A` - Accept (The risk is acknowledged, yet remains)\n* `V` - Avoid (Do not engage with whatever creates the risk)\n* `M` - Mitigate (The risk still exists, yet compensating controls make it less of a threat)\n* `F` - Fix (The risk is eradicated)\n* `T` - Transfer (The risk is transferred to a 3rd party)","x-spec-enum-id":"8690fff015f0d4c3"},"accepted_findings":{"type":"array","items":{"type":"integer","nullable":true}},"name":{"type":"string","minLength":1,"description":"Descriptive name which in the future may also be used to group risk acceptances together across engagements and products","maxLength":300},"recommendation_details":{"type":"string","nullable":true,"title":"Security Recommendation Details","description":"Explanation of security recommendation"},"decision_details":{"type":"string","nullable":true,"description":"If a compensating control exists to mitigate the finding or reduce risk, then list the compensating control(s)."},"accepted_by":{"type":"string","nullable":true,"description":"The person that accepts the risk, can be outside of DefectDojo.","maxLength":200},"expiration_date":{"type":"string","format":"date-time","nullable":true,"description":"When the risk acceptance expires, the findings will be reactivated (unless disabled below)."},"expiration_date_warned":{"type":"string","format":"date-time","nullable":true,"description":"(readonly) Date at which notice about the risk acceptance expiration was sent."},"expiration_date_handled":{"type":"string","format":"date-time","nullable":true,"description":"(readonly) When the risk acceptance expiration was handled (manually or by the daily job)."},"reactivate_expired":{"type":"boolean","title":"Reactivate findings on expiration","description":"Reactivate findings when risk acceptance expires?"},"restart_sla_expired":{"type":"boolean","title":"Restart SLA on expiration","description":"When enabled, the SLA for findings is restarted when the risk acceptance expires."},"owner":{"type":"integer","description":"User in DefectDojo owning this acceptance. Only the owner and staff users can edit the risk acceptance."}}},"PatchedEnhancedSystemSettingsRequest":{"type":"object","description":"Base serializer for all models.","properties":{"api_async_import":{"type":"boolean","description":"When enabled, all API based imports and reimports will be processed asynchronously in the background after parsing the submitted report for errors. Query the test ID returned in the response for the 'processing' field to monitor the status of the process"},"ui_async_import":{"type":"boolean","description":"When enabled, all UI based imports and reimports will be processed asynchronously in the background after parsing the submitted report for errors."},"default_group":{"type":"integer","nullable":true,"description":"Dojo_Group ID that newly-created users will be auto-assigned to."},"default_group_role":{"type":"integer","nullable":true,"description":"Role ID applied when newly-created users are auto-assigned to the default group."},"default_group_email_pattern":{"type":"string","description":"Regex pattern matched against a new user's email; the default group is only assigned when the email matches. Empty string disables the pattern check.","maxLength":200},"enable_deduplication":{"type":"boolean","title":"Deduplicate findings","description":"With this setting turned on, DefectDojo deduplicates findings by comparing endpoints, cwe fields, and titles. If two findings share a URL and have the same CWE or title, DefectDojo marks the recent finding as a duplicate. When deduplication is enabled, a list of deduplicated findings is added to the engagement view."},"delete_duplicates":{"type":"boolean","description":"Requires next setting: maximum number of duplicates to retain."},"max_dupes":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true,"title":"Max Duplicates","description":"When enabled, if a single issue reaches the maximum number of duplicates, the oldest will be deleted. Duplicate will not be deleted when left empty. A value of 0 will remove all duplicates."},"email_from":{"type":"string","maxLength":200},"enable_jira":{"type":"boolean","title":"Enable JIRA integration"},"enable_jira_web_hook":{"type":"boolean","description":"Please note: It is strongly recommended to use a secret below and / or IP whitelist the JIRA server using a proxy such as Nginx."},"disable_jira_webhook_secret":{"type":"boolean","title":"Disable web hook secret","description":"Allows incoming requests without a secret (discouraged legacy behaviour)"},"jira_webhook_secret":{"type":"string","nullable":true,"minLength":1,"title":"JIRA Webhook URL","description":"Secret needed in URL for incoming JIRA Webhook","maxLength":64},"jira_minimum_severity":{"enum":["Critical","High","Medium","Low","Info","",null],"type":"string","description":"* `Critical` - Critical\n* `High` - High\n* `Medium` - Medium\n* `Low` - Low\n* `Info` - Info","x-spec-enum-id":"fc5d16a20ed06136","nullable":true},"jira_labels":{"type":"string","nullable":true,"description":"JIRA issue labels space seperated","maxLength":200},"add_vulnerability_id_to_jira_label":{"type":"boolean","title":"Add vulnerability Id as a JIRA label"},"enable_github":{"type":"boolean","title":"Enable GITHUB integration"},"enable_slack_notifications":{"type":"boolean"},"slack_channel":{"type":"string","description":"Optional. Needed if you want to send global notifications.","maxLength":100},"slack_token":{"type":"string","description":"Token required for interacting with Slack. Get one at https://api.slack.com/tokens","maxLength":100},"slack_username":{"type":"string","description":"Optional. Will take your bot name otherwise.","maxLength":100},"enable_msteams_notifications":{"type":"boolean","title":"Enable Microsoft Teams notifications"},"msteams_url":{"type":"string","description":"The full URL of the incoming webhook","maxLength":400},"enable_mail_notifications":{"type":"boolean"},"mail_notifications_to":{"type":"string","maxLength":200},"enable_webhooks_notifications":{"type":"boolean","title":"Enable Webhook notifications"},"webhooks_notifications_timeout":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"description":"How many seconds will DefectDojo waits for response from webhook endpoint"},"enforce_verified_status":{"type":"boolean","title":"Enforce Verified Status - Globally","description":"When enabled, features such as product grading, jira integration, metrics, and reports will only interact with verified findings. This setting will override individually scoped verified toggles."},"enforce_verified_status_jira":{"type":"boolean","title":"Enforce Verified Status - Jira","description":"When enabled, findings must have a verified status to be pushed to jira."},"enforce_verified_status_product_grading":{"type":"boolean","title":"Enforce Verified Status - Product Grading","description":"When enabled, findings must have a verified status to be considered as part of a product's grading."},"enforce_verified_status_metrics":{"type":"boolean","title":"Enforce Verified Status - Metrics","description":"When enabled, findings must have a verified status to be counted in metric calculations, be included in reports, and filters."},"false_positive_history":{"type":"boolean","description":"(EXPERIMENTAL) DefectDojo will automatically mark the finding as a false positive if an equal finding (according to its dedupe algorithm) has been previously marked as a false positive on the same product. ATTENTION: Although the deduplication algorithm is used to determine if a finding should be marked as a false positive, this feature will not work if deduplication is enabled since it doesn't make sense to use both."},"retroactive_false_positive_history":{"type":"boolean","description":"(EXPERIMENTAL) FP History will also retroactively mark/unmark all existing equal findings in the same product as a false positives. Only works if the False Positive History feature is also enabled."},"url_prefix":{"type":"string","description":"URL prefix if DefectDojo is installed in it's own virtual subdirectory.","maxLength":300},"team_name":{"type":"string","maxLength":100},"enable_product_grade":{"type":"boolean","title":"Enable Product Grading","description":"Displays a grade letter next to a product to show the overall health."},"product_grade_a":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"title":"Grade A","description":"Percentage score for an 'A' >="},"product_grade_b":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"title":"Grade B","description":"Percentage score for a 'B' >="},"product_grade_c":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"title":"Grade C","description":"Percentage score for a 'C' >="},"product_grade_d":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"title":"Grade D","description":"Percentage score for a 'D' >="},"product_grade_f":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"title":"Grade F","description":"Percentage score for an 'F' <="},"enable_product_tag_inheritance":{"type":"boolean","description":"Enables product tag inheritance globally for all products. Any tags added on a product will automatically be added to all Engagements, Tests, and Findings"},"enable_benchmark":{"type":"boolean","title":"Enable Benchmarks","description":"Enables Benchmarks such as the OWASP ASVS (Application Security Verification Standard)"},"enable_similar_findings":{"type":"boolean","description":"Enable the query of similar findings on the view finding page. This feature can involve potentially large queries and negatively impact performance"},"engagement_auto_close":{"type":"boolean","title":"Enable Engagement Auto-Close","description":"Closes an engagement after 3 days (default) past due date including last update."},"engagement_auto_close_days":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"description":"Closes an engagement after the specified number of days past due date including last update."},"enable_finding_sla":{"type":"boolean","title":"Enable Finding SLA's","description":"Enables Finding SLA's for time to remediate."},"enable_notify_sla_active":{"type":"boolean","title":"Enable Notify SLA's Breach for active Findings","description":"Enables Notify when time to remediate according to Finding SLA's is breached for active Findings."},"enable_notify_sla_active_verified":{"type":"boolean","title":"Enable Notify SLA's Breach for active, verified Findings","description":"Enables Notify when time to remediate according to Finding SLA's is breached for active, verified Findings."},"enable_notify_sla_jira_only":{"type":"boolean","title":"Enable Notify SLA's Breach only for Findings linked to JIRA","description":"Enables Notify when time to remediate according to Finding SLA's is breached for Findings that are linked to JIRA issues. Notification is disabled for Findings not linked to JIRA issues"},"enable_notify_sla_exponential_backoff":{"type":"boolean","title":"Enable an exponential backoff strategy for SLA breach notifications.","description":"Enable an exponential backoff strategy for SLA breach notifications, e.g. 1, 2, 4, 8, etc. Otherwise it alerts every day"},"allow_anonymous_survey_repsonse":{"type":"boolean","title":"Allow Anonymous Survey Responses","description":"Enable anyone with a link to the survey to answer a survey"},"disclaimer_notifications":{"type":"string","title":"Custom Disclaimer for Notifications","description":"Include this custom disclaimer on all notifications","maxLength":3000},"disclaimer_reports":{"type":"string","title":"Custom Disclaimer for Reports","description":"Include this custom disclaimer on generated reports","maxLength":5000},"disclaimer_reports_forced":{"type":"boolean","title":"Force to add disclaimer reports","description":"Disclaimer will be added to all reports even if user didn't selected 'Include disclaimer'."},"disclaimer_notes":{"type":"string","title":"Custom Disclaimer for Notes","description":"Include this custom disclaimer next to input form for notes","maxLength":3000},"risk_acceptance_form_default_days":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true,"description":"Default expiry period for risk acceptance form."},"risk_acceptance_notify_before_expiration":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true,"title":"Risk acceptance expiration heads up days","description":"Notify X days before risk acceptance expires. Leave empty to disable."},"enable_questionnaires":{"type":"boolean","description":"With this setting turned off, questionnaires will be disabled in the user interface."},"enable_checklists":{"type":"boolean","description":"With this setting turned off, checklists will be disabled in the user interface."},"enable_endpoint_metadata_import":{"type":"boolean","description":"With this setting turned off, endpoint metadata import will be disabled in the user interface."},"enable_user_profile_editable":{"type":"boolean","title":"Enable user profile for writing","description":"When turned on users can edit their profiles"},"enable_product_tracking_files":{"type":"boolean","description":"With this setting turned off, the product tracking files will be disabled in the user interface."},"enable_finding_groups":{"type":"boolean","description":"With this setting turned off, the Finding Groups will be disabled."},"enable_ui_table_based_searching":{"type":"boolean","title":"Enable UI Table Based Filtering/Sorting","description":"With this setting enabled, table headings will contain sort buttons for the current page of data in addition to sorting buttons that consider data from all pages."},"enable_calendar":{"type":"boolean","description":"With this setting turned off, the Calendar will be disabled in the user interface."},"enable_cvss3_display":{"type":"boolean","description":"With this setting turned off, CVSS3 fields will be hidden in the user interface."},"enable_cvss4_display":{"type":"boolean","description":"With this setting turned off, CVSS4 fields will be hidden in the user interface."},"minimum_password_length":{"type":"integer","maximum":48,"minimum":9,"description":"Requires user to set passwords greater than minimum length."},"maximum_password_length":{"type":"integer","maximum":48,"minimum":9,"description":"Requires user to set passwords less than maximum length."},"number_character_required":{"type":"boolean","title":"Password must contain one digit","description":"Requires user passwords to contain at least one digit (0-9)."},"special_character_required":{"type":"boolean","title":"Password must contain one special character","description":"Requires user passwords to contain at least one special character (()[]{}|\\`~!@#$%^&*_-+=;:'\",<>./?)."},"lowercase_character_required":{"type":"boolean","title":"Password must contain one lowercase letter","description":"Requires user passwords to contain at least one lowercase letter (a-z)."},"uppercase_character_required":{"type":"boolean","title":"Password must contain one uppercase letter","description":"Requires user passwords to contain at least one uppercase letter (A-Z)."},"non_common_password_required":{"type":"boolean","title":"Password must not be common","description":"Requires user passwords to not be part of list of common passwords."},"api_expose_error_details":{"type":"boolean","description":"When turned on, the API will expose error details in the response."},"filter_string_matching":{"type":"boolean","title":"Filter String Matching Optimization","description":"When turned on, all filter operations in the UI will require string matches rather than ID. This is a performance enhancement to avoid fetching objects unnecessarily."}}},"PatchedEnhancedUserRequest":{"type":"object","description":"Extend from the BaseModelSerializer to allow for generalized extensions.","properties":{"username":{"type":"string","minLength":1,"description":"Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.","pattern":"^[\\w.@+-]+$","maxLength":150},"first_name":{"type":"string","maxLength":150},"last_name":{"type":"string","maxLength":150},"email":{"type":"string","format":"email","minLength":1,"pattern":"^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$"},"is_active":{"type":"boolean","title":"Active","description":"Designates whether this user should be treated as active. Unselect this instead of deleting accounts."},"is_staff":{"type":"boolean","title":"Staff status","description":"Designates whether the user can log into this admin site."},"is_superuser":{"type":"boolean","title":"Superuser status","description":"Designates that this user has all permissions without explicitly assigning them."},"password":{"type":"string","writeOnly":true,"minLength":1},"configuration_permissions":{"type":"array","items":{"type":"integer","nullable":true}}}},"PatchedExtendedUserContactInfoRequest":{"type":"object","properties":{"title":{"type":"string","nullable":true,"maxLength":150},"phone_number":{"type":"string","description":"Phone number must be entered in the format: '+999999999'. Up to 15 digits allowed.","pattern":"^\\+?1?\\d{9,15}$","maxLength":15},"cell_number":{"type":"string","description":"Phone number must be entered in the format: '+999999999'. Up to 15 digits allowed.","pattern":"^\\+?1?\\d{9,15}$","maxLength":15},"twitter_username":{"type":"string","nullable":true,"maxLength":150},"github_username":{"type":"string","nullable":true,"maxLength":150},"slack_username":{"type":"string","nullable":true,"title":"Slack Email Address","description":"Email address associated with your slack account","maxLength":150},"slack_user_id":{"type":"string","nullable":true,"maxLength":25},"block_execution":{"type":"boolean","description":"Instead of async deduping a finding the findings will be deduped synchronously and will 'block' the user until completion."},"deduplication_execution_mode":{"enum":["async","async_wait","sync","",null],"type":"string","x-spec-enum-id":"bf7fb8ff28520a46","nullable":true,"description":"Controls how import/reimport deduplication post-processing is executed. 'Async' dispatches it to the background and returns immediately (default). 'Async, wait for deduplication' dispatches to the background but waits for deduplication to finish before responding, so notifications and statistics reflect the deduplicated state. 'Synchronous' runs the import deduplication inline. Can be overridden per request. Independent of block_execution, which forces all async tasks (notifications, jira, ...) to the foreground.\n\n* `async` - Async (do not wait)\n* `async_wait` - Async, wait for deduplication\n* `sync` - Synchronous (block)"},"force_password_reset":{"type":"boolean","description":"Forces this user to reset their password on next login."},"token_last_reset":{"type":"string","format":"date-time","nullable":true,"description":"Timestamp of the most recent API token reset for this user."},"password_last_reset":{"type":"string","format":"date-time","nullable":true,"description":"Timestamp of the most recent password reset for this user."},"user":{"type":"integer"}}},"PatchedFileNameRequest":{"type":"object","properties":{"file_name":{"type":"string","minLength":1}}},"PatchedFindingNoteRequest":{"type":"object","properties":{"note_id":{"type":"integer"}}},"PatchedFindingTemplateRequest":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":1000},"cwe":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true},"cvssv3":{"type":"string","nullable":true,"minLength":1,"title":"CVSS v3 vector","description":"Common Vulnerability Scoring System version 3 (CVSSv3) score associated with this finding.","maxLength":117},"cvssv3_score":{"type":"number","format":"double","nullable":true,"description":"CVSSv3 score"},"cvssv4":{"type":"string","nullable":true,"minLength":1,"title":"CVSS4 vector","description":"Common Vulnerability Scoring System version 4 (CVSS4) score associated with this finding.","maxLength":255},"cvssv4_score":{"type":"number","format":"double","nullable":true,"description":"CVSSv4 score"},"severity":{"type":"string","nullable":true,"maxLength":200},"description":{"type":"string","nullable":true},"mitigation":{"type":"string","nullable":true},"impact":{"type":"string","nullable":true},"references":{"type":"string","nullable":true},"fix_available":{"type":"boolean","nullable":true,"description":"Indicates if a fix is available for this vulnerability type"},"fix_version":{"type":"string","nullable":true,"description":"Version where fix is available","maxLength":100},"planned_remediation_version":{"type":"string","nullable":true,"description":"Target version for remediation","maxLength":99},"effort_for_fixing":{"type":"string","nullable":true,"description":"Effort estimate for fixing (e.g., Low/Medium/High)","maxLength":99},"steps_to_reproduce":{"type":"string","nullable":true,"description":"Standard reproduction steps for this vulnerability type"},"severity_justification":{"type":"string","nullable":true,"description":"Explanation of why this severity level is appropriate"},"component_name":{"type":"string","nullable":true,"description":"Affected component name (e.g., library name)","maxLength":500},"component_version":{"type":"string","nullable":true,"description":"Affected component version","maxLength":100},"notes":{"type":"string","nullable":true,"description":"Note content to add when applying this template"},"endpoints_text":{"type":"string","nullable":true,"description":"Endpoint URLs (one per line)"},"tags":{"type":"array","items":{"type":"string","minLength":1}}}},"PatchedFindingsRequest":{"type":"object","description":"Regression guard for Sentry DJANGO-D2P.\n\nDRF ``ModelSerializer.update()`` calls ``instance.<m2m>.set(new_list)`` for\nevery M2M field present in ``validated_data``, even when the new list is\nidentical to the current one. On tagulous ``TagField``s that triggers a\nfull teardown + re-add of the M2M, which runs SELECT + UPDATE ``count``\nbookkeeping per tag (N+1).\n\nThis mixin short-circuits the ``.set()`` call per ``TagListSerializerField``\nwhen the normalized incoming list equals ``instance.<attr>.get_tag_list()``.\nAll other M2M fields keep the stock DRF behavior.\n\nOpt in by adding ``SkipUnchangedTagsMixin`` to the base-class list of any\nserializer that exposes a ``TagListSerializerField`` for update.","properties":{"mitigated":{"type":"string","format":"date-time","nullable":true},"mitigated_by":{"type":"integer","nullable":true},"push_to_jira":{"type":"boolean","default":false},"found_by":{"type":"array","items":{"type":"integer"}},"vulnerability_ids":{"type":"array","items":{"$ref":"#/components/schemas/VulnerabilityIdRequest"}},"reporter":{"type":"integer"},"endpoints":{"type":"array","items":{"type":"integer"}},"priority":{"type":"number","format":"double","minimum":0,"nullable":true,"description":"The priority in which a finding should be considered for mitigation next"},"risk":{"enum":["Low","Medium","Needs Action","Urgent",null],"type":"string","x-spec-enum-id":"c09ae27af59e77a8","nullable":true,"description":"The risk score in which a finding poses to the system it was discovered on\n\n* `Low` - Low\n* `Medium` - Medium\n* `Needs Action` - Needs Action\n* `Urgent` - Urgent"},"overridden_priority_risk_calculation":{"type":"boolean","default":false,"description":"Dictates whether this object has had its priority/risk calculation manually overridden. If true, the priority and risk values will not be automatically recalculated again until this setting is set to false."},"owners":{"type":"integer","nullable":true,"description":"The group of users responsible for this finding (Dojo_Group ID)."},"mitigation_policy":{"type":"integer","nullable":true,"description":"The standardized mitigation policy for this finding"},"push_to_integrator":{"type":"boolean","default":false,"description":"Dictates whether this object will be dispatched to the associated integrator, and override the configured setting that decides if the object should be pushed or not."},"endpoints_to_add":{"type":"string","nullable":true,"minLength":1,"description":"A space deliminated list of endpoints that will be added to this Finding."},"recalculate_hash_code":{"type":"boolean","writeOnly":true,"default":false,"description":"When set to True, the hash code of the finding will be recalculated. This is flag is intended for power users. Please note, this may have an adverse effect on identifying duplicates through deduplication and reimport."},"title":{"type":"string","minLength":1,"description":"A short description of the flaw.","maxLength":511},"date":{"type":"string","format":"date","description":"The date the flaw was discovered."},"sla_start_date":{"type":"string","format":"date","nullable":true,"description":"(readonly)The date used as start date for SLA calculation. Set by expiring risk acceptances. Empty by default, causing a fallback to 'date'."},"sla_expiration_date":{"type":"string","format":"date","nullable":true,"description":"(readonly)The date SLA expires for this finding. Empty by default, causing a fallback to 'date'."},"cwe":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true,"description":"The CWE number associated with this flaw."},"epss_score":{"type":"number","format":"double","maximum":1.0,"minimum":0.0,"nullable":true,"description":"EPSS score for the CVE. Describes how likely it is the vulnerability will be exploited in the next 30 days."},"epss_percentile":{"type":"number","format":"double","maximum":1.0,"minimum":0.0,"nullable":true,"description":"EPSS percentile for the CVE. Describes how many CVEs are scored at or below this one."},"known_exploited":{"type":"boolean","description":"Whether this vulnerability is known to have been exploited in the wild."},"ransomware_used":{"type":"boolean","title":"Used in Ransomware","description":"Whether this vulnerability is known to have been leveraged as part of a ransomware campaign."},"kev_date":{"type":"string","format":"date","nullable":true,"title":"KEV Date Added","description":"The date the vulnerability was added to the KEV catalog."},"cvssv3":{"type":"string","nullable":true,"minLength":1,"title":"CVSS3 Vector","description":"Common Vulnerability Scoring System version 3 (CVSS3) score associated with this finding.","maxLength":117},"cvssv3_score":{"type":"number","format":"double","maximum":10.0,"minimum":0.0,"nullable":true,"title":"CVSS3 Score","description":"Numerical CVSSv3 score for the vulnerability. If the vector is given, the score is updated while saving the finding. The value must be between 0-10."},"cvssv4":{"type":"string","nullable":true,"minLength":1,"title":"CVSS4 vector","description":"Common Vulnerability Scoring System version 4 (CVSS4) score associated with this finding.","maxLength":255},"cvssv4_score":{"type":"number","format":"double","maximum":10.0,"minimum":0.0,"nullable":true,"description":"Numerical CVSSv4 score for the vulnerability. If the vector is given, the score is updated while saving the finding. The value must be between 0-10."},"severity":{"type":"string","minLength":1,"description":"The severity level of this flaw (Critical, High, Medium, Low, Info).","maxLength":200},"description":{"type":"string","minLength":1,"description":"Longer more descriptive information about the flaw."},"mitigation":{"type":"string","nullable":true,"description":"Text describing how to best fix the flaw."},"fix_available":{"type":"boolean","nullable":true,"description":"Denotes if there is a fix available for this flaw."},"fix_version":{"type":"string","nullable":true,"description":"Version of the affected component in which the flaw is fixed.","maxLength":100},"impact":{"type":"string","nullable":true,"description":"Text describing the impact this flaw has on systems, products, enterprise, etc."},"steps_to_reproduce":{"type":"string","nullable":true,"description":"Text describing the steps that must be followed in order to reproduce the flaw / bug."},"severity_justification":{"type":"string","nullable":true,"description":"Text describing why a certain severity was associated with this flaw."},"references":{"type":"string","nullable":true,"description":"The external documentation available for this flaw."},"active":{"type":"boolean","description":"Denotes if this flaw is active or not."},"verified":{"type":"boolean","description":"Denotes if this flaw has been manually verified by the tester."},"false_p":{"type":"boolean","title":"False Positive","description":"Denotes if this flaw has been deemed a false positive by the tester."},"duplicate":{"type":"boolean","description":"Denotes if this flaw is a duplicate of other flaws reported."},"out_of_scope":{"type":"boolean","description":"Denotes if this flaw falls outside the scope of the test and/or engagement."},"risk_accepted":{"type":"boolean","description":"Denotes if this finding has been marked as an accepted risk."},"under_review":{"type":"boolean","description":"Denotes is this flaw is currently being reviewed."},"under_defect_review":{"type":"boolean","description":"Denotes if this finding is under defect review."},"is_mitigated":{"type":"boolean","description":"Denotes if this flaw has been fixed."},"numerical_severity":{"type":"string","minLength":1,"description":"The numerical representation of the severity (S0, S1, S2, S3, S4).","maxLength":4},"line":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true,"title":"Line number","description":"Source line number of the attack vector."},"file_path":{"type":"string","nullable":true,"description":"Identified file(s) containing the flaw.","maxLength":4000},"component_name":{"type":"string","nullable":true,"description":"Name of the affected component (library name, part of a system, ...).","maxLength":500},"component_version":{"type":"string","nullable":true,"description":"Version of the affected component.","maxLength":100},"static_finding":{"type":"boolean","title":"Static finding (SAST)","description":"Flaw has been detected from a Static Application Security Testing tool (SAST)."},"dynamic_finding":{"type":"boolean","title":"Dynamic finding (DAST)","description":"Flaw has been detected from a Dynamic Application Security Testing tool (DAST)."},"unique_id_from_tool":{"type":"string","nullable":true,"description":"Vulnerability technical id from the source tool. Allows to track unique vulnerabilities over time across subsequent scans.","maxLength":500},"vuln_id_from_tool":{"type":"string","nullable":true,"title":"Vulnerability ID from tool","description":"Non-unique technical id from the source tool associated with the vulnerability type.","maxLength":500},"sast_source_object":{"type":"string","nullable":true,"description":"Source object (variable, function...) of the attack vector.","maxLength":500},"sast_sink_object":{"type":"string","nullable":true,"description":"Sink object (variable, function...) of the attack vector.","maxLength":500},"sast_source_line":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true,"title":"SAST Source Line number","description":"Source line number of the attack vector."},"sast_source_file_path":{"type":"string","nullable":true,"description":"Source file path of the attack vector.","maxLength":4000},"nb_occurences":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true,"title":"Number of occurences","description":"Number of occurences in the source tool when several vulnerabilites were found and aggregated by the scanner."},"publish_date":{"type":"string","format":"date","nullable":true,"description":"Date when this vulnerability was made publicly available."},"service":{"type":"string","nullable":true,"description":"A service is a self-contained piece of functionality within a Product. This is an optional field which is used in deduplication of findings when set.","maxLength":200},"planned_remediation_date":{"type":"string","format":"date","nullable":true,"description":"The date the flaw is expected to be remediated."},"planned_remediation_version":{"type":"string","nullable":true,"description":"The target version when the vulnerability should be fixed / remediated","maxLength":99},"effort_for_fixing":{"type":"string","nullable":true,"description":"Effort for fixing / remediating the vulnerability (Low, Medium, High)","maxLength":99},"review_requested_by":{"type":"integer","nullable":true,"description":"Documents who requested a review for this finding."},"defect_review_requested_by":{"type":"integer","nullable":true,"description":"Documents who requested a defect review for this flaw."},"sonarqube_issue":{"type":"integer","nullable":true,"description":"The SonarQube issue associated with this finding."},"reviewers":{"type":"array","items":{"type":"integer"},"description":"Documents who reviewed the flaw."},"tags":{"type":"array","items":{"type":"string","minLength":1}}}},"PatchedFullFindingGroupRequest":{"type":"object","properties":{"push_to_jira":{"type":"boolean","default":false},"push_to_integrator":{"type":"boolean","default":false,"description":"Dictates whether this object will be dispatched to the associated integrator, and override the configured setting that decides if the object should be pushed or not."},"name":{"type":"string","minLength":1,"maxLength":255},"test":{"type":"integer"},"findings":{"type":"array","items":{"type":"integer"}}}},"PatchedGlobalRoleRequest":{"type":"object","properties":{"user":{"type":"integer","nullable":true},"group":{"type":"integer","nullable":true},"role":{"type":"integer","nullable":true,"title":"Global role","description":"The global role will be applied to all product types and products."}}},"PatchedJIRAInstanceRequest":{"type":"object","properties":{"configuration_name":{"type":"string","minLength":1,"description":"Enter a name to give to this configuration","maxLength":2000},"url":{"type":"string","format":"uri","minLength":1,"title":"JIRA URL","description":"For more information how to configure Jira, read the DefectDojo documentation.","maxLength":2000},"username":{"type":"string","minLength":1,"title":"Username/Email","description":"Username or Email Address, see DefectDojo documentation for more information.","maxLength":2000},"password":{"type":"string","writeOnly":true,"minLength":1,"title":"Password/Token","description":"Password or API Token, see DefectDojo documentation for more information.","maxLength":2000},"default_issue_type":{"enum":["Task","Story","Epic","Spike","Bug","Security"],"type":"string","x-spec-enum-id":"5ded50425ca94b38","description":"You can define extra issue types in settings.py\n\n* `Task` - Task\n* `Story` - Story\n* `Epic` - Epic\n* `Spike` - Spike\n* `Bug` - Bug\n* `Security` - Security"},"issue_template_dir":{"type":"string","nullable":true,"description":"Choose the folder containing the Django templates used to render the JIRA issue description. These are stored in dojo/templates/issue-trackers. Leave empty to use the default jira_full templates.","maxLength":255},"epic_name_id":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"description":"To obtain the 'Epic name id' visit https://<YOUR JIRA URL>/rest/api/2/field and search for Epic Name. Copy the number out of cf[number] and paste it here."},"open_status_key":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"title":"Reopen Transition ID","description":"Transition ID to Re-Open JIRA issues, visit https://<YOUR JIRA URL>/rest/api/latest/issue/<ANY VALID ISSUE KEY>/transitions?expand=transitions.fields to find the ID for your JIRA instance"},"close_status_key":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"title":"Close Transition ID","description":"Transition ID to Close JIRA issues, visit https://<YOUR JIRA URL>/rest/api/latest/issue/<ANY VALID ISSUE KEY>/transitions?expand=transitions.fields to find the ID for your JIRA instance"},"info_mapping_severity":{"type":"string","minLength":1,"description":"Maps to the 'Priority' field in Jira. For example: Info","maxLength":200},"low_mapping_severity":{"type":"string","minLength":1,"description":"Maps to the 'Priority' field in Jira. For example: Low","maxLength":200},"medium_mapping_severity":{"type":"string","minLength":1,"description":"Maps to the 'Priority' field in Jira. For example: Medium","maxLength":200},"high_mapping_severity":{"type":"string","minLength":1,"description":"Maps to the 'Priority' field in Jira. For example: High","maxLength":200},"critical_mapping_severity":{"type":"string","minLength":1,"description":"Maps to the 'Priority' field in Jira. For example: Critical","maxLength":200},"finding_text":{"type":"string","nullable":true,"description":"Additional text that will be added to the finding in Jira. For example including how the finding was created or who to contact for more information."},"accepted_mapping_resolution":{"type":"string","nullable":true,"title":"Risk Accepted resolution mapping","description":"JIRA issues that are closed in JIRA with one of these resolutions will result in the Finding becoming Risk Accepted in Defect Dojo. JIRA issues that are closed in JIRA with one of these resolutions will result in the Finding becoming Risk Accepted in Defect Dojo. The expiration time for this Risk Acceptance will be determined by the \"Risk acceptance form default days\" in \"System Settings\". This mapping is not used when Findings are pushed to JIRA. In that case the Risk Accepted Findings are closed in JIRA and JIRA sets the default resolution.","maxLength":300},"false_positive_mapping_resolution":{"type":"string","nullable":true,"title":"False Positive resolution mapping","description":"JIRA issues that are closed in JIRA with one of these resolutions will result in the Finding being marked as False Positive Defect Dojo. This mapping is not used when Findings are pushed to JIRA. In that case the Finding is closed in JIRA and JIRA sets the default resolution.","maxLength":300},"global_jira_sla_notification":{"type":"boolean","title":"Globally send SLA notifications as comment?","description":"This setting can be overidden at the Product level"},"finding_jira_sync":{"type":"boolean","title":"Automatically sync Findings with JIRA?","description":"If enabled, this will sync changes to a Finding automatically to JIRA"}}},"PatchedJIRAIssueRequest":{"type":"object","properties":{"jira_id":{"type":"string","minLength":1,"maxLength":200},"jira_key":{"type":"string","minLength":1,"maxLength":200},"jira_creation":{"type":"string","format":"date-time","nullable":true,"description":"The date a Jira issue was created from this finding."},"jira_change":{"type":"string","format":"date-time","nullable":true,"title":"Jira last update","description":"The date the linked Jira issue was last modified."},"jira_project":{"type":"integer","nullable":true},"finding":{"type":"integer","nullable":true},"engagement":{"type":"integer","nullable":true},"finding_group":{"type":"integer","nullable":true}}},"PatchedJIRAProjectRequest":{"type":"object","properties":{"project_key":{"type":"string","maxLength":200},"issue_template_dir":{"type":"string","nullable":true,"description":"Choose the folder containing the Django templates used to render the JIRA issue description. These are stored in dojo/templates/issue-trackers. Leave empty to use the default jira_full templates.","maxLength":255},"component":{"type":"string","maxLength":200},"custom_fields":{"nullable":true,"description":"JIRA custom field JSON mapping of Id to value, e.g. {\"customfield_10122\": [{\"name\": \"8.0.1\"}]}"},"close_transition_fields":{"nullable":true,"description":"JIRA fields to send as part of the Close transition, e.g. {\"resolution\": {\"name\": \"Won't Fix\"}, \"customfield_10200\": \"justification\"}. Use this when the JIRA workflow requires fields on the close transition screen. Fields not on the transition screen are rejected by JIRA."},"reopen_transition_fields":{"nullable":true,"description":"JIRA fields to send as part of the Reopen transition, e.g. {\"customfield_10201\": \"reopened by DefectDojo\"}. Fields not on the transition screen are rejected by JIRA."},"default_assignee":{"type":"string","nullable":true,"description":"JIRA default assignee (name). If left blank then it defaults to whatever is configured in JIRA.","maxLength":200},"jira_labels":{"type":"string","nullable":true,"description":"JIRA issue labels space seperated","maxLength":200},"add_vulnerability_id_to_jira_label":{"type":"boolean","title":"Add vulnerability Id as a JIRA label"},"push_all_issues":{"type":"boolean","description":"Automatically create JIRA tickets for verified findings, assuming enforce_verified_status is True, or for all findings otherwise. Once linked, the JIRA ticket will continue to sync, regardless of status in DefectDojo."},"enable_engagement_epic_mapping":{"type":"boolean"},"epic_issue_type_name":{"type":"string","description":"The name of the of structure that represents an Epic","maxLength":64},"push_notes":{"type":"boolean"},"product_jira_sla_notification":{"type":"boolean","title":"Send SLA notifications as comment?"},"risk_acceptance_expiration_notification":{"type":"boolean","title":"Send Risk Acceptance expiration notifications as comment?"},"enabled":{"type":"boolean","title":"Enable Connection With Jira Project","description":"When disabled, Findings will no longer be pushed to Jira, even if they have already been pushed previously."},"jira_instance":{"type":"integer","nullable":true},"product":{"type":"integer","nullable":true},"engagement":{"type":"integer","nullable":true}}},"PatchedLanguageRequest":{"type":"object","properties":{"files":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true,"title":"Number of files"},"blank":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true,"title":"Number of blank lines"},"comment":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true,"title":"Number of comment lines"},"code":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true,"title":"Number of code lines"},"language":{"type":"integer"},"product":{"type":"integer"},"user":{"type":"integer","nullable":true}}},"PatchedLanguageTypeRequest":{"type":"object","properties":{"language":{"type":"string","minLength":1,"maxLength":100},"color":{"type":"string","nullable":true,"title":"HTML color","maxLength":7}}},"PatchedLicenseManagerRequest":{"type":"object","properties":{"remind_on":{"type":"string","format":"date","nullable":true,"title":"Scheduled Reminder Date","description":"The reminder will occur on the set date"},"enable_reminders":{"type":"boolean","title":"Enable Popup Reminders","description":"When enabled, a popup message will appear as a reminder that the license will expire shortly"},"license_contents":{"type":"string"}}},"PatchedLocationFindingReferenceRequest":{"type":"object","description":"Serializer for the LocationFindingReference model with serializers for the related objects.","properties":{"relationship":{"enum":["owned_by","used_by",""],"type":"string","x-spec-enum-id":"8c638fc6583828e5","description":"The relationship between two locations\n\n* `owned_by` - is owned by\n* `used_by` - is used by"},"relationship_data":{"description":"Any extra data about this relationship"},"status":{"enum":["Active","Mitigated","FalsePositive","RiskAccepted","OutOfScope"],"type":"string","x-spec-enum-id":"918ee82ac8d9cac7","description":"The status of the the given Location\n\n* `Active` - Active\n* `Mitigated` - Mitigated\n* `FalsePositive` - False Positive\n* `RiskAccepted` - Risk Accepted\n* `OutOfScope` - Out Of Scope"},"location":{"type":"integer"},"finding":{"type":"integer"},"auditor":{"type":"integer","nullable":true,"description":"The user who audited the location"}}},"PatchedLocationProductReferenceRequest":{"type":"object","description":"Serializer for the LocationProductReference model with serializers for the related objects.","properties":{"relationship":{"enum":["owned_by","used_by",""],"type":"string","x-spec-enum-id":"8c638fc6583828e5","description":"The relationship between two locations\n\n* `owned_by` - is owned by\n* `used_by` - is used by"},"relationship_data":{"description":"Any extra data about this relationship"},"status":{"enum":["Active","Mitigated"],"type":"string","x-spec-enum-id":"bcfb073a62b96b70","description":"The status of the the given Location\n\n* `Active` - Active\n* `Mitigated` - Mitigated"},"location":{"type":"integer"},"product":{"type":"integer"}}},"PatchedLoginBannerRequest":{"type":"object","properties":{"banner_enable":{"type":"boolean"},"banner_message":{"type":"string","default":"","maxLength":500}}},"PatchedMaintenanceWindowRequest":{"type":"object","properties":{"monthly_start_time":{"type":"string","format":"date-time","nullable":true,"title":"Maintenance Start Time","description":"The starting date and time the server will be expected to be down for Maintenance"},"monthly_end_time":{"type":"string","format":"date-time","nullable":true,"title":"Maintenance End Time","description":"The ending date and time that Maintenance will conclide and the server will be available again"},"daily_start_time":{"type":"string","format":"date-time","nullable":true,"title":"Daily Maintenance Start Time","description":"The starting time of a preferred window of downtime for a given day if the server needs to be reset for any reason"},"daily_end_time":{"type":"string","format":"date-time","nullable":true,"title":"Daily Maintenance End Time","description":"The ending time of a preferred window of downtime for a given day if the server needs to be reset for any reason"}}},"PatchedMappingSubtypeFiltersRequest":{"type":"object","description":"Per-subtype filter overrides. The criteria dict is flat (no stage key) -- subtype\nfilters only apply at sync, merged over ConnectorConfig.filters['sync']. An empty dict\nclears all overrides for the subtype.","properties":{"test_type_name":{"type":"string","minLength":1,"description":"The test_type_name of the subtype whose filters to update."},"filters":{"description":"Flat criterion dict (e.g. {'severity': 'Critical'}). Empty dict clears overrides."}}},"PatchedMetaMainRequest":{"type":"object","properties":{"product":{"type":"integer","nullable":true},"finding":{"type":"integer","nullable":true},"metadata":{"type":"array","items":{"$ref":"#/components/schemas/MetadataRequest"}}}},"PatchedMetaRequest":{"type":"object","properties":{"product":{"type":"integer","nullable":true},"endpoint":{"type":"integer","nullable":true},"location":{"type":"integer","nullable":true},"finding":{"type":"integer","nullable":true},"name":{"type":"string","minLength":1,"maxLength":120},"value":{"type":"string","minLength":1,"maxLength":300}}},"PatchedMitigationPolicyRequest":{"type":"object","description":"Base serializer for all models.","properties":{"title":{"type":"string","minLength":1,"description":"A brief description of the mitigation policy","maxLength":1024},"description":{"type":"string","minLength":1,"description":"The detailed description of the policy, including how to mitigate the finding and any stakeholders to inform"},"is_default":{"type":"boolean","description":"Whether this policy is the default policy for findings where no policy is specified"}}},"PatchedNetworkLocationsRequest":{"type":"object","properties":{"location":{"type":"string","minLength":1,"description":"Location of network testing: Examples: VPN, Internet or Internal.","maxLength":500}}},"PatchedNoteRequest":{"type":"object","properties":{"entry":{"type":"string","minLength":1},"private":{"type":"boolean"},"edited":{"type":"boolean"}}},"PatchedNoteTypeRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"description":{"type":"string","minLength":1,"maxLength":200},"is_single":{"type":"boolean"},"is_active":{"type":"boolean"},"is_mandatory":{"type":"boolean"}}},"PatchedNotificationWebhooksRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Name of the incoming webhook","maxLength":100},"url":{"type":"string","format":"uri","minLength":1,"description":"The full URL of the incoming webhook","maxLength":200},"header_name":{"type":"string","nullable":true,"description":"Name of the header required for interacting with Webhook endpoint","maxLength":100},"header_value":{"type":"string","nullable":true,"description":"Content of the header required for interacting with Webhook endpoint","maxLength":100},"owner":{"type":"integer","nullable":true,"description":"Owner/receiver of notification, if empty processed as system notification"}}},"PatchedNotificationsRequest":{"type":"object","properties":{"product":{"type":"integer","nullable":true},"user":{"type":"integer","nullable":true},"product_type_added":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["alert"]},"product_added":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["alert"]},"engagement_added":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["alert"]},"test_added":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["alert"]},"scan_added":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["alert"]},"jira_update":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["alert"]},"upcoming_engagement":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["alert"]},"stale_engagement":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["alert"]},"auto_close_engagement":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["alert"]},"close_engagement":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["alert"]},"user_mentioned":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["alert"]},"code_review":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["alert"]},"review_requested":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["alert"]},"other":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["alert"]},"sla_breach":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["alert"]},"sla_breach_combined":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["alert"]},"risk_acceptance_expiration":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["alert"]},"template":{"type":"boolean","default":false},"digest":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["mail"]},"digest_frequency":{"enum":["Daily","Weekly - Monday","Weekly - Tuesday","Weekly - Wednesday","Weekly - Thursday","Weekly - Friday","Weekly - Saturday","Weekly - Sunday","Monthly - 1st","Monthly - 15th","",null],"type":"string","description":"* `Daily` - Daily\n* `Weekly - Monday` - Weekly - Monday\n* `Weekly - Tuesday` - Weekly - Tuesday\n* `Weekly - Wednesday` - Weekly - Wednesday\n* `Weekly - Thursday` - Weekly - Thursday\n* `Weekly - Friday` - Weekly - Friday\n* `Weekly - Saturday` - Weekly - Saturday\n* `Weekly - Sunday` - Weekly - Sunday\n* `Monthly - 1st` - Monthly - 1st\n* `Monthly - 15th` - Monthly - 15th","x-spec-enum-id":"4b2def200351ec56","nullable":true},"finding_risk_accepted":{"type":"array","items":{"enum":["slack","msteams","mail","webhooks","alert"],"type":"string","description":"* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert","x-spec-enum-id":"1b984ac114f52c4c"},"default":["alert"]},"scan_added_empty":{"enum":["slack","msteams","mail","webhooks","alert",""],"type":"string","x-spec-enum-id":"1b984ac114f52c4c","description":"Triggered whenever an (re-)import has been done (even if that created/updated/closed no findings).\n\n* `slack` - slack\n* `msteams` - msteams\n* `mail` - mail\n* `webhooks` - webhooks\n* `alert` - alert"}}},"PatchedPrioritizationEngineRequest":{"type":"object","description":"Base serializer for all models.","properties":{"name":{"type":"string","minLength":1,"maxLength":512},"description":{"type":"string","nullable":true},"finding_severity_scalar":{"type":"number","format":"double","maximum":2.0,"minimum":0.0,"description":"Scalar to adjust the impact of severity."},"finding_external_score_scalar":{"type":"number","format":"double","maximum":2.0,"minimum":0.0,"description":"Scalar to adjust the impact of external scoring mechanisms."},"finding_endpoints_ratio_scalar":{"type":"number","format":"double","maximum":2.0,"minimum":0.0,"description":"Scalar to adjust the ratio of endpoints on a finding compared to endpoints on product."},"product_business_criticality_scalar":{"type":"number","format":"double","maximum":2.0,"minimum":0.0,"description":"Scalar to adjust the impact of business criticality."},"product_user_records_ratio_scalar":{"type":"number","format":"double","maximum":2.0,"minimum":0.0,"description":"Scalar to adjust the ratio of user records on the product relative to the total user records for the product type."},"product_revenue_ratio_scalar":{"type":"number","format":"double","maximum":2.0,"minimum":0.0,"description":"Scalar to adjust the ratio of product revenue relative to the total revenue for the product type."},"product_external_audience_scalar":{"type":"number","format":"double","maximum":2.0,"minimum":0.0,"description":"Scalar to adjust how having an external audience impacts the product."},"product_internet_accessible_scalar":{"type":"number","format":"double","maximum":2.0,"minimum":0.0,"description":"Scalar to adjust how internet accessibility impacts the product."},"low_risk_threshold":{"type":"number","format":"double","minimum":1.0,"description":"Highest value Priority for Low risk findings."},"medium_risk_threshold":{"type":"number","format":"double","minimum":1.0,"description":"Highest value Priority for Medium risk findings."},"needs_action_risk_threshold":{"type":"number","format":"double","minimum":1.0,"description":"Highest value Priority for Needs Action risk findings."},"urgent_risk_threshold":{"type":"number","format":"double","minimum":1.0,"description":"Highest value Priority for Urgent risk findings."}}},"PatchedProOpenSurveyRequest":{"type":"object","description":"Serializer for a ProOpenSurvey (General_Survey model).","properties":{"expiration":{"type":"string","format":"date-time"},"survey":{"type":"integer"}}},"PatchedProQuestionRequest":{"type":"object","description":"Polymorphic serializer for a Question. Determines the correct subclass serializer to use and uses it.","properties":{"type":{"type":"string","minLength":1,"description":"Type of question, e.g., 'text' or 'choice'"}}},"PatchedProReportBlockRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":255},"block_type":{"enum":["tabular","detail","chart","stock"],"type":"string","description":"* `tabular` - Tabular\n* `detail` - Detail\n* `chart` - Chart\n* `stock` - Stock","x-spec-enum-id":"badb433f0b862272"},"header":{"type":"string","nullable":true,"maxLength":255},"description":{"type":"string","nullable":true},"tabular_configuration":{"allOf":[{"$ref":"#/components/schemas/ProReportBlockTabularConfigurationRequest"}],"nullable":true},"detail_configuration":{"allOf":[{"$ref":"#/components/schemas/ProReportBlockDetailConfigurationRequest"}],"nullable":true},"chart_configuration":{"allOf":[{"$ref":"#/components/schemas/ProReportBlockChartConfigurationRequest"}],"nullable":true},"stock_configuration":{"allOf":[{"$ref":"#/components/schemas/ProReportBlockStockConfigurationRequest"}],"nullable":true},"filter_entries":{"type":"array","items":{"$ref":"#/components/schemas/ProReportBlockFilterEntryRequest"}}}},"PatchedProReportTemplateRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":255},"description":{"type":"string","nullable":true,"default":""},"template_blocks_write":{"type":"array","items":{"$ref":"#/components/schemas/ProReportTemplateBlockWriteRequest"},"writeOnly":true},"theme_id":{"type":"integer","writeOnly":true,"nullable":true}}},"PatchedProReportThemeRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":255},"primary_color":{"type":"string","minLength":1,"maxLength":7},"secondary_color":{"type":"string","minLength":1,"maxLength":7},"accent_color":{"type":"string","minLength":1,"maxLength":7},"text_color":{"type":"string","minLength":1,"maxLength":7},"background_color":{"type":"string","minLength":1,"maxLength":7},"base_font_size":{"type":"integer","maximum":16,"minimum":8,"description":"Body font size of generated reports, in pixels."},"footer_text":{"type":"string","nullable":true},"show_page_numbers":{"type":"boolean"}}},"PatchedProSurveyRequest":{"type":"object","description":"Serializer for a ProSurvey (Engagement_Survey model).","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","minLength":1},"active":{"type":"boolean"},"questions":{"type":"array","items":{"type":"integer"}}}},"PatchedProductAPIScanConfigurationRequest":{"type":"object","properties":{"service_key_1":{"type":"string","nullable":true,"maxLength":200},"service_key_2":{"type":"string","nullable":true,"maxLength":200},"service_key_3":{"type":"string","nullable":true,"maxLength":200},"product":{"type":"integer"},"tool_configuration":{"type":"integer"}}},"PatchedProductsRequest":{"type":"object","description":"Extend from the BaseModelSerializer to allow for generalized extensions.","properties":{"business_criticality":{"enum":["very high","high","medium","low","very low","none","",null],"type":"string","description":"* `very high` - Very High\n* `high` - High\n* `medium` - Medium\n* `low` - Low\n* `very low` - Very Low\n* `none` - None","x-spec-enum-id":"ef412461eb271471","nullable":true},"platform":{"enum":["web service","desktop","iot","mobile","web","",null],"type":"string","description":"* `web service` - API\n* `desktop` - Desktop\n* `iot` - Internet of Things\n* `mobile` - Mobile\n* `web` - Web","x-spec-enum-id":"48ed03cfd9c8641d","nullable":true},"lifecycle":{"enum":["construction","production","retirement","",null],"type":"string","description":"* `construction` - Construction\n* `production` - Production\n* `retirement` - Retirement","x-spec-enum-id":"65f9d93250b96377","nullable":true},"origin":{"enum":["third party library","purchased","contractor","internal","open source","outsourced","",null],"type":"string","description":"* `third party library` - Third Party Library\n* `purchased` - Purchased\n* `contractor` - Contractor Developed\n* `internal` - Internally Developed\n* `open source` - Open Source\n* `outsourced` - Outsourced","x-spec-enum-id":"435026afe6c513fa","nullable":true},"parent":{"type":"integer","nullable":true},"prioritization_engine":{"type":"integer","nullable":true},"name":{"type":"string","minLength":1,"maxLength":255},"description":{"type":"string","minLength":1,"maxLength":4000},"prod_numeric_grade":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true},"user_records":{"type":"integer","maximum":2147483647,"minimum":0,"nullable":true,"description":"Estimate the number of user records within the application."},"revenue":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$","nullable":true,"description":"Estimate the application's revenue."},"external_audience":{"type":"boolean","description":"Specify if the application is used by people outside the organization."},"internet_accessible":{"type":"boolean","description":"Specify if the application is accessible from the public internet."},"enable_product_tag_inheritance":{"type":"boolean","description":"Enables product tag inheritance. Any tags added on a product will automatically be added to all Engagements, Tests, and Findings"},"enable_simple_risk_acceptance":{"type":"boolean","description":"Allows simple risk acceptance by checking/unchecking a checkbox."},"enable_full_risk_acceptance":{"type":"boolean","description":"Allows full risk acceptance using a risk acceptance form, expiration date, uploaded proof, etc."},"disable_sla_breach_notifications":{"type":"boolean","description":"Disable SLA breach notifications if configured in the global settings"},"product_manager":{"type":"integer","nullable":true},"technical_contact":{"type":"integer","nullable":true},"team_manager":{"type":"integer","nullable":true},"prod_type":{"type":"integer"},"sla_configuration":{"type":"integer"},"regulations":{"type":"array","items":{"type":"integer"}},"tags":{"type":"array","items":{"type":"string","minLength":1}}}},"PatchedPublicMappingSubtypeStatusRequest":{"type":"object","description":"User-facing variant -- restricts to GOOD and IGNORED (users shouldn't set MISSING).","properties":{"test_type_name":{"type":"string","minLength":1,"description":"The test_type_name of the subtype to update."},"status":{"enum":["GOOD","IGNORED"],"type":"string","x-spec-enum-id":"8f517a58d3bf4672","description":"The new status for this subtype. Only GOOD and IGNORED are user-settable.\n\n* `GOOD` - GOOD\n* `IGNORED` - IGNORED"}}},"PatchedRecordStatusRequest":{"type":"object","properties":{"state":{"enum":["GOOD","IGNORED"],"type":"string","description":"* `GOOD` - GOOD\n* `IGNORED` - IGNORED","x-spec-enum-id":"8f517a58d3bf4672"}}},"PatchedRegulationRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"The name of the regulation.","maxLength":128},"acronym":{"type":"string","minLength":1,"description":"A shortened representation of the name.","maxLength":20},"category":{"enum":["privacy","finance","education","medical","corporate","security","government","other"],"type":"string","x-spec-enum-id":"18b03e6cbd7d3e7d","description":"The subject of the regulation.\n\n* `privacy` - Privacy\n* `finance` - Finance\n* `education` - Education\n* `medical` - Medical\n* `corporate` - Corporate\n* `security` - Security\n* `government` - Government\n* `other` - Other"},"jurisdiction":{"type":"string","minLength":1,"description":"The territory over which the regulation applies.","maxLength":64},"description":{"type":"string","description":"Information about the regulation's purpose."},"reference":{"type":"string","format":"uri","description":"An external URL for more information.","maxLength":200}}},"PatchedSLAConfigurationRequest":{"type":"object","description":"Base serializer for all models.","properties":{"configuration_type":{"enum":["Severity","Risk"],"type":"string","x-spec-enum-id":"a4582373721827bc","title":"SLA Configuration Type","description":"Indicates what basis the SLA will be calculated on for findings associated with this SLA configuration.\n\n* `Severity` - Measure SLA based on Finding Severity\n* `Risk` - Measure SLA based on Finding Risk"},"name":{"type":"string","minLength":1,"title":"Custom SLA Name","description":"A unique name for the set of SLAs."},"description":{"type":"string","nullable":true,"minLength":1},"restart_sla_on_reactivation":{"type":"boolean","title":"Restart SLA when findings are reactivated","description":"When enabled, findings that were previously mitigated but are reactivated durign reimport will have their SLA period restarted."},"critical":{"type":"integer","default":7,"title":"Critical Finding SLA Days","description":"The number of days to remediate a critical finding."},"enforce_critical":{"type":"boolean","default":true,"title":"Enforce Critical Finding SLA Days","description":"When enabled, critical findings will be assigned an SLA expiration date based on the critical finding SLA days within this SLA configuration."},"high":{"type":"integer","default":30,"title":"High Finding SLA Days","description":"The number of days to remediate a high finding."},"enforce_high":{"type":"boolean","default":true,"title":"Enforce High Finding SLA Days","description":"When enabled, high findings will be assigned an SLA expiration date based on the high finding SLA days within this SLA configuration."},"medium":{"type":"integer","default":90,"title":"Medium Finding SLA Days","description":"The number of days to remediate a medium finding."},"enforce_medium":{"type":"boolean","default":true,"title":"Enforce Medium Finding SLA Days","description":"When enabled, medium findings will be assigned an SLA expiration date based on the medium finding SLA days within this SLA configuration."},"low":{"type":"integer","default":120,"title":"Low Finding SLA Days","description":"The number of days to remediate a low finding."},"enforce_low":{"type":"boolean","default":true,"title":"Enforce Low Finding SLA Days","description":"When enabled, low findings will be assigned an SLA expiration date based on the low finding SLA days within this SLA configuration."},"urgent_risk":{"type":"integer","maximum":2147483647,"minimum":1,"default":7,"title":"Urgent Risk Finding SLA Days","description":"The number of days to remediate an urgent risk finding."},"enforce_urgent_risk":{"type":"boolean","title":"Enforce Urgent Risk Finding SLA Days","description":"When enabled, urgent risk findings will be assigned an SLA expiration date based on the urgent risk finding SLA days within this SLA configuration."},"needs_action_risk":{"type":"integer","maximum":2147483647,"minimum":1,"default":30,"title":"Needs Action Risk Finding SLA Days","description":"The number of days to remediate a needs action risk finding."},"enforce_needs_action_risk":{"type":"boolean","title":"Enforce Needs Action Risk Finding SLA Days","description":"When enabled, needs action risk findings will be assigned an SLA expiration date based on the needs action risk finding SLA days within this SLA configuration."},"medium_risk":{"type":"integer","maximum":2147483647,"minimum":1,"default":90,"title":"Medium Risk Finding SLA Days","description":"The number of days to remediate a medium risk finding."},"enforce_medium_risk":{"type":"boolean","title":"Enforce Medium Risk Finding SLA Days","description":"When enabled, medium risk findings will be assigned an SLA expiration date based on the medium risk finding SLA days within this SLA configuration."},"low_risk":{"type":"integer","maximum":2147483647,"minimum":1,"default":120,"title":"Low Risk Finding SLA Days","description":"The number of days to remediate a low risk finding."},"enforce_low_risk":{"type":"boolean","title":"Enforce Low Risk Finding SLA Days","description":"When enabled, low risk findings will be assigned an SLA expiration date based on the low risk finding SLA days within this SLA configuration."}}},"PatchedSonarqubeIssueRequest":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"SonarQube issue key","maxLength":60},"status":{"type":"string","minLength":1,"description":"SonarQube issue status","maxLength":20},"type":{"type":"string","minLength":1,"description":"SonarQube issue type","maxLength":20}}},"PatchedSonarqubeIssueTransitionRequest":{"type":"object","properties":{"finding_status":{"type":"string","minLength":1,"maxLength":100},"sonarqube_status":{"type":"string","minLength":1,"maxLength":50},"transitions":{"type":"string","minLength":1,"maxLength":100},"sonarqube_issue":{"type":"integer"}}},"PatchedTagRequest":{"type":"object","properties":{"tags":{"type":"array","items":{"type":"string","minLength":1}}}},"PatchedTestImportRequest":{"type":"object","properties":{"import_settings":{"nullable":true},"type":{"type":"string","minLength":1,"maxLength":64},"version":{"type":"string","nullable":true,"maxLength":100},"build_id":{"type":"string","nullable":true,"description":"Build ID that was tested, a reimport may update this field.","maxLength":150},"commit_hash":{"type":"string","nullable":true,"description":"Commit hash tested, a reimport may update this field.","maxLength":150},"branch_tag":{"type":"string","nullable":true,"title":"Branch/Tag","description":"Tag or branch that was tested, a reimport may update this field.","maxLength":150}}},"PatchedTestTypeRequest":{"type":"object","properties":{"soc":{"type":"boolean"},"static_tool":{"type":"boolean"},"dynamic_tool":{"type":"boolean"},"active":{"type":"boolean"}}},"PatchedTestsRequest":{"type":"object","description":"Regression guard for Sentry DJANGO-D2P.\n\nDRF ``ModelSerializer.update()`` calls ``instance.<m2m>.set(new_list)`` for\nevery M2M field present in ``validated_data``, even when the new list is\nidentical to the current one. On tagulous ``TagField``s that triggers a\nfull teardown + re-add of the M2M, which runs SELECT + UPDATE ``count``\nbookkeeping per tag (N+1).\n\nThis mixin short-circuits the ``.set()`` call per ``TagListSerializerField``\nwhen the normalized incoming list equals ``instance.<attr>.get_tag_list()``.\nAll other M2M fields keep the stock DRF behavior.\n\nOpt in by adding ``SkipUnchangedTagsMixin`` to the base-class list of any\nserializer that exposes a ``TagListSerializerField`` for update.","properties":{"processing":{"type":"boolean","description":"Dictate that the test is undergoing an Import or ReImport"},"deduplication":{"type":"boolean","description":"Dictate that the test is undergoing Deduplication for all findings that were imported last"},"false_positive_history":{"type":"boolean","description":"Dictate that the test is undergoing False Positive History for all findings that were imported last"},"scan_type":{"type":"string","nullable":true,"minLength":1},"title":{"type":"string","nullable":true,"maxLength":255},"description":{"type":"string","nullable":true},"target_start":{"type":"string","format":"date-time"},"target_end":{"type":"string","format":"date-time"},"percent_complete":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true},"version":{"type":"string","nullable":true,"maxLength":100},"build_id":{"type":"string","nullable":true,"description":"Build ID that was tested, a reimport may update this field.","maxLength":150},"commit_hash":{"type":"string","nullable":true,"description":"Commit hash tested, a reimport may update this field.","maxLength":150},"branch_tag":{"type":"string","nullable":true,"title":"Branch/Tag","description":"Tag or branch that was tested, a reimport may update this field.","maxLength":150},"lead":{"type":"integer","nullable":true},"test_type":{"type":"integer"},"environment":{"type":"integer","nullable":true},"api_scan_configuration":{"type":"integer","nullable":true},"tags":{"type":"array","items":{"type":"string","minLength":1}}}},"PatchedToolConfigurationRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","nullable":true,"maxLength":2000},"url":{"type":"string","nullable":true,"maxLength":2000},"authentication_type":{"enum":["API","Password","SSH","",null],"type":"string","description":"* `API` - API Key\n* `Password` - Username/Password\n* `SSH` - SSH","x-spec-enum-id":"e1a582895a9e03b4","nullable":true},"extras":{"type":"string","nullable":true,"description":"Additional definitions that will be consumed by scanner","maxLength":255},"username":{"type":"string","nullable":true,"maxLength":200},"password":{"type":"string","writeOnly":true,"nullable":true,"maxLength":900},"auth_title":{"type":"string","nullable":true,"title":"Title for SSH/API Key","maxLength":200},"ssh":{"type":"string","writeOnly":true,"nullable":true,"maxLength":9000},"api_key":{"type":"string","writeOnly":true,"nullable":true,"maxLength":900},"tool_type":{"type":"integer"}}},"PatchedToolProductSettingsRequest":{"type":"object","properties":{"setting_url":{"type":"string","minLength":1},"product":{"type":"integer"},"name":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","nullable":true,"maxLength":2000},"url":{"type":"string","nullable":true,"maxLength":2000},"tool_project_id":{"type":"string","nullable":true,"maxLength":200},"tool_configuration":{"type":"integer"}}},"PatchedToolTypeRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","nullable":true,"maxLength":2000}}},"PatchedURLRequest":{"type":"object","description":"Serializer for the URL model with primary keys for related objects.","properties":{"tags":{"type":"array","items":{"type":"string","minLength":1}},"protocol":{"type":"string","description":"The protocol of the URL (e.g., http, https, ftp, etc.)","maxLength":10},"user_info":{"type":"string","description":"Connection details for a given user","maxLength":512},"host":{"type":"string","minLength":1,"description":"The host of the URL, which can be a domain name or an IP address","maxLength":256},"port":{"type":"integer","maximum":65535,"minimum":1,"nullable":true,"description":"The port number of the URL (optional)"},"path":{"type":"string","description":"The path of the URL (optional),","maxLength":2048},"query":{"type":"string","description":"The query string of the URL (optional)","maxLength":2048},"fragment":{"type":"string","description":"The fragment identifier of the URL (optional)","maxLength":2048},"host_validation_failure":{"type":"boolean","description":"Dictates whether the endpoint was found to have host validation issues during creation"}}},"PreviewDeltaStatistics":{"type":"object","description":"Delta statistics for import preview — like DeltaStatisticsSerializer but adds created_duplicate.","properties":{"created":{"$ref":"#/components/schemas/SeverityStatusStatistics"},"created_duplicate":{"$ref":"#/components/schemas/SeverityStatusStatistics"},"closed":{"$ref":"#/components/schemas/SeverityStatusStatistics"}},"required":["closed","created","created_duplicate"]},"PreviewReImportDeltaStatistics":{"type":"object","description":"Delta statistics for reimport preview — adds reactivated and untouched.","properties":{"created":{"$ref":"#/components/schemas/SeverityStatusStatistics"},"created_duplicate":{"$ref":"#/components/schemas/SeverityStatusStatistics"},"closed":{"$ref":"#/components/schemas/SeverityStatusStatistics"},"reactivated":{"$ref":"#/components/schemas/SeverityStatusStatistics"},"untouched":{"$ref":"#/components/schemas/SeverityStatusStatistics"}},"required":["closed","created","created_duplicate","reactivated","untouched"]},"PreviewReImportStatistics":{"type":"object","description":"Statistics wrapper for reimport preview.","properties":{"delta":{"$ref":"#/components/schemas/PreviewReImportDeltaStatistics"}},"required":["delta"]},"PreviewStatistics":{"type":"object","description":"Statistics wrapper for import preview (delta only — no DB writes, so no before/after).","properties":{"delta":{"$ref":"#/components/schemas/PreviewDeltaStatistics"}},"required":["delta"]},"PrioritizationEngine":{"type":"object","description":"Base serializer for all models.","properties":{"id":{"type":"integer","readOnly":true},"name":{"type":"string","maxLength":512},"description":{"type":"string","nullable":true},"async_updating":{"type":"boolean","readOnly":true,"description":"Findings under this Prioritization Engine are asynchronously being updated"},"finding_severity_scalar":{"type":"number","format":"double","maximum":2.0,"minimum":0.0,"description":"Scalar to adjust the impact of severity."},"finding_external_score_scalar":{"type":"number","format":"double","maximum":2.0,"minimum":0.0,"description":"Scalar to adjust the impact of external scoring mechanisms."},"finding_endpoints_ratio_scalar":{"type":"number","format":"double","maximum":2.0,"minimum":0.0,"description":"Scalar to adjust the ratio of endpoints on a finding compared to endpoints on product."},"product_business_criticality_scalar":{"type":"number","format":"double","maximum":2.0,"minimum":0.0,"description":"Scalar to adjust the impact of business criticality."},"product_user_records_ratio_scalar":{"type":"number","format":"double","maximum":2.0,"minimum":0.0,"description":"Scalar to adjust the ratio of user records on the product relative to the total user records for the product type."},"product_revenue_ratio_scalar":{"type":"number","format":"double","maximum":2.0,"minimum":0.0,"description":"Scalar to adjust the ratio of product revenue relative to the total revenue for the product type."},"product_external_audience_scalar":{"type":"number","format":"double","maximum":2.0,"minimum":0.0,"description":"Scalar to adjust how having an external audience impacts the product."},"product_internet_accessible_scalar":{"type":"number","format":"double","maximum":2.0,"minimum":0.0,"description":"Scalar to adjust how internet accessibility impacts the product."},"low_risk_threshold":{"type":"number","format":"double","minimum":1.0,"description":"Highest value Priority for Low risk findings."},"medium_risk_threshold":{"type":"number","format":"double","minimum":1.0,"description":"Highest value Priority for Medium risk findings."},"needs_action_risk_threshold":{"type":"number","format":"double","minimum":1.0,"description":"Highest value Priority for Needs Action risk findings."},"urgent_risk_threshold":{"type":"number","format":"double","minimum":1.0,"description":"Highest value Priority for Urgent risk findings."}},"required":["async_updating","id","name"]},"PrioritizationEngineRequest":{"type":"object","description":"Base serializer for all models.","properties":{"name":{"type":"string","minLength":1,"maxLength":512},"description":{"type":"string","nullable":true},"finding_severity_scalar":{"type":"number","format":"double","maximum":2.0,"minimum":0.0,"description":"Scalar to adjust the impact of severity."},"finding_external_score_scalar":{"type":"number","format":"double","maximum":2.0,"minimum":0.0,"description":"Scalar to adjust the impact of external scoring mechanisms."},"finding_endpoints_ratio_scalar":{"type":"number","format":"double","maximum":2.0,"minimum":0.0,"description":"Scalar to adjust the ratio of endpoints on a finding compared to endpoints on product."},"product_business_criticality_scalar":{"type":"number","format":"double","maximum":2.0,"minimum":0.0,"description":"Scalar to adjust the impact of business criticality."},"product_user_records_ratio_scalar":{"type":"number","format":"double","maximum":2.0,"minimum":0.0,"description":"Scalar to adjust the ratio of user records on the product relative to the total user records for the product type."},"product_revenue_ratio_scalar":{"type":"number","format":"double","maximum":2.0,"minimum":0.0,"description":"Scalar to adjust the ratio of product revenue relative to the total revenue for the product type."},"product_external_audience_scalar":{"type":"number","format":"double","maximum":2.0,"minimum":0.0,"description":"Scalar to adjust how having an external audience impacts the product."},"product_internet_accessible_scalar":{"type":"number","format":"double","maximum":2.0,"minimum":0.0,"description":"Scalar to adjust how internet accessibility impacts the product."},"low_risk_threshold":{"type":"number","format":"double","minimum":1.0,"description":"Highest value Priority for Low risk findings."},"medium_risk_threshold":{"type":"number","format":"double","minimum":1.0,"description":"Highest value Priority for Medium risk findings."},"needs_action_risk_threshold":{"type":"number","format":"double","minimum":1.0,"description":"Highest value Priority for Needs Action risk findings."},"urgent_risk_threshold":{"type":"number","format":"double","minimum":1.0,"description":"Highest value Priority for Urgent risk findings."}},"required":["name"]},"ProAnsweredSurvey":{"type":"object","description":"Serializer for a ProAnsweredSurvey (Answered_Survey model).","properties":{"id":{"type":"integer","readOnly":true},"completed":{"type":"boolean"},"answered_on":{"type":"string","format":"date","nullable":true},"engagement":{"type":"integer","nullable":true},"survey":{"type":"integer"},"assignee":{"type":"integer","nullable":true},"responder":{"type":"integer","nullable":true},"prefetch":{"type":"object","properties":{"assignee":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}},"engagement":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/FindingEngagement"}},"responder":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}}}}},"required":["id","survey"]},"ProGeneratedReport":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"template":{"allOf":[{"$ref":"#/components/schemas/ProReportTemplateList"}],"readOnly":true},"requested_by":{"type":"string","readOnly":true},"requested_at":{"type":"string","format":"date-time","readOnly":true},"status":{"enum":["pending","processing","completed","failed"],"type":"string","description":"* `pending` - Pending\n* `processing` - Processing\n* `completed` - Completed\n* `failed` - Failed","x-spec-enum-id":"a8f61caf99619754","readOnly":true},"file_format":{"enum":["pdf","html"],"type":"string","description":"* `pdf` - PDF\n* `html` - HTML","x-spec-enum-id":"8d9372010f696e2f"},"error_message":{"type":"string","readOnly":true},"completed_at":{"type":"string","format":"date-time","readOnly":true,"nullable":true}},"required":["completed_at","error_message","file_format","id","requested_at","requested_by","status","template"]},"ProGeneratedReportList":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"template_name":{"type":"string","readOnly":true},"requested_by":{"type":"string","readOnly":true},"requested_at":{"type":"string","format":"date-time","readOnly":true},"status":{"enum":["pending","processing","completed","failed"],"type":"string","description":"* `pending` - Pending\n* `processing` - Processing\n* `completed` - Completed\n* `failed` - Failed","x-spec-enum-id":"a8f61caf99619754"},"file_format":{"enum":["pdf","html"],"type":"string","description":"* `pdf` - PDF\n* `html` - HTML","x-spec-enum-id":"8d9372010f696e2f"},"error_message":{"type":"string"},"completed_at":{"type":"string","format":"date-time","nullable":true}},"required":["file_format","id","requested_at","requested_by","template_name"]},"ProGeneratedReportRequest":{"type":"object","properties":{"template_id":{"type":"integer","writeOnly":true},"file_format":{"enum":["pdf","html"],"type":"string","description":"* `pdf` - PDF\n* `html` - HTML","x-spec-enum-id":"8d9372010f696e2f"},"runtime_filters":{"writeOnly":true},"chart_snapshots":{"writeOnly":true}},"required":["file_format","template_id"]},"ProOpenSurvey":{"type":"object","description":"Serializer for a ProOpenSurvey (General_Survey model).","properties":{"id":{"type":"integer","readOnly":true},"num_responses":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"readOnly":true},"generated":{"type":"string","format":"date-time","readOnly":true,"nullable":true},"expiration":{"type":"string","format":"date-time"},"survey":{"type":"integer"},"prefetch":{"type":"object","properties":{}}},"required":["generated","id","num_responses","survey"]},"ProOpenSurveyRequest":{"type":"object","description":"Serializer for a ProOpenSurvey (General_Survey model).","properties":{"expiration":{"type":"string","format":"date-time"},"survey":{"type":"integer"}},"required":["survey"]},"ProQuestion":{"type":"object","description":"Polymorphic serializer for a Question. Determines the correct subclass serializer to use and uses it.","properties":{"type":{"type":"string","description":"Type of question, e.g., 'text' or 'choice'"},"prefetch":{"type":"object","properties":{}}},"required":["type"]},"ProQuestionRequest":{"type":"object","description":"Polymorphic serializer for a Question. Determines the correct subclass serializer to use and uses it.","properties":{"type":{"type":"string","minLength":1,"description":"Type of question, e.g., 'text' or 'choice'"}},"required":["type"]},"ProReportBlock":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"name":{"type":"string","maxLength":255},"block_type":{"enum":["tabular","detail","chart","stock"],"type":"string","description":"* `tabular` - Tabular\n* `detail` - Detail\n* `chart` - Chart\n* `stock` - Stock","x-spec-enum-id":"badb433f0b862272"},"header":{"type":"string","nullable":true,"maxLength":255},"description":{"type":"string","nullable":true},"created_by":{"type":"string","readOnly":true},"created":{"type":"string","format":"date-time","readOnly":true,"nullable":true,"description":"Time that the object was initially created, and saved to the database"},"updated":{"type":"string","format":"date-time","readOnly":true,"nullable":true,"description":"Time that the object was most recently saved to the database"},"tabular_configuration":{"allOf":[{"$ref":"#/components/schemas/ProReportBlockTabularConfiguration"}],"nullable":true},"detail_configuration":{"allOf":[{"$ref":"#/components/schemas/ProReportBlockDetailConfiguration"}],"nullable":true},"chart_configuration":{"allOf":[{"$ref":"#/components/schemas/ProReportBlockChartConfiguration"}],"nullable":true},"stock_configuration":{"allOf":[{"$ref":"#/components/schemas/ProReportBlockStockConfiguration"}],"nullable":true},"filter_entries":{"type":"array","items":{"$ref":"#/components/schemas/ProReportBlockFilterEntry"}}},"required":["block_type","created","created_by","id","name","updated"]},"ProReportBlockChartConfiguration":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"model_choice":{"enum":["finding","asset","generic"],"type":"string","description":"* `finding` - Finding\n* `asset` - Asset\n* `generic` - Generic","x-spec-enum-id":"550d8682175db79a"},"chart_key":{"enum":["severity_over_time","status_over_time","active_age_by_severity","active_age_by_risk","average_time_to_remediation","findings_fixed","tests_performed","average_risk_over_time","total_by_risk_category","priority_distribution","open_findings_over_time","noise_reduction_by_category","noise_reduction_hours_saved","past_sla_by_asset","past_sla_by_organization","past_sla_by_severity_by_asset","assets_tested"],"type":"string","description":"* `severity_over_time` - Active Findings by Severity\n* `status_over_time` - Active, Mitigated, and Risk Accepted Findings\n* `active_age_by_severity` - Average Finding Age by Severity\n* `active_age_by_risk` - Average Finding Age by Risk\n* `average_time_to_remediation` - Average Time to Remediation\n* `findings_fixed` - Findings Fixed Over Time\n* `tests_performed` - Tests Performed Over Time\n* `average_risk_over_time` - Average Risk Over Time\n* `total_by_risk_category` - Total Findings by Risk Category\n* `priority_distribution` - Finding Priority Distribution\n* `open_findings_over_time` - Open Findings Over Time\n* `noise_reduction_by_category` - Noise Reduction by Category\n* `noise_reduction_hours_saved` - Noise Reduction / Hours Saved Over Time\n* `past_sla_by_asset` - Findings Past SLA by Asset\n* `past_sla_by_organization` - Findings Past SLA by Organization\n* `past_sla_by_severity_by_asset` - Severity of Findings Past SLA by Asset\n* `assets_tested` - Assets Tested Over Time","x-spec-enum-id":"4a6df9b2c86ac03b"}},"required":["chart_key","id","model_choice"]},"ProReportBlockChartConfigurationRequest":{"type":"object","properties":{"model_choice":{"enum":["finding","asset","generic"],"type":"string","description":"* `finding` - Finding\n* `asset` - Asset\n* `generic` - Generic","x-spec-enum-id":"550d8682175db79a"},"chart_key":{"enum":["severity_over_time","status_over_time","active_age_by_severity","active_age_by_risk","average_time_to_remediation","findings_fixed","tests_performed","average_risk_over_time","total_by_risk_category","priority_distribution","open_findings_over_time","noise_reduction_by_category","noise_reduction_hours_saved","past_sla_by_asset","past_sla_by_organization","past_sla_by_severity_by_asset","assets_tested"],"type":"string","description":"* `severity_over_time` - Active Findings by Severity\n* `status_over_time` - Active, Mitigated, and Risk Accepted Findings\n* `active_age_by_severity` - Average Finding Age by Severity\n* `active_age_by_risk` - Average Finding Age by Risk\n* `average_time_to_remediation` - Average Time to Remediation\n* `findings_fixed` - Findings Fixed Over Time\n* `tests_performed` - Tests Performed Over Time\n* `average_risk_over_time` - Average Risk Over Time\n* `total_by_risk_category` - Total Findings by Risk Category\n* `priority_distribution` - Finding Priority Distribution\n* `open_findings_over_time` - Open Findings Over Time\n* `noise_reduction_by_category` - Noise Reduction by Category\n* `noise_reduction_hours_saved` - Noise Reduction / Hours Saved Over Time\n* `past_sla_by_asset` - Findings Past SLA by Asset\n* `past_sla_by_organization` - Findings Past SLA by Organization\n* `past_sla_by_severity_by_asset` - Severity of Findings Past SLA by Asset\n* `assets_tested` - Assets Tested Over Time","x-spec-enum-id":"4a6df9b2c86ac03b"}},"required":["chart_key","model_choice"]},"ProReportBlockDetailConfiguration":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"model_choice":{"enum":["organization","asset","engagement","test","finding","test_type","risk_acceptance","location","url","dependency"],"type":"string","description":"* `organization` - Organization\n* `asset` - Asset\n* `engagement` - Engagement\n* `test` - Test\n* `finding` - Finding\n* `test_type` - Test Type\n* `risk_acceptance` - Risk Acceptance\n* `location` - Location\n* `url` - URL\n* `dependency` - Dependency","x-spec-enum-id":"c08985dc136f4196"},"fields":{"type":"array","items":{"type":"string","maxLength":100}},"ordering":{"type":"string","nullable":true,"maxLength":100}},"required":["id","model_choice"]},"ProReportBlockDetailConfigurationRequest":{"type":"object","properties":{"model_choice":{"enum":["organization","asset","engagement","test","finding","test_type","risk_acceptance","location","url","dependency"],"type":"string","description":"* `organization` - Organization\n* `asset` - Asset\n* `engagement` - Engagement\n* `test` - Test\n* `finding` - Finding\n* `test_type` - Test Type\n* `risk_acceptance` - Risk Acceptance\n* `location` - Location\n* `url` - URL\n* `dependency` - Dependency","x-spec-enum-id":"c08985dc136f4196"},"fields":{"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"ordering":{"type":"string","nullable":true,"maxLength":100}},"required":["model_choice"]},"ProReportBlockFilterEntry":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"field":{"type":"string","maxLength":255},"value":{"type":"string","maxLength":1000}},"required":["field","id","value"]},"ProReportBlockFilterEntryRequest":{"type":"object","properties":{"field":{"type":"string","minLength":1,"maxLength":255},"value":{"type":"string","minLength":1,"maxLength":1000}},"required":["field","value"]},"ProReportBlockList":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"name":{"type":"string","maxLength":255},"block_type":{"enum":["tabular","detail","chart","stock"],"type":"string","description":"* `tabular` - Tabular\n* `detail` - Detail\n* `chart` - Chart\n* `stock` - Stock","x-spec-enum-id":"badb433f0b862272"},"header":{"type":"string","nullable":true,"maxLength":255},"description":{"type":"string","nullable":true},"created_by":{"type":"string","readOnly":true},"created":{"type":"string","format":"date-time","readOnly":true,"nullable":true,"description":"Time that the object was initially created, and saved to the database"},"updated":{"type":"string","format":"date-time","readOnly":true,"nullable":true,"description":"Time that the object was most recently saved to the database"},"configuration_summary":{"type":"object","additionalProperties":{},"nullable":true,"readOnly":true},"filter_count":{"type":"integer","readOnly":true}},"required":["block_type","configuration_summary","created","created_by","filter_count","id","name","updated"]},"ProReportBlockListRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":255},"block_type":{"enum":["tabular","detail","chart","stock"],"type":"string","description":"* `tabular` - Tabular\n* `detail` - Detail\n* `chart` - Chart\n* `stock` - Stock","x-spec-enum-id":"badb433f0b862272"},"header":{"type":"string","nullable":true,"maxLength":255},"description":{"type":"string","nullable":true}},"required":["block_type","name"]},"ProReportBlockRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":255},"block_type":{"enum":["tabular","detail","chart","stock"],"type":"string","description":"* `tabular` - Tabular\n* `detail` - Detail\n* `chart` - Chart\n* `stock` - Stock","x-spec-enum-id":"badb433f0b862272"},"header":{"type":"string","nullable":true,"maxLength":255},"description":{"type":"string","nullable":true},"tabular_configuration":{"allOf":[{"$ref":"#/components/schemas/ProReportBlockTabularConfigurationRequest"}],"nullable":true},"detail_configuration":{"allOf":[{"$ref":"#/components/schemas/ProReportBlockDetailConfigurationRequest"}],"nullable":true},"chart_configuration":{"allOf":[{"$ref":"#/components/schemas/ProReportBlockChartConfigurationRequest"}],"nullable":true},"stock_configuration":{"allOf":[{"$ref":"#/components/schemas/ProReportBlockStockConfigurationRequest"}],"nullable":true},"filter_entries":{"type":"array","items":{"$ref":"#/components/schemas/ProReportBlockFilterEntryRequest"}}},"required":["block_type","name"]},"ProReportBlockStockConfiguration":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"stock_type":{"enum":["cover_page","table_of_contents","page_break","image","text_block"],"type":"string","description":"* `cover_page` - Cover Page\n* `table_of_contents` - Table of Contents\n* `page_break` - Page Break\n* `image` - Image\n* `text_block` - Text Block","x-spec-enum-id":"6f28c5b5e37123d2"},"title":{"type":"string","nullable":true},"subtitle":{"type":"string","nullable":true},"image":{"type":"integer","nullable":true},"image_detail":{"allOf":[{"$ref":"#/components/schemas/File"}],"readOnly":true},"text_content":{"type":"string","nullable":true}},"required":["id","image_detail","stock_type"]},"ProReportBlockStockConfigurationRequest":{"type":"object","properties":{"stock_type":{"enum":["cover_page","table_of_contents","page_break","image","text_block"],"type":"string","description":"* `cover_page` - Cover Page\n* `table_of_contents` - Table of Contents\n* `page_break` - Page Break\n* `image` - Image\n* `text_block` - Text Block","x-spec-enum-id":"6f28c5b5e37123d2"},"title":{"type":"string","nullable":true},"subtitle":{"type":"string","nullable":true},"image":{"type":"integer","nullable":true},"image_file":{"type":"string","format":"binary","writeOnly":true,"nullable":true},"text_content":{"type":"string","nullable":true}},"required":["stock_type"]},"ProReportBlockTabularConfiguration":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"model_choice":{"enum":["organization","asset","engagement","test","finding","test_type","risk_acceptance","location","url","dependency"],"type":"string","description":"* `organization` - Organization\n* `asset` - Asset\n* `engagement` - Engagement\n* `test` - Test\n* `finding` - Finding\n* `test_type` - Test Type\n* `risk_acceptance` - Risk Acceptance\n* `location` - Location\n* `url` - URL\n* `dependency` - Dependency","x-spec-enum-id":"c08985dc136f4196"},"fields":{"type":"array","items":{"type":"string","maxLength":100}},"ordering":{"type":"string","nullable":true,"maxLength":100}},"required":["id","model_choice"]},"ProReportBlockTabularConfigurationRequest":{"type":"object","properties":{"model_choice":{"enum":["organization","asset","engagement","test","finding","test_type","risk_acceptance","location","url","dependency"],"type":"string","description":"* `organization` - Organization\n* `asset` - Asset\n* `engagement` - Engagement\n* `test` - Test\n* `finding` - Finding\n* `test_type` - Test Type\n* `risk_acceptance` - Risk Acceptance\n* `location` - Location\n* `url` - URL\n* `dependency` - Dependency","x-spec-enum-id":"c08985dc136f4196"},"fields":{"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"ordering":{"type":"string","nullable":true,"maxLength":100}},"required":["model_choice"]},"ProReportTemplate":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"name":{"type":"string","maxLength":255},"description":{"type":"string","nullable":true,"default":""},"created_by":{"type":"string","readOnly":true},"created":{"type":"string","format":"date-time","readOnly":true,"nullable":true,"description":"Time that the object was initially created, and saved to the database"},"updated":{"type":"string","format":"date-time","readOnly":true,"nullable":true,"description":"Time that the object was most recently saved to the database"},"template_blocks":{"type":"array","items":{"$ref":"#/components/schemas/ProReportTemplateBlock"},"readOnly":true},"theme":{"allOf":[{"$ref":"#/components/schemas/ProReportTheme"}],"readOnly":true}},"required":["created","created_by","id","name","template_blocks","theme","updated"]},"ProReportTemplateBlock":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"block":{"allOf":[{"$ref":"#/components/schemas/ProReportBlockList"}],"readOnly":true},"order":{"type":"integer","maximum":2147483647,"minimum":0}},"required":["block","id"]},"ProReportTemplateBlockRequest":{"type":"object","properties":{"block_id":{"type":"integer","writeOnly":true},"order":{"type":"integer","maximum":2147483647,"minimum":0}},"required":["block_id"]},"ProReportTemplateBlockWrite":{"type":"object","properties":{"block_id":{"type":"integer"},"order":{"type":"integer","maximum":2147483647,"minimum":0}},"required":["block_id"]},"ProReportTemplateBlockWriteRequest":{"type":"object","properties":{"block_id":{"type":"integer"},"order":{"type":"integer","maximum":2147483647,"minimum":0}},"required":["block_id"]},"ProReportTemplateList":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"name":{"type":"string","maxLength":255},"description":{"type":"string"},"created_by":{"type":"string","readOnly":true},"created":{"type":"string","format":"date-time","readOnly":true,"nullable":true,"description":"Time that the object was initially created, and saved to the database"},"updated":{"type":"string","format":"date-time","readOnly":true,"nullable":true,"description":"Time that the object was most recently saved to the database"},"block_count":{"type":"integer","readOnly":true}},"required":["block_count","created","created_by","id","name","updated"]},"ProReportTemplateListRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":255},"description":{"type":"string"}},"required":["name"]},"ProReportTemplateRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":255},"description":{"type":"string","nullable":true,"default":""},"template_blocks_write":{"type":"array","items":{"$ref":"#/components/schemas/ProReportTemplateBlockWriteRequest"},"writeOnly":true},"theme_id":{"type":"integer","writeOnly":true,"nullable":true}},"required":["name"]},"ProReportTheme":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"name":{"type":"string","maxLength":255},"primary_color":{"type":"string","maxLength":7},"secondary_color":{"type":"string","maxLength":7},"accent_color":{"type":"string","maxLength":7},"text_color":{"type":"string","maxLength":7},"background_color":{"type":"string","maxLength":7},"base_font_size":{"type":"integer","maximum":16,"minimum":8,"description":"Body font size of generated reports, in pixels."},"header_image":{"type":"object","additionalProperties":{},"nullable":true,"readOnly":true},"footer_image":{"type":"object","additionalProperties":{},"nullable":true,"readOnly":true},"footer_text":{"type":"string","nullable":true},"show_page_numbers":{"type":"boolean"},"created_by":{"type":"integer","readOnly":true,"nullable":true},"created":{"type":"string","format":"date-time","readOnly":true,"nullable":true,"description":"Time that the object was initially created, and saved to the database"},"updated":{"type":"string","format":"date-time","readOnly":true,"nullable":true,"description":"Time that the object was most recently saved to the database"}},"required":["created","created_by","footer_image","header_image","id","name","updated"]},"ProReportThemeRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":255},"primary_color":{"type":"string","minLength":1,"maxLength":7},"secondary_color":{"type":"string","minLength":1,"maxLength":7},"accent_color":{"type":"string","minLength":1,"maxLength":7},"text_color":{"type":"string","minLength":1,"maxLength":7},"background_color":{"type":"string","minLength":1,"maxLength":7},"base_font_size":{"type":"integer","maximum":16,"minimum":8,"description":"Body font size of generated reports, in pixels."},"footer_text":{"type":"string","nullable":true},"show_page_numbers":{"type":"boolean"}},"required":["name"]},"ProSurvey":{"type":"object","description":"Serializer for a ProSurvey (Engagement_Survey model).","properties":{"id":{"type":"integer","readOnly":true},"name":{"type":"string","maxLength":200},"description":{"type":"string"},"active":{"type":"boolean"},"questions":{"type":"array","items":{"type":"integer"}},"prefetch":{"type":"object","properties":{}}},"required":["id","questions"]},"ProSurveyRequest":{"type":"object","description":"Serializer for a ProSurvey (Engagement_Survey model).","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","minLength":1},"active":{"type":"boolean"},"questions":{"type":"array","items":{"type":"integer"}}},"required":["questions"]},"ProUserProfile":{"type":"object","description":"Restore the RBAC nested fields the OSS ``UserProfileSerializer`` dropped.\n\nThe 3.0 authorization refactor gutted OSS ``UserProfileSerializer`` down to\n``user`` / ``user_contact_info`` when RBAC moved to Pro, silently removing\n``global_role`` / ``dojo_group_member`` / ``product_member`` /\n``product_type_member`` from ``/api/v2/user_profile/``. Pro owns the RBAC\nmodels, so it re-exposes the same fields here using its own serializers.\nRead-only on this endpoint (the nested serializers' ``validate`` runs only on\nwrites, which this profile endpoint never performs).","properties":{"user":{"$ref":"#/components/schemas/User"},"user_contact_info":{"$ref":"#/components/schemas/UserContactInfo"},"global_role":{"$ref":"#/components/schemas/GlobalRole"},"dojo_group_member":{"type":"array","items":{"$ref":"#/components/schemas/EnhancedDojoGroupMember"}},"product_type_member":{"type":"array","items":{"$ref":"#/components/schemas/EnhancedProductTypeMember"}},"product_member":{"type":"array","items":{"$ref":"#/components/schemas/EnhancedProductMember"}}},"required":["user"]},"Product":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"findings_count":{"type":"integer","readOnly":true},"findings_list":{"type":"array","items":{"type":"integer"},"readOnly":true},"business_criticality":{"enum":["very high","high","medium","low","very low","none","",null],"type":"string","description":"* `very high` - Very High\n* `high` - High\n* `medium` - Medium\n* `low` - Low\n* `very low` - Very Low\n* `none` - None","x-spec-enum-id":"ef412461eb271471","nullable":true},"platform":{"enum":["web service","desktop","iot","mobile","web","",null],"type":"string","description":"* `web service` - API\n* `desktop` - Desktop\n* `iot` - Internet of Things\n* `mobile` - Mobile\n* `web` - Web","x-spec-enum-id":"48ed03cfd9c8641d","nullable":true},"lifecycle":{"enum":["construction","production","retirement","",null],"type":"string","description":"* `construction` - Construction\n* `production` - Production\n* `retirement` - Retirement","x-spec-enum-id":"65f9d93250b96377","nullable":true},"origin":{"enum":["third party library","purchased","contractor","internal","open source","outsourced","",null],"type":"string","description":"* `third party library` - Third Party Library\n* `purchased` - Purchased\n* `contractor` - Contractor Developed\n* `internal` - Internally Developed\n* `open source` - Open Source\n* `outsourced` - Outsourced","x-spec-enum-id":"435026afe6c513fa","nullable":true},"product_meta":{"type":"array","items":{"$ref":"#/components/schemas/ProductMeta"},"readOnly":true},"created":{"type":"string","format":"date-time","readOnly":true,"nullable":true,"description":"Time that the object was initially created, and saved to the database"},"name":{"type":"string","maxLength":255},"description":{"type":"string","maxLength":4000},"prod_numeric_grade":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true},"user_records":{"type":"integer","maximum":2147483647,"minimum":0,"nullable":true,"description":"Estimate the number of user records within the application."},"revenue":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$","nullable":true,"description":"Estimate the application's revenue."},"external_audience":{"type":"boolean","description":"Specify if the application is used by people outside the organization."},"internet_accessible":{"type":"boolean","description":"Specify if the application is accessible from the public internet."},"enable_product_tag_inheritance":{"type":"boolean","description":"Enables product tag inheritance. Any tags added on a product will automatically be added to all Engagements, Tests, and Findings"},"enable_simple_risk_acceptance":{"type":"boolean","description":"Allows simple risk acceptance by checking/unchecking a checkbox."},"enable_full_risk_acceptance":{"type":"boolean","description":"Allows full risk acceptance using a risk acceptance form, expiration date, uploaded proof, etc."},"disable_sla_breach_notifications":{"type":"boolean","description":"Disable SLA breach notifications if configured in the global settings"},"product_manager":{"type":"integer","nullable":true},"technical_contact":{"type":"integer","nullable":true},"team_manager":{"type":"integer","nullable":true},"prod_type":{"type":"integer"},"sla_configuration":{"type":"integer"},"authorized_users":{"type":"array","items":{"type":"integer"}},"regulations":{"type":"array","items":{"type":"integer"}},"tags":{"type":"array","items":{"type":"string"}}},"required":["created","description","findings_count","findings_list","id","name","prod_type","product_meta"]},"ProductAPIScanConfiguration":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"service_key_1":{"type":"string","nullable":true,"maxLength":200},"service_key_2":{"type":"string","nullable":true,"maxLength":200},"service_key_3":{"type":"string","nullable":true,"maxLength":200},"product":{"type":"integer"},"tool_configuration":{"type":"integer"},"prefetch":{"type":"object","properties":{"product":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/Product"}},"tool_configuration":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/ToolConfiguration"}}}}},"required":["id","product","tool_configuration"]},"ProductAPIScanConfigurationRequest":{"type":"object","properties":{"service_key_1":{"type":"string","nullable":true,"maxLength":200},"service_key_2":{"type":"string","nullable":true,"maxLength":200},"service_key_3":{"type":"string","nullable":true,"maxLength":200},"product":{"type":"integer"},"tool_configuration":{"type":"integer"}},"required":["product","tool_configuration"]},"ProductMeta":{"type":"object","properties":{"name":{"type":"string","maxLength":120},"value":{"type":"string","maxLength":300}},"required":["name","value"]},"ProductMetaRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120},"value":{"type":"string","minLength":1,"maxLength":300}},"required":["name","value"]},"ProductType":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"created":{"type":"string","format":"date-time","readOnly":true,"nullable":true,"description":"Time that the object was initially created, and saved to the database"},"updated":{"type":"string","format":"date-time","readOnly":true,"nullable":true,"description":"Time that the object was most recently saved to the database"},"name":{"type":"string","maxLength":255},"description":{"type":"string","nullable":true,"maxLength":4000},"critical_product":{"type":"boolean"},"key_product":{"type":"boolean"},"authorized_users":{"type":"array","items":{"type":"integer"}}},"required":["created","id","name","updated"]},"Products":{"type":"object","description":"Extend from the BaseModelSerializer to allow for generalized extensions.","properties":{"id":{"type":"integer","readOnly":true},"findings_count":{"type":"integer","readOnly":true},"findings_list":{"type":"array","items":{"type":"integer"},"readOnly":true},"business_criticality":{"enum":["very high","high","medium","low","very low","none","",null],"type":"string","description":"* `very high` - Very High\n* `high` - High\n* `medium` - Medium\n* `low` - Low\n* `very low` - Very Low\n* `none` - None","x-spec-enum-id":"ef412461eb271471","nullable":true},"platform":{"enum":["web service","desktop","iot","mobile","web","",null],"type":"string","description":"* `web service` - API\n* `desktop` - Desktop\n* `iot` - Internet of Things\n* `mobile` - Mobile\n* `web` - Web","x-spec-enum-id":"48ed03cfd9c8641d","nullable":true},"lifecycle":{"enum":["construction","production","retirement","",null],"type":"string","description":"* `construction` - Construction\n* `production` - Production\n* `retirement` - Retirement","x-spec-enum-id":"65f9d93250b96377","nullable":true},"origin":{"enum":["third party library","purchased","contractor","internal","open source","outsourced","",null],"type":"string","description":"* `third party library` - Third Party Library\n* `purchased` - Purchased\n* `contractor` - Contractor Developed\n* `internal` - Internally Developed\n* `open source` - Open Source\n* `outsourced` - Outsourced","x-spec-enum-id":"435026afe6c513fa","nullable":true},"product_meta":{"type":"array","items":{"$ref":"#/components/schemas/ProductMeta"},"readOnly":true},"parent":{"type":"integer","nullable":true},"members":{"type":"array","items":{"type":"integer"},"readOnly":true},"authorization_groups":{"type":"array","items":{"type":"integer"},"readOnly":true},"prioritization_engine":{"type":"integer","nullable":true},"created":{"type":"string","format":"date-time","readOnly":true,"nullable":true,"description":"Time that the object was initially created, and saved to the database"},"name":{"type":"string","maxLength":255},"description":{"type":"string","maxLength":4000},"prod_numeric_grade":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true},"user_records":{"type":"integer","maximum":2147483647,"minimum":0,"nullable":true,"description":"Estimate the number of user records within the application."},"revenue":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$","nullable":true,"description":"Estimate the application's revenue."},"external_audience":{"type":"boolean","description":"Specify if the application is used by people outside the organization."},"internet_accessible":{"type":"boolean","description":"Specify if the application is accessible from the public internet."},"enable_product_tag_inheritance":{"type":"boolean","description":"Enables product tag inheritance. Any tags added on a product will automatically be added to all Engagements, Tests, and Findings"},"enable_simple_risk_acceptance":{"type":"boolean","description":"Allows simple risk acceptance by checking/unchecking a checkbox."},"enable_full_risk_acceptance":{"type":"boolean","description":"Allows full risk acceptance using a risk acceptance form, expiration date, uploaded proof, etc."},"disable_sla_breach_notifications":{"type":"boolean","description":"Disable SLA breach notifications if configured in the global settings"},"product_manager":{"type":"integer","nullable":true},"technical_contact":{"type":"integer","nullable":true},"team_manager":{"type":"integer","nullable":true},"prod_type":{"type":"integer"},"sla_configuration":{"type":"integer"},"regulations":{"type":"array","items":{"type":"integer"}},"tags":{"type":"array","items":{"type":"string"}},"prefetch":{"type":"object","properties":{"authorized_users":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}},"prod_type":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/ProductType"}},"product_manager":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}},"regulations":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/Regulation"}},"sla_configuration":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/SLAConfiguration"}},"team_manager":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}},"technical_contact":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}}}}},"required":["authorization_groups","created","description","findings_count","findings_list","id","members","name","prod_type","product_meta"]},"ProductsRequest":{"type":"object","description":"Extend from the BaseModelSerializer to allow for generalized extensions.","properties":{"business_criticality":{"enum":["very high","high","medium","low","very low","none","",null],"type":"string","description":"* `very high` - Very High\n* `high` - High\n* `medium` - Medium\n* `low` - Low\n* `very low` - Very Low\n* `none` - None","x-spec-enum-id":"ef412461eb271471","nullable":true},"platform":{"enum":["web service","desktop","iot","mobile","web","",null],"type":"string","description":"* `web service` - API\n* `desktop` - Desktop\n* `iot` - Internet of Things\n* `mobile` - Mobile\n* `web` - Web","x-spec-enum-id":"48ed03cfd9c8641d","nullable":true},"lifecycle":{"enum":["construction","production","retirement","",null],"type":"string","description":"* `construction` - Construction\n* `production` - Production\n* `retirement` - Retirement","x-spec-enum-id":"65f9d93250b96377","nullable":true},"origin":{"enum":["third party library","purchased","contractor","internal","open source","outsourced","",null],"type":"string","description":"* `third party library` - Third Party Library\n* `purchased` - Purchased\n* `contractor` - Contractor Developed\n* `internal` - Internally Developed\n* `open source` - Open Source\n* `outsourced` - Outsourced","x-spec-enum-id":"435026afe6c513fa","nullable":true},"parent":{"type":"integer","nullable":true},"prioritization_engine":{"type":"integer","nullable":true},"name":{"type":"string","minLength":1,"maxLength":255},"description":{"type":"string","minLength":1,"maxLength":4000},"prod_numeric_grade":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true},"user_records":{"type":"integer","maximum":2147483647,"minimum":0,"nullable":true,"description":"Estimate the number of user records within the application."},"revenue":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$","nullable":true,"description":"Estimate the application's revenue."},"external_audience":{"type":"boolean","description":"Specify if the application is used by people outside the organization."},"internet_accessible":{"type":"boolean","description":"Specify if the application is accessible from the public internet."},"enable_product_tag_inheritance":{"type":"boolean","description":"Enables product tag inheritance. Any tags added on a product will automatically be added to all Engagements, Tests, and Findings"},"enable_simple_risk_acceptance":{"type":"boolean","description":"Allows simple risk acceptance by checking/unchecking a checkbox."},"enable_full_risk_acceptance":{"type":"boolean","description":"Allows full risk acceptance using a risk acceptance form, expiration date, uploaded proof, etc."},"disable_sla_breach_notifications":{"type":"boolean","description":"Disable SLA breach notifications if configured in the global settings"},"product_manager":{"type":"integer","nullable":true},"technical_contact":{"type":"integer","nullable":true},"team_manager":{"type":"integer","nullable":true},"prod_type":{"type":"integer"},"sla_configuration":{"type":"integer"},"regulations":{"type":"array","items":{"type":"integer"}},"tags":{"type":"array","items":{"type":"string","minLength":1}}},"required":["description","name","prod_type"]},"PublicAssignProduct":{"type":"object","properties":{"product_name":{"type":"string"}},"required":["product_name"]},"PublicAssignProductRequest":{"type":"object","properties":{"product_name":{"type":"string","minLength":1}},"required":["product_name"]},"PublicMappingSubtypeStatus":{"type":"object","description":"User-facing variant -- restricts to GOOD and IGNORED (users shouldn't set MISSING).","properties":{"test_type_name":{"type":"string","description":"The test_type_name of the subtype to update."},"status":{"enum":["GOOD","IGNORED"],"type":"string","x-spec-enum-id":"8f517a58d3bf4672","description":"The new status for this subtype. Only GOOD and IGNORED are user-settable.\n\n* `GOOD` - GOOD\n* `IGNORED` - IGNORED"}},"required":["status","test_type_name"]},"RawFile":{"type":"object","properties":{"file":{"type":"string","format":"uri"}},"required":["file"]},"ReImportFindings":{"type":"object","properties":{"limit":{"type":"integer"},"created":{"type":"array","items":{"$ref":"#/components/schemas/FindingPreviewItem"}},"reactivated":{"type":"array","items":{"$ref":"#/components/schemas/FindingPreviewItem"}},"closed":{"type":"array","items":{"$ref":"#/components/schemas/FindingPreviewItem"}}},"required":["closed","created","limit","reactivated"]},"ReImportPreviewRequestRequest":{"type":"object","description":"Request serializer for reimport preview.","properties":{"scan_type":{"type":"string","minLength":1},"file":{"type":"string","format":"binary"},"test":{"type":"integer","nullable":true,"description":"Direct test ID. If omitted, engagement + scan_type are used to find the test."},"product":{"type":"integer","nullable":true,"description":"Product ID (required when using engagement criteria)"},"engagement":{"type":"object","description":"Exactly one of: engagement_id, name, branch_tag, or tags. With multipart/form-data, pass this field as a JSON string.","properties":{"engagement_id":{"type":"integer","nullable":true},"name":{"type":"string","nullable":true},"branch_tag":{"type":"string","nullable":true},"tags":{"type":"array","items":{"type":"string"},"nullable":true}}},"close_old_findings":{"type":"boolean","default":true},"do_not_reactivate":{"type":"boolean","default":false},"service":{"type":"string","nullable":true},"minimum_severity":{"enum":["Info","Low","Medium","High","Critical"],"type":"string","description":"* `Info` - Info\n* `Low` - Low\n* `Medium` - Medium\n* `High` - High\n* `Critical` - Critical","x-spec-enum-id":"fc5d16a20ed06136","default":"Info"},"findings_limit":{"type":"integer","maximum":250,"minimum":1,"default":10}},"required":["file","scan_type"]},"ReImportPreviewResponse":{"type":"object","description":"Response serializer for reimport preview.","properties":{"parsed_findings_count":{"type":"integer"},"statistics":{"$ref":"#/components/schemas/PreviewReImportStatistics"},"findings":{"$ref":"#/components/schemas/ReImportFindings"},"product_id":{"type":"integer"},"product_name":{"type":"string"},"engagement_id":{"type":"integer"},"engagement_name":{"type":"string"},"engagement_branch_tag":{"type":"string","nullable":true},"engagement_version":{"type":"string","nullable":true},"engagement_tags":{"type":"array","items":{"type":"string"}},"test_id":{"type":"integer","nullable":true},"test_title":{"type":"string","nullable":true},"existing_test_found":{"type":"boolean"},"scan_type":{"type":"string"}},"required":["engagement_branch_tag","engagement_id","engagement_name","engagement_tags","engagement_version","existing_test_found","findings","parsed_findings_count","product_id","product_name","scan_type","statistics","test_id","test_title"]},"Record":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"connector_name":{"type":"string","readOnly":true},"connector_config_id":{"type":"integer","readOnly":true},"connector_type":{"type":"string","readOnly":true},"scan_type":{"type":"string","readOnly":true},"mapping":{"$ref":"#/components/schemas/Mapping"},"extended_mapping":{"allOf":[{"$ref":"#/components/schemas/ExpandedMapping"}],"readOnly":true},"delta_sync_timestamp":{"type":"string","format":"date-time","readOnly":true},"vendor_equivalent_product_name":{"type":"string","title":"Vender Equivalent Product Name","description":"The name of the Vendor Equivalent Product","maxLength":256},"vendor_equivalent_product_id":{"type":"string","title":"Vender Equivalent Product ID","description":"The unique ID of the Vendor Equivalent Product","maxLength":256},"vendor_equivalent_product_description":{"type":"string","description":"A description of the Vendor Equivalent Product","maxLength":256},"first_seen":{"type":"string","format":"date-time","description":"This is the first time this record has been seen in the security tool"},"last_seen":{"type":"string","format":"date-time","description":"This is the last time this record has been seen in the security tool"},"finalized":{"type":"string","format":"date-time","nullable":true,"description":"This is the time that the object mapping was completed for the first time. This marks the last time that dojo will make any changes to this record"},"state":{"enum":["NEW","GOOD","STALE","MISSING","IGNORED","PARTIAL","",null],"type":"string","x-spec-enum-id":"bd142512a4c8aa6e","nullable":true,"description":"The state of the record as it exists\n\n* `NEW` - NEW\n* `GOOD` - GOOD\n* `STALE` - STALE\n* `MISSING` - MISSING\n* `IGNORED` - IGNORED\n* `PARTIAL` - PARTIAL"},"custom_attributes":{"description":"Key value pairs that represent all that cannot be captured in the standard definition of a record"}},"required":["connector_config_id","connector_name","connector_type","delta_sync_timestamp","extended_mapping","id","scan_type","vendor_equivalent_product_id","vendor_equivalent_product_name"]},"RecordStatus":{"type":"object","properties":{"state":{"enum":["GOOD","IGNORED"],"type":"string","description":"* `GOOD` - GOOD\n* `IGNORED` - IGNORED","x-spec-enum-id":"8f517a58d3bf4672"}},"required":["state"]},"Regulation":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"name":{"type":"string","description":"The name of the regulation.","maxLength":128},"acronym":{"type":"string","description":"A shortened representation of the name.","maxLength":20},"category":{"enum":["privacy","finance","education","medical","corporate","security","government","other"],"type":"string","x-spec-enum-id":"18b03e6cbd7d3e7d","description":"The subject of the regulation.\n\n* `privacy` - Privacy\n* `finance` - Finance\n* `education` - Education\n* `medical` - Medical\n* `corporate` - Corporate\n* `security` - Security\n* `government` - Government\n* `other` - Other"},"jurisdiction":{"type":"string","description":"The territory over which the regulation applies.","maxLength":64},"description":{"type":"string","description":"Information about the regulation's purpose."},"reference":{"type":"string","format":"uri","description":"An external URL for more information.","maxLength":200}},"required":["acronym","category","id","jurisdiction","name"]},"RegulationRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"The name of the regulation.","maxLength":128},"acronym":{"type":"string","minLength":1,"description":"A shortened representation of the name.","maxLength":20},"category":{"enum":["privacy","finance","education","medical","corporate","security","government","other"],"type":"string","x-spec-enum-id":"18b03e6cbd7d3e7d","description":"The subject of the regulation.\n\n* `privacy` - Privacy\n* `finance` - Finance\n* `education` - Education\n* `medical` - Medical\n* `corporate` - Corporate\n* `security` - Security\n* `government` - Government\n* `other` - Other"},"jurisdiction":{"type":"string","minLength":1,"description":"The territory over which the regulation applies.","maxLength":64},"description":{"type":"string","description":"Information about the regulation's purpose."},"reference":{"type":"string","format":"uri","description":"An external URL for more information.","maxLength":200}},"required":["acronym","category","jurisdiction","name"]},"ReportGenerate":{"type":"object","properties":{"executive_summary":{"allOf":[{"$ref":"#/components/schemas/ExecutiveSummary"}],"nullable":true},"product_type":{"allOf":[{"$ref":"#/components/schemas/ProductType"}],"readOnly":true},"product":{"allOf":[{"$ref":"#/components/schemas/Product"}],"readOnly":true},"engagement":{"allOf":[{"$ref":"#/components/schemas/Engagement"}],"readOnly":true},"report_name":{"type":"string","maxLength":200},"report_info":{"type":"string","maxLength":200},"test":{"allOf":[{"$ref":"#/components/schemas/Test"}],"readOnly":true},"endpoint":{"allOf":[{"$ref":"#/components/schemas/Endpoint"}],"readOnly":true},"findings":{"type":"array","items":{"$ref":"#/components/schemas/Finding"},"readOnly":true},"user":{"allOf":[{"$ref":"#/components/schemas/UserStub"}],"readOnly":true},"team_name":{"type":"string","maxLength":200},"title":{"type":"string","maxLength":200},"user_id":{"type":"integer"},"host":{"type":"string","maxLength":200},"finding_notes":{"type":"array","items":{"$ref":"#/components/schemas/FindingToNotes"},"nullable":true},"endpoints":{"type":"array","items":{"$ref":"#/components/schemas/V3EndpointCompatible"},"readOnly":true}},"required":["endpoint","endpoints","engagement","executive_summary","findings","host","product","product_type","report_info","report_name","team_name","test","title","user","user_id"]},"ReportGenerateOptionRequest":{"type":"object","properties":{"include_finding_notes":{"type":"boolean","default":false},"include_finding_images":{"type":"boolean","default":false},"include_executive_summary":{"type":"boolean","default":false},"include_table_of_contents":{"type":"boolean","default":false}}},"RiskAcceptance":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"path":{"type":"string","readOnly":true},"name":{"type":"string","description":"Descriptive name which in the future may also be used to group risk acceptances together across engagements and products","maxLength":300},"recommendation":{"enum":["A","V","M","F","T"],"type":"string","x-spec-enum-id":"8690fff015f0d4c3","title":"Security Recommendation","description":"Recommendation from the security team.\n\n* `A` - Accept (The risk is acknowledged, yet remains)\n* `V` - Avoid (Do not engage with whatever creates the risk)\n* `M` - Mitigate (The risk still exists, yet compensating controls make it less of a threat)\n* `F` - Fix (The risk is eradicated)\n* `T` - Transfer (The risk is transferred to a 3rd party)"},"recommendation_details":{"type":"string","nullable":true,"title":"Security Recommendation Details","description":"Explanation of security recommendation"},"decision":{"enum":["A","V","M","F","T"],"type":"string","x-spec-enum-id":"8690fff015f0d4c3","description":"Risk treatment decision by risk owner\n\n* `A` - Accept (The risk is acknowledged, yet remains)\n* `V` - Avoid (Do not engage with whatever creates the risk)\n* `M` - Mitigate (The risk still exists, yet compensating controls make it less of a threat)\n* `F` - Fix (The risk is eradicated)\n* `T` - Transfer (The risk is transferred to a 3rd party)"},"decision_details":{"type":"string","nullable":true,"description":"If a compensating control exists to mitigate the finding or reduce risk, then list the compensating control(s)."},"accepted_by":{"type":"string","nullable":true,"description":"The person that accepts the risk, can be outside of DefectDojo.","maxLength":200},"expiration_date":{"type":"string","format":"date-time","nullable":true,"description":"When the risk acceptance expires, the findings will be reactivated (unless disabled below)."},"expiration_date_warned":{"type":"string","format":"date-time","nullable":true,"description":"(readonly) Date at which notice about the risk acceptance expiration was sent."},"expiration_date_handled":{"type":"string","format":"date-time","nullable":true,"description":"(readonly) When the risk acceptance expiration was handled (manually or by the daily job)."},"reactivate_expired":{"type":"boolean","title":"Reactivate findings on expiration","description":"Reactivate findings when risk acceptance expires?"},"restart_sla_expired":{"type":"boolean","title":"Restart SLA on expiration","description":"When enabled, the SLA for findings is restarted when the risk acceptance expires."},"created":{"type":"string","format":"date-time","readOnly":true},"updated":{"type":"string","format":"date-time","readOnly":true},"owner":{"type":"integer","description":"User in DefectDojo owning this acceptance. Only the owner and staff users can edit the risk acceptance."},"accepted_findings":{"type":"array","items":{"type":"integer"}},"notes":{"type":"array","items":{"type":"integer"},"readOnly":true}},"required":["accepted_findings","created","id","name","notes","owner","path","updated"]},"RiskAcceptanceProof":{"type":"object","properties":{"path":{"type":"string","format":"uri"}},"required":["path"]},"RiskAcceptanceToNotes":{"type":"object","properties":{"risk_acceptance_id":{"type":"integer","nullable":true},"notes":{"type":"array","items":{"$ref":"#/components/schemas/Note"}}},"required":["notes","risk_acceptance_id"]},"Role":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"name":{"type":"string","maxLength":255},"is_owner":{"type":"boolean"}},"required":["id","name"]},"SLAConfiguration":{"type":"object","description":"Base serializer for all models.","properties":{"id":{"type":"integer","readOnly":true},"configuration_type":{"enum":["Severity","Risk"],"type":"string","x-spec-enum-id":"a4582373721827bc","title":"SLA Configuration Type","description":"Indicates what basis the SLA will be calculated on for findings associated with this SLA configuration.\n\n* `Severity` - Measure SLA based on Finding Severity\n* `Risk` - Measure SLA based on Finding Risk"},"name":{"type":"string","title":"Custom SLA Name","description":"A unique name for the set of SLAs."},"description":{"type":"string","nullable":true},"restart_sla_on_reactivation":{"type":"boolean","title":"Restart SLA when findings are reactivated","description":"When enabled, findings that were previously mitigated but are reactivated durign reimport will have their SLA period restarted."},"async_updating":{"type":"boolean","readOnly":true,"description":"Findings under this SLA configuration are asynchronously being updated"},"critical":{"type":"integer","default":7,"title":"Critical Finding SLA Days","description":"The number of days to remediate a critical finding."},"enforce_critical":{"type":"boolean","default":true,"title":"Enforce Critical Finding SLA Days","description":"When enabled, critical findings will be assigned an SLA expiration date based on the critical finding SLA days within this SLA configuration."},"high":{"type":"integer","default":30,"title":"High Finding SLA Days","description":"The number of days to remediate a high finding."},"enforce_high":{"type":"boolean","default":true,"title":"Enforce High Finding SLA Days","description":"When enabled, high findings will be assigned an SLA expiration date based on the high finding SLA days within this SLA configuration."},"medium":{"type":"integer","default":90,"title":"Medium Finding SLA Days","description":"The number of days to remediate a medium finding."},"enforce_medium":{"type":"boolean","default":true,"title":"Enforce Medium Finding SLA Days","description":"When enabled, medium findings will be assigned an SLA expiration date based on the medium finding SLA days within this SLA configuration."},"low":{"type":"integer","default":120,"title":"Low Finding SLA Days","description":"The number of days to remediate a low finding."},"enforce_low":{"type":"boolean","default":true,"title":"Enforce Low Finding SLA Days","description":"When enabled, low findings will be assigned an SLA expiration date based on the low finding SLA days within this SLA configuration."},"urgent_risk":{"type":"integer","maximum":2147483647,"minimum":1,"default":7,"title":"Urgent Risk Finding SLA Days","description":"The number of days to remediate an urgent risk finding."},"enforce_urgent_risk":{"type":"boolean","title":"Enforce Urgent Risk Finding SLA Days","description":"When enabled, urgent risk findings will be assigned an SLA expiration date based on the urgent risk finding SLA days within this SLA configuration."},"needs_action_risk":{"type":"integer","maximum":2147483647,"minimum":1,"default":30,"title":"Needs Action Risk Finding SLA Days","description":"The number of days to remediate a needs action risk finding."},"enforce_needs_action_risk":{"type":"boolean","title":"Enforce Needs Action Risk Finding SLA Days","description":"When enabled, needs action risk findings will be assigned an SLA expiration date based on the needs action risk finding SLA days within this SLA configuration."},"medium_risk":{"type":"integer","maximum":2147483647,"minimum":1,"default":90,"title":"Medium Risk Finding SLA Days","description":"The number of days to remediate a medium risk finding."},"enforce_medium_risk":{"type":"boolean","title":"Enforce Medium Risk Finding SLA Days","description":"When enabled, medium risk findings will be assigned an SLA expiration date based on the medium risk finding SLA days within this SLA configuration."},"low_risk":{"type":"integer","maximum":2147483647,"minimum":1,"default":120,"title":"Low Risk Finding SLA Days","description":"The number of days to remediate a low risk finding."},"enforce_low_risk":{"type":"boolean","title":"Enforce Low Risk Finding SLA Days","description":"When enabled, low risk findings will be assigned an SLA expiration date based on the low risk finding SLA days within this SLA configuration."}},"required":["async_updating","id","restart_sla_on_reactivation"]},"SLAConfigurationRequest":{"type":"object","description":"Base serializer for all models.","properties":{"configuration_type":{"enum":["Severity","Risk"],"type":"string","x-spec-enum-id":"a4582373721827bc","title":"SLA Configuration Type","description":"Indicates what basis the SLA will be calculated on for findings associated with this SLA configuration.\n\n* `Severity` - Measure SLA based on Finding Severity\n* `Risk` - Measure SLA based on Finding Risk"},"name":{"type":"string","minLength":1,"title":"Custom SLA Name","description":"A unique name for the set of SLAs."},"description":{"type":"string","nullable":true,"minLength":1},"restart_sla_on_reactivation":{"type":"boolean","title":"Restart SLA when findings are reactivated","description":"When enabled, findings that were previously mitigated but are reactivated durign reimport will have their SLA period restarted."},"critical":{"type":"integer","default":7,"title":"Critical Finding SLA Days","description":"The number of days to remediate a critical finding."},"enforce_critical":{"type":"boolean","default":true,"title":"Enforce Critical Finding SLA Days","description":"When enabled, critical findings will be assigned an SLA expiration date based on the critical finding SLA days within this SLA configuration."},"high":{"type":"integer","default":30,"title":"High Finding SLA Days","description":"The number of days to remediate a high finding."},"enforce_high":{"type":"boolean","default":true,"title":"Enforce High Finding SLA Days","description":"When enabled, high findings will be assigned an SLA expiration date based on the high finding SLA days within this SLA configuration."},"medium":{"type":"integer","default":90,"title":"Medium Finding SLA Days","description":"The number of days to remediate a medium finding."},"enforce_medium":{"type":"boolean","default":true,"title":"Enforce Medium Finding SLA Days","description":"When enabled, medium findings will be assigned an SLA expiration date based on the medium finding SLA days within this SLA configuration."},"low":{"type":"integer","default":120,"title":"Low Finding SLA Days","description":"The number of days to remediate a low finding."},"enforce_low":{"type":"boolean","default":true,"title":"Enforce Low Finding SLA Days","description":"When enabled, low findings will be assigned an SLA expiration date based on the low finding SLA days within this SLA configuration."},"urgent_risk":{"type":"integer","maximum":2147483647,"minimum":1,"default":7,"title":"Urgent Risk Finding SLA Days","description":"The number of days to remediate an urgent risk finding."},"enforce_urgent_risk":{"type":"boolean","title":"Enforce Urgent Risk Finding SLA Days","description":"When enabled, urgent risk findings will be assigned an SLA expiration date based on the urgent risk finding SLA days within this SLA configuration."},"needs_action_risk":{"type":"integer","maximum":2147483647,"minimum":1,"default":30,"title":"Needs Action Risk Finding SLA Days","description":"The number of days to remediate a needs action risk finding."},"enforce_needs_action_risk":{"type":"boolean","title":"Enforce Needs Action Risk Finding SLA Days","description":"When enabled, needs action risk findings will be assigned an SLA expiration date based on the needs action risk finding SLA days within this SLA configuration."},"medium_risk":{"type":"integer","maximum":2147483647,"minimum":1,"default":90,"title":"Medium Risk Finding SLA Days","description":"The number of days to remediate a medium risk finding."},"enforce_medium_risk":{"type":"boolean","title":"Enforce Medium Risk Finding SLA Days","description":"When enabled, medium risk findings will be assigned an SLA expiration date based on the medium risk finding SLA days within this SLA configuration."},"low_risk":{"type":"integer","maximum":2147483647,"minimum":1,"default":120,"title":"Low Risk Finding SLA Days","description":"The number of days to remediate a low risk finding."},"enforce_low_risk":{"type":"boolean","title":"Enforce Low Risk Finding SLA Days","description":"When enabled, low risk findings will be assigned an SLA expiration date based on the low risk finding SLA days within this SLA configuration."}},"required":["restart_sla_on_reactivation"]},"SbomImport":{"type":"object","properties":{"file":{"type":"string","format":"uri","description":"SBOM or dependency manifest file","pattern":"(?:json|xml|spdx)$"},"scan_type":{"enum":["CycloneDX","SPDX"],"type":"string","x-spec-enum-id":"1f30ffe9db66798d","description":"SBOM format: 'CycloneDX' or 'SPDX'\n\n* `CycloneDX` - CycloneDX\n* `SPDX` - SPDX"},"product":{"type":"integer","description":"Product ID to associate dependencies with"},"product_name":{"type":"string","description":"Product name to look up or auto-create and associate dependencies with","maxLength":255},"product_type_name":{"type":"string","description":"Product type name used when auto-creating products","maxLength":255},"auto_create_context":{"type":"boolean","default":false,"description":"If true, products and product types will be created if they do not exist"},"replace_dependencies":{"type":"boolean","default":false,"description":"When true, product-dependency associations not present in this import are removed (unless anchored by finding references). When false (default), dependencies are merged with existing ones."},"background_import":{"type":"boolean","nullable":true,"description":"Selecting to import in the background will modify the import process to first parse the file for any errors, return the response, and then create dependencies in the background"},"dependencies_processed":{"type":"integer","readOnly":true},"task_id":{"type":"string","readOnly":true},"status":{"type":"string","readOnly":true}},"required":["dependencies_processed","file","scan_type","status","task_id"]},"SbomImportRequest":{"type":"object","properties":{"file":{"type":"string","format":"binary","description":"SBOM or dependency manifest file","pattern":"(?:json|xml|spdx)$"},"scan_type":{"enum":["CycloneDX","SPDX"],"type":"string","x-spec-enum-id":"1f30ffe9db66798d","description":"SBOM format: 'CycloneDX' or 'SPDX'\n\n* `CycloneDX` - CycloneDX\n* `SPDX` - SPDX"},"product":{"type":"integer","description":"Product ID to associate dependencies with"},"product_name":{"type":"string","minLength":1,"description":"Product name to look up or auto-create and associate dependencies with","maxLength":255},"product_type_name":{"type":"string","minLength":1,"description":"Product type name used when auto-creating products","maxLength":255},"auto_create_context":{"type":"boolean","default":false,"description":"If true, products and product types will be created if they do not exist"},"replace_dependencies":{"type":"boolean","default":false,"description":"When true, product-dependency associations not present in this import are removed (unless anchored by finding references). When false (default), dependencies are merged with existing ones."},"background_import":{"type":"boolean","nullable":true,"description":"Selecting to import in the background will modify the import process to first parse the file for any errors, return the response, and then create dependencies in the background"}},"required":["file","scan_type"]},"ScanStatusReportRequest":{"type":"object","description":"Terminal scan status the engine POSTs to ``/api/v2/sensei/scan_status/``\nwhen a server-side job finishes.\n\n``scan_run_id`` echoes the id carried on the dispatched job (see\n``dispatch._record_scan_run``). ``root_cause``/``exit_code`` populate on\nfailure; ``engine_job_id`` is recorded for cross-referencing engine logs.","properties":{"scan_run_id":{"type":"integer"},"status":{"enum":["succeeded","failed","interrupted"],"type":"string","description":"* `succeeded` - succeeded\n* `failed` - failed\n* `interrupted` - interrupted","x-spec-enum-id":"84e918b9b50bbd98"},"exit_code":{"type":"integer","nullable":true},"root_cause":{"type":"string","default":""},"engine_job_id":{"type":"string","default":""},"engagement_id":{"type":"integer","nullable":true},"llm_kind":{"type":"string","default":""},"tokens_in":{"type":"integer","nullable":true,"default":0},"tokens_out":{"type":"integer","nullable":true,"default":0},"llm_model":{"type":"string","default":""},"llm_provider":{"type":"string","default":""},"finding_count":{"type":"integer","nullable":true,"default":0}},"required":["scan_run_id","status"]},"SecretOnly":{"type":"object","properties":{"secret":{"type":"string"}},"required":["secret"]},"SeverityStatusStatistics":{"type":"object","properties":{"info":{"$ref":"#/components/schemas/StatusStatistics"},"low":{"$ref":"#/components/schemas/StatusStatistics"},"medium":{"$ref":"#/components/schemas/StatusStatistics"},"high":{"$ref":"#/components/schemas/StatusStatistics"},"critical":{"$ref":"#/components/schemas/StatusStatistics"},"total":{"$ref":"#/components/schemas/StatusStatistics"}},"required":["critical","high","info","low","medium","total"]},"SeverityStatusStatisticsRequest":{"type":"object","properties":{"info":{"$ref":"#/components/schemas/StatusStatisticsRequest"},"low":{"$ref":"#/components/schemas/StatusStatisticsRequest"},"medium":{"$ref":"#/components/schemas/StatusStatisticsRequest"},"high":{"$ref":"#/components/schemas/StatusStatisticsRequest"},"critical":{"$ref":"#/components/schemas/StatusStatisticsRequest"},"total":{"$ref":"#/components/schemas/StatusStatisticsRequest"}},"required":["critical","high","info","low","medium","total"]},"SmartUpload":{"type":"object","properties":{"scan_date":{"type":"string","format":"date-time","default":"2026-09-16T15:05:28.662032Z"},"scan_type":{"enum":["","Nexpose Scan","Nuclei Scan","Nmap Scan","OpenVAS Parser","OpenVAS Parser v2","Qualys Scan","Qualys Infrastructure Scan (WebGUI XML)","Tenable Scan"],"type":"string","description":"* `` - Please Select a Scan Type\n* `Nexpose Scan` - Nexpose Scan - XML Format\n* `Nuclei Scan` - Nuclei Scan - JSON Format\n* `Nmap Scan` - Nmap Scan - XML output (use -oX)\n* `OpenVAS Parser` - OpenVAS Parser - CSV or XML Format\n* `OpenVAS Parser v2` - OpenVAS Parser v2 - CSV or XML Format\n* `Qualys Scan` - Qualys Scan - CSV or XML format of Asset Data Report\n* `Qualys Infrastructure Scan (WebGUI XML)` - Qualys Infrastructure Scan (WebGUI XML) - XML Format\n* `Tenable Scan` - Tenable Scan - CSV, XML, or .nessus Format","x-spec-enum-id":"97cbd06137d7743c"},"minimum_severity":{"enum":["Info","Low","Medium","High","Critical"],"type":"string","description":"* `Info` - Info\n* `Low` - Low\n* `Medium` - Medium\n* `High` - High\n* `Critical` - Critical","x-spec-enum-id":"fc5d16a20ed06136","default":"Info"},"files":{"type":"string","format":"uri","pattern":"(?:xml|csv|nessus|json|jsonl|html|js|zip|xlsx|txt|sarif)$"},"tags":{"type":"array","items":{"type":"string"}},"version":{"type":"string"},"branch_tag":{"type":"string"},"commit_hash":{"type":"string"},"build_id":{"type":"string"},"active":{"type":"boolean","default":true},"verified":{"type":"boolean","default":false},"close_old_findings":{"type":"boolean","default":false},"group_by":{"enum":["component_name","component_name+component_version","file_path","finding_title","vuln_id_from_tool",""],"type":"string","x-spec-enum-id":"a9b19a914dcfbd21","description":"Choose an option to automatically group new findings by the chosen option.\n\n* `component_name` - Component Name\n* `component_name+component_version` - Component Name + Version\n* `file_path` - File path\n* `finding_title` - Finding Title\n* `vuln_id_from_tool` - Vulnerability ID from Tool"},"stats":{"allOf":[{"$ref":"#/components/schemas/Statistics"}],"readOnly":true}},"required":["scan_type","stats"]},"SmartUploadRequest":{"type":"object","properties":{"scan_date":{"type":"string","format":"date-time","default":"2026-09-16T15:05:28.662032Z"},"scan_type":{"enum":["","Nexpose Scan","Nuclei Scan","Nmap Scan","OpenVAS Parser","OpenVAS Parser v2","Qualys Scan","Qualys Infrastructure Scan (WebGUI XML)","Tenable Scan"],"type":"string","description":"* `` - Please Select a Scan Type\n* `Nexpose Scan` - Nexpose Scan - XML Format\n* `Nuclei Scan` - Nuclei Scan - JSON Format\n* `Nmap Scan` - Nmap Scan - XML output (use -oX)\n* `OpenVAS Parser` - OpenVAS Parser - CSV or XML Format\n* `OpenVAS Parser v2` - OpenVAS Parser v2 - CSV or XML Format\n* `Qualys Scan` - Qualys Scan - CSV or XML format of Asset Data Report\n* `Qualys Infrastructure Scan (WebGUI XML)` - Qualys Infrastructure Scan (WebGUI XML) - XML Format\n* `Tenable Scan` - Tenable Scan - CSV, XML, or .nessus Format","x-spec-enum-id":"97cbd06137d7743c"},"minimum_severity":{"enum":["Info","Low","Medium","High","Critical"],"type":"string","description":"* `Info` - Info\n* `Low` - Low\n* `Medium` - Medium\n* `High` - High\n* `Critical` - Critical","x-spec-enum-id":"fc5d16a20ed06136","default":"Info"},"files":{"type":"string","format":"binary","pattern":"(?:xml|csv|nessus|json|jsonl|html|js|zip|xlsx|txt|sarif)$"},"tags":{"type":"array","items":{"type":"string","minLength":1}},"version":{"type":"string"},"branch_tag":{"type":"string"},"commit_hash":{"type":"string"},"build_id":{"type":"string"},"active":{"type":"boolean","default":true},"verified":{"type":"boolean","default":false},"close_old_findings":{"type":"boolean","default":false},"group_by":{"enum":["component_name","component_name+component_version","file_path","finding_title","vuln_id_from_tool",""],"type":"string","x-spec-enum-id":"a9b19a914dcfbd21","description":"Choose an option to automatically group new findings by the chosen option.\n\n* `component_name` - Component Name\n* `component_name+component_version` - Component Name + Version\n* `file_path` - File path\n* `finding_title` - Finding Title\n* `vuln_id_from_tool` - Vulnerability ID from Tool"}},"required":["scan_type"]},"SonarqubeIssue":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"key":{"type":"string","description":"SonarQube issue key","maxLength":60},"status":{"type":"string","description":"SonarQube issue status","maxLength":20},"type":{"type":"string","description":"SonarQube issue type","maxLength":20}},"required":["id","key","status","type"]},"SonarqubeIssueRequest":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"SonarQube issue key","maxLength":60},"status":{"type":"string","minLength":1,"description":"SonarQube issue status","maxLength":20},"type":{"type":"string","minLength":1,"description":"SonarQube issue type","maxLength":20}},"required":["key","status","type"]},"SonarqubeIssueTransition":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"created":{"type":"string","format":"date-time","readOnly":true},"finding_status":{"type":"string","maxLength":100},"sonarqube_status":{"type":"string","maxLength":50},"transitions":{"type":"string","maxLength":100},"sonarqube_issue":{"type":"integer"}},"required":["created","finding_status","id","sonarqube_issue","sonarqube_status","transitions"]},"SonarqubeIssueTransitionRequest":{"type":"object","properties":{"finding_status":{"type":"string","minLength":1,"maxLength":100},"sonarqube_status":{"type":"string","minLength":1,"maxLength":50},"transitions":{"type":"string","minLength":1,"maxLength":100},"sonarqube_issue":{"type":"integer"}},"required":["finding_status","sonarqube_issue","sonarqube_status","transitions"]},"Statistics":{"type":"object","properties":{"initial_findings_discovered":{"type":"integer"},"findings_found_after_host_identification":{"type":"integer"},"findings_without_a_matching_Product":{"type":"integer"},"unassigned_findings_created":{"type":"integer"},"findings_created_in_a_matched_Product":{"type":"integer"},"findings_closed_in_a_matched_Product":{"type":"integer"},"findings_reopened_in_a_matched_Product":{"type":"integer"},"findings_that_have_not_changed_in_a_matched_Products":{"type":"integer"}},"required":["findings_closed_in_a_matched_Product","findings_created_in_a_matched_Product","findings_found_after_host_identification","findings_reopened_in_a_matched_Product","findings_that_have_not_changed_in_a_matched_Products","findings_without_a_matching_Product","initial_findings_discovered","unassigned_findings_created"]},"StatisticsRequest":{"type":"object","properties":{"initial_findings_discovered":{"type":"integer"},"findings_found_after_host_identification":{"type":"integer"},"findings_without_a_matching_Product":{"type":"integer"},"unassigned_findings_created":{"type":"integer"},"findings_created_in_a_matched_Product":{"type":"integer"},"findings_closed_in_a_matched_Product":{"type":"integer"},"findings_reopened_in_a_matched_Product":{"type":"integer"},"findings_that_have_not_changed_in_a_matched_Products":{"type":"integer"}},"required":["findings_closed_in_a_matched_Product","findings_created_in_a_matched_Product","findings_found_after_host_identification","findings_reopened_in_a_matched_Product","findings_that_have_not_changed_in_a_matched_Products","findings_without_a_matching_Product","initial_findings_discovered","unassigned_findings_created"]},"StatusStatistics":{"type":"object","properties":{"active":{"type":"integer"},"verified":{"type":"integer"},"duplicate":{"type":"integer"},"false_p":{"type":"integer"},"out_of_scope":{"type":"integer"},"is_mitigated":{"type":"integer"},"risk_accepted":{"type":"integer"},"total":{"type":"integer"}},"required":["active","duplicate","false_p","is_mitigated","out_of_scope","risk_accepted","total","verified"]},"StatusStatisticsRequest":{"type":"object","properties":{"active":{"type":"integer"},"verified":{"type":"integer"},"duplicate":{"type":"integer"},"false_p":{"type":"integer"},"out_of_scope":{"type":"integer"},"is_mitigated":{"type":"integer"},"risk_accepted":{"type":"integer"},"total":{"type":"integer"}},"required":["active","duplicate","false_p","is_mitigated","out_of_scope","risk_accepted","total","verified"]},"Tag":{"type":"object","properties":{"tags":{"type":"array","items":{"type":"string"}}},"required":["tags"]},"TagRequest":{"type":"object","properties":{"tags":{"type":"array","items":{"type":"string","minLength":1}}},"required":["tags"]},"Test":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"test_type_name":{"type":"string","readOnly":true},"deduplication_algorithm":{"type":"string","readOnly":true,"description":"Algorithm used to match findings for deduplication and reimport (legacy, unique_id_from_tool, hash_code, or unique_id_from_tool_or_hash_code)."},"hash_code_fields":{"type":"array","items":{"type":"string"},"readOnly":true,"nullable":true,"description":"Finding fields hashed to compute hash_code for this test's scan type. Null when the scan type has no per-scanner configuration and legacy default fields are used."},"scan_type":{"type":"string","nullable":true},"title":{"type":"string","nullable":true,"maxLength":255},"description":{"type":"string","nullable":true},"target_start":{"type":"string","format":"date-time"},"target_end":{"type":"string","format":"date-time"},"percent_complete":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true},"updated":{"type":"string","format":"date-time","readOnly":true,"nullable":true},"created":{"type":"string","format":"date-time","readOnly":true,"nullable":true},"version":{"type":"string","nullable":true,"maxLength":100},"build_id":{"type":"string","nullable":true,"description":"Build ID that was tested, a reimport may update this field.","maxLength":150},"commit_hash":{"type":"string","nullable":true,"description":"Commit hash tested, a reimport may update this field.","maxLength":150},"branch_tag":{"type":"string","nullable":true,"title":"Branch/Tag","description":"Tag or branch that was tested, a reimport may update this field.","maxLength":150},"engagement":{"type":"integer","readOnly":true},"lead":{"type":"integer","nullable":true},"test_type":{"type":"integer"},"environment":{"type":"integer","nullable":true},"api_scan_configuration":{"type":"integer","nullable":true},"notes":{"type":"array","items":{"$ref":"#/components/schemas/Note"},"readOnly":true},"files":{"type":"array","items":{"$ref":"#/components/schemas/File"},"readOnly":true},"tags":{"type":"array","items":{"type":"string"}},"finding_groups":{"type":"array","items":{"$ref":"#/components/schemas/FindingGroup"},"readOnly":true}},"required":["created","deduplication_algorithm","engagement","files","finding_groups","hash_code_fields","id","notes","target_end","target_start","test_type","test_type_name","updated"]},"TestCreate":{"type":"object","description":"Base serializer for all models.","properties":{"id":{"type":"integer","readOnly":true},"engagement":{"type":"integer"},"notes":{"type":"array","items":{"type":"integer","nullable":true}},"test_type_name":{"type":"string","readOnly":true},"deduplication_algorithm":{"type":"string","readOnly":true,"description":"Algorithm used to match findings for deduplication and reimport (legacy, unique_id_from_tool, hash_code, or unique_id_from_tool_or_hash_code)."},"hash_code_fields":{"type":"array","items":{"type":"string"},"readOnly":true,"nullable":true,"description":"Finding fields hashed to compute hash_code for this test's scan type. Null when the scan type has no per-scanner configuration and legacy default fields are used."},"processing":{"type":"boolean","description":"Dictate that the test is undergoing an Import or ReImport"},"deduplication":{"type":"boolean","description":"Dictate that the test is undergoing Deduplication for all findings that were imported last"},"false_positive_history":{"type":"boolean","description":"Dictate that the test is undergoing False Positive History for all findings that were imported last"},"status":{"type":"string","readOnly":true,"description":"The human readable status of the status the test is currently set to"},"scan_type":{"type":"string","nullable":true},"title":{"type":"string","nullable":true,"maxLength":255},"description":{"type":"string","nullable":true},"target_start":{"type":"string","format":"date-time"},"target_end":{"type":"string","format":"date-time"},"percent_complete":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true},"updated":{"type":"string","format":"date-time","readOnly":true,"nullable":true},"created":{"type":"string","format":"date-time","readOnly":true,"nullable":true},"version":{"type":"string","nullable":true,"maxLength":100},"build_id":{"type":"string","nullable":true,"description":"Build ID that was tested, a reimport may update this field.","maxLength":150},"commit_hash":{"type":"string","nullable":true,"description":"Commit hash tested, a reimport may update this field.","maxLength":150},"branch_tag":{"type":"string","nullable":true,"title":"Branch/Tag","description":"Tag or branch that was tested, a reimport may update this field.","maxLength":150},"lead":{"type":"integer","nullable":true},"test_type":{"type":"integer"},"environment":{"type":"integer","nullable":true},"api_scan_configuration":{"type":"integer","nullable":true},"files":{"type":"array","items":{"$ref":"#/components/schemas/File"},"readOnly":true},"tags":{"type":"array","items":{"type":"string"}},"finding_groups":{"type":"array","items":{"$ref":"#/components/schemas/FindingGroup"},"readOnly":true}},"required":["created","deduplication_algorithm","engagement","files","finding_groups","hash_code_fields","id","status","target_end","target_start","test_type","test_type_name","updated"]},"TestCreateRequest":{"type":"object","description":"Base serializer for all models.","properties":{"engagement":{"type":"integer"},"notes":{"type":"array","items":{"type":"integer","nullable":true}},"processing":{"type":"boolean","description":"Dictate that the test is undergoing an Import or ReImport"},"deduplication":{"type":"boolean","description":"Dictate that the test is undergoing Deduplication for all findings that were imported last"},"false_positive_history":{"type":"boolean","description":"Dictate that the test is undergoing False Positive History for all findings that were imported last"},"scan_type":{"type":"string","nullable":true,"minLength":1},"title":{"type":"string","nullable":true,"maxLength":255},"description":{"type":"string","nullable":true},"target_start":{"type":"string","format":"date-time"},"target_end":{"type":"string","format":"date-time"},"percent_complete":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true},"version":{"type":"string","nullable":true,"maxLength":100},"build_id":{"type":"string","nullable":true,"description":"Build ID that was tested, a reimport may update this field.","maxLength":150},"commit_hash":{"type":"string","nullable":true,"description":"Commit hash tested, a reimport may update this field.","maxLength":150},"branch_tag":{"type":"string","nullable":true,"title":"Branch/Tag","description":"Tag or branch that was tested, a reimport may update this field.","maxLength":150},"lead":{"type":"integer","nullable":true},"test_type":{"type":"integer"},"environment":{"type":"integer","nullable":true},"api_scan_configuration":{"type":"integer","nullable":true},"tags":{"type":"array","items":{"type":"string","minLength":1}}},"required":["engagement","target_end","target_start","test_type"]},"TestImport":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"test_import_finding_action_set":{"type":"array","items":{"$ref":"#/components/schemas/TestImportFindingAction"},"readOnly":true},"created":{"type":"string","format":"date-time","readOnly":true},"modified":{"type":"string","format":"date-time","readOnly":true},"import_settings":{"nullable":true},"type":{"type":"string","maxLength":64},"version":{"type":"string","nullable":true,"maxLength":100},"build_id":{"type":"string","nullable":true,"description":"Build ID that was tested, a reimport may update this field.","maxLength":150},"commit_hash":{"type":"string","nullable":true,"description":"Commit hash tested, a reimport may update this field.","maxLength":150},"branch_tag":{"type":"string","nullable":true,"title":"Branch/Tag","description":"Tag or branch that was tested, a reimport may update this field.","maxLength":150},"test":{"type":"integer","readOnly":true},"findings_affected":{"type":"array","items":{"type":"integer"},"readOnly":true}},"required":["created","findings_affected","id","modified","test","test_import_finding_action_set"]},"TestImportFindingAction":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"created":{"type":"string","format":"date-time","readOnly":true},"modified":{"type":"string","format":"date-time","readOnly":true},"action":{"enum":["N","C","R","U","",null],"type":"string","description":"* `N` - created\n* `C` - closed\n* `R` - reactivated\n* `U` - untouched","x-spec-enum-id":"630f6e89cd3cf0b8","nullable":true},"test_import":{"type":"integer","readOnly":true},"finding":{"type":"integer","readOnly":true}},"required":["created","finding","id","modified","test_import"]},"TestImportFindingActionRequest":{"type":"object","properties":{"action":{"enum":["N","C","R","U","",null],"type":"string","description":"* `N` - created\n* `C` - closed\n* `R` - reactivated\n* `U` - untouched","x-spec-enum-id":"630f6e89cd3cf0b8","nullable":true}}},"TestImportRequest":{"type":"object","properties":{"import_settings":{"nullable":true},"type":{"type":"string","minLength":1,"maxLength":64},"version":{"type":"string","nullable":true,"maxLength":100},"build_id":{"type":"string","nullable":true,"description":"Build ID that was tested, a reimport may update this field.","maxLength":150},"commit_hash":{"type":"string","nullable":true,"description":"Commit hash tested, a reimport may update this field.","maxLength":150},"branch_tag":{"type":"string","nullable":true,"title":"Branch/Tag","description":"Tag or branch that was tested, a reimport may update this field.","maxLength":150}}},"TestToFiles":{"type":"object","properties":{"test_id":{"type":"integer","nullable":true},"files":{"type":"array","items":{"$ref":"#/components/schemas/File"}}},"required":["files","test_id"]},"TestToNotes":{"type":"object","properties":{"test_id":{"type":"integer","nullable":true},"notes":{"type":"array","items":{"$ref":"#/components/schemas/Note"}}},"required":["notes","test_id"]},"TestType":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"name":{"type":"string","readOnly":true},"soc":{"type":"boolean"},"static_tool":{"type":"boolean"},"dynamic_tool":{"type":"boolean"},"active":{"type":"boolean"}},"required":["id","name"]},"TestTypeCreate":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"soc":{"type":"boolean"},"name":{"type":"string","maxLength":200},"static_tool":{"type":"boolean"},"dynamic_tool":{"type":"boolean"},"active":{"type":"boolean"}},"required":["id","name"]},"TestTypeCreateRequest":{"type":"object","properties":{"soc":{"type":"boolean"},"name":{"type":"string","minLength":1,"maxLength":200},"static_tool":{"type":"boolean"},"dynamic_tool":{"type":"boolean"},"active":{"type":"boolean"}},"required":["name"]},"TestTypeRequest":{"type":"object","properties":{"soc":{"type":"boolean"},"static_tool":{"type":"boolean"},"dynamic_tool":{"type":"boolean"},"active":{"type":"boolean"}}},"Tests":{"type":"object","description":"Regression guard for Sentry DJANGO-D2P.\n\nDRF ``ModelSerializer.update()`` calls ``instance.<m2m>.set(new_list)`` for\nevery M2M field present in ``validated_data``, even when the new list is\nidentical to the current one. On tagulous ``TagField``s that triggers a\nfull teardown + re-add of the M2M, which runs SELECT + UPDATE ``count``\nbookkeeping per tag (N+1).\n\nThis mixin short-circuits the ``.set()`` call per ``TagListSerializerField``\nwhen the normalized incoming list equals ``instance.<attr>.get_tag_list()``.\nAll other M2M fields keep the stock DRF behavior.\n\nOpt in by adding ``SkipUnchangedTagsMixin`` to the base-class list of any\nserializer that exposes a ``TagListSerializerField`` for update.","properties":{"id":{"type":"integer","readOnly":true},"test_type_name":{"type":"string","readOnly":true},"deduplication_algorithm":{"type":"string","readOnly":true,"description":"Algorithm used to match findings for deduplication and reimport (legacy, unique_id_from_tool, hash_code, or unique_id_from_tool_or_hash_code)."},"hash_code_fields":{"type":"array","items":{"type":"string"},"readOnly":true,"nullable":true,"description":"Finding fields hashed to compute hash_code for this test's scan type. Null when the scan type has no per-scanner configuration and legacy default fields are used."},"processing":{"type":"boolean","description":"Dictate that the test is undergoing an Import or ReImport"},"deduplication":{"type":"boolean","description":"Dictate that the test is undergoing Deduplication for all findings that were imported last"},"false_positive_history":{"type":"boolean","description":"Dictate that the test is undergoing False Positive History for all findings that were imported last"},"status":{"type":"string","readOnly":true,"description":"The human readable status of the status the test is currently set to"},"scan_type":{"type":"string","nullable":true},"title":{"type":"string","nullable":true,"maxLength":255},"description":{"type":"string","nullable":true},"target_start":{"type":"string","format":"date-time"},"target_end":{"type":"string","format":"date-time"},"percent_complete":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true},"updated":{"type":"string","format":"date-time","readOnly":true,"nullable":true},"created":{"type":"string","format":"date-time","readOnly":true,"nullable":true},"version":{"type":"string","nullable":true,"maxLength":100},"build_id":{"type":"string","nullable":true,"description":"Build ID that was tested, a reimport may update this field.","maxLength":150},"commit_hash":{"type":"string","nullable":true,"description":"Commit hash tested, a reimport may update this field.","maxLength":150},"branch_tag":{"type":"string","nullable":true,"title":"Branch/Tag","description":"Tag or branch that was tested, a reimport may update this field.","maxLength":150},"engagement":{"type":"integer","readOnly":true},"lead":{"type":"integer","nullable":true},"test_type":{"type":"integer"},"environment":{"type":"integer","nullable":true},"api_scan_configuration":{"type":"integer","nullable":true},"notes":{"type":"array","items":{"$ref":"#/components/schemas/Note"},"readOnly":true},"files":{"type":"array","items":{"$ref":"#/components/schemas/File"},"readOnly":true},"tags":{"type":"array","items":{"type":"string"}},"finding_groups":{"type":"array","items":{"$ref":"#/components/schemas/FindingGroup"},"readOnly":true},"prefetch":{"type":"object","properties":{"api_scan_configuration":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/ProductAPIScanConfiguration"}},"engagement":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/FindingEngagement"}},"environment":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/FindingEnvironment"}},"files":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/File"}},"lead":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/UserStub"}},"notes":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/Note"}},"test_type":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/TestType"}}}}},"required":["created","deduplication_algorithm","engagement","files","finding_groups","hash_code_fields","id","notes","status","target_end","target_start","test_type","test_type_name","updated"]},"TestsRequest":{"type":"object","description":"Regression guard for Sentry DJANGO-D2P.\n\nDRF ``ModelSerializer.update()`` calls ``instance.<m2m>.set(new_list)`` for\nevery M2M field present in ``validated_data``, even when the new list is\nidentical to the current one. On tagulous ``TagField``s that triggers a\nfull teardown + re-add of the M2M, which runs SELECT + UPDATE ``count``\nbookkeeping per tag (N+1).\n\nThis mixin short-circuits the ``.set()`` call per ``TagListSerializerField``\nwhen the normalized incoming list equals ``instance.<attr>.get_tag_list()``.\nAll other M2M fields keep the stock DRF behavior.\n\nOpt in by adding ``SkipUnchangedTagsMixin`` to the base-class list of any\nserializer that exposes a ``TagListSerializerField`` for update.","properties":{"processing":{"type":"boolean","description":"Dictate that the test is undergoing an Import or ReImport"},"deduplication":{"type":"boolean","description":"Dictate that the test is undergoing Deduplication for all findings that were imported last"},"false_positive_history":{"type":"boolean","description":"Dictate that the test is undergoing False Positive History for all findings that were imported last"},"scan_type":{"type":"string","nullable":true,"minLength":1},"title":{"type":"string","nullable":true,"maxLength":255},"description":{"type":"string","nullable":true},"target_start":{"type":"string","format":"date-time"},"target_end":{"type":"string","format":"date-time"},"percent_complete":{"type":"integer","maximum":2147483647,"minimum":-2147483648,"nullable":true},"version":{"type":"string","nullable":true,"maxLength":100},"build_id":{"type":"string","nullable":true,"description":"Build ID that was tested, a reimport may update this field.","maxLength":150},"commit_hash":{"type":"string","nullable":true,"description":"Commit hash tested, a reimport may update this field.","maxLength":150},"branch_tag":{"type":"string","nullable":true,"title":"Branch/Tag","description":"Tag or branch that was tested, a reimport may update this field.","maxLength":150},"lead":{"type":"integer","nullable":true},"test_type":{"type":"integer"},"environment":{"type":"integer","nullable":true},"api_scan_configuration":{"type":"integer","nullable":true},"tags":{"type":"array","items":{"type":"string","minLength":1}}},"required":["target_end","target_start","test_type"]},"ToolConfiguration":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"name":{"type":"string","maxLength":200},"description":{"type":"string","nullable":true,"maxLength":2000},"url":{"type":"string","nullable":true,"maxLength":2000},"authentication_type":{"enum":["API","Password","SSH","",null],"type":"string","description":"* `API` - API Key\n* `Password` - Username/Password\n* `SSH` - SSH","x-spec-enum-id":"e1a582895a9e03b4","nullable":true},"extras":{"type":"string","nullable":true,"description":"Additional definitions that will be consumed by scanner","maxLength":255},"username":{"type":"string","nullable":true,"maxLength":200},"auth_title":{"type":"string","nullable":true,"title":"Title for SSH/API Key","maxLength":200},"tool_type":{"type":"integer"},"prefetch":{"type":"object","properties":{"tool_type":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/ToolType"}}}}},"required":["id","name","tool_type"]},"ToolConfigurationRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","nullable":true,"maxLength":2000},"url":{"type":"string","nullable":true,"maxLength":2000},"authentication_type":{"enum":["API","Password","SSH","",null],"type":"string","description":"* `API` - API Key\n* `Password` - Username/Password\n* `SSH` - SSH","x-spec-enum-id":"e1a582895a9e03b4","nullable":true},"extras":{"type":"string","nullable":true,"description":"Additional definitions that will be consumed by scanner","maxLength":255},"username":{"type":"string","nullable":true,"maxLength":200},"password":{"type":"string","writeOnly":true,"nullable":true,"maxLength":900},"auth_title":{"type":"string","nullable":true,"title":"Title for SSH/API Key","maxLength":200},"ssh":{"type":"string","writeOnly":true,"nullable":true,"maxLength":9000},"api_key":{"type":"string","writeOnly":true,"nullable":true,"maxLength":900},"tool_type":{"type":"integer"}},"required":["name","tool_type"]},"ToolProductSettings":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"setting_url":{"type":"string"},"product":{"type":"integer"},"name":{"type":"string","maxLength":200},"description":{"type":"string","nullable":true,"maxLength":2000},"url":{"type":"string","nullable":true,"maxLength":2000},"tool_project_id":{"type":"string","nullable":true,"maxLength":200},"tool_configuration":{"type":"integer"},"notes":{"type":"array","items":{"type":"integer"},"readOnly":true},"prefetch":{"type":"object","properties":{"notes":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/Note"}},"product":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/Product"}},"tool_configuration":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/ToolConfiguration"}}}}},"required":["id","name","notes","product","setting_url","tool_configuration"]},"ToolProductSettingsRequest":{"type":"object","properties":{"setting_url":{"type":"string","minLength":1},"product":{"type":"integer"},"name":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","nullable":true,"maxLength":2000},"url":{"type":"string","nullable":true,"maxLength":2000},"tool_project_id":{"type":"string","nullable":true,"maxLength":200},"tool_configuration":{"type":"integer"}},"required":["name","product","setting_url","tool_configuration"]},"ToolType":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"name":{"type":"string","maxLength":200},"description":{"type":"string","nullable":true,"maxLength":2000}},"required":["id","name"]},"ToolTypeRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","nullable":true,"maxLength":2000}},"required":["name"]},"URL":{"type":"object","description":"Serializer for the URL model with primary keys for related objects.","properties":{"id":{"type":"integer","readOnly":true},"string":{"type":"string","readOnly":true},"type":{"type":"string","readOnly":true},"tags":{"type":"array","items":{"type":"string"}},"protocol":{"type":"string","description":"The protocol of the URL (e.g., http, https, ftp, etc.)","maxLength":10},"user_info":{"type":"string","description":"Connection details for a given user","maxLength":512},"host":{"type":"string","description":"The host of the URL, which can be a domain name or an IP address","maxLength":256},"port":{"type":"integer","maximum":65535,"minimum":1,"nullable":true,"description":"The port number of the URL (optional)"},"path":{"type":"string","description":"The path of the URL (optional),","maxLength":2048},"query":{"type":"string","description":"The query string of the URL (optional)","maxLength":2048},"fragment":{"type":"string","description":"The fragment identifier of the URL (optional)","maxLength":2048},"host_validation_failure":{"type":"boolean","description":"Dictates whether the endpoint was found to have host validation issues during creation"}},"required":["host","id","string","type"]},"URLRequest":{"type":"object","description":"Serializer for the URL model with primary keys for related objects.","properties":{"tags":{"type":"array","items":{"type":"string","minLength":1}},"protocol":{"type":"string","description":"The protocol of the URL (e.g., http, https, ftp, etc.)","maxLength":10},"user_info":{"type":"string","description":"Connection details for a given user","maxLength":512},"host":{"type":"string","minLength":1,"description":"The host of the URL, which can be a domain name or an IP address","maxLength":256},"port":{"type":"integer","maximum":65535,"minimum":1,"nullable":true,"description":"The port number of the URL (optional)"},"path":{"type":"string","description":"The path of the URL (optional),","maxLength":2048},"query":{"type":"string","description":"The query string of the URL (optional)","maxLength":2048},"fragment":{"type":"string","description":"The fragment identifier of the URL (optional)","maxLength":2048},"host_validation_failure":{"type":"boolean","description":"Dictates whether the endpoint was found to have host validation issues during creation"}},"required":["host"]},"UnassignedEndpoint":{"type":"object","properties":{"endpoint":{"type":"string","nullable":true,"description":"The entire endpoint","maxLength":1500}}},"UnassignedFinding":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"title":{"type":"string","description":"A short description of the flaw.","maxLength":511},"description":{"type":"string","readOnly":true},"date":{"type":"string","format":"date","readOnly":true,"description":"The date the flaw was discovered."},"severity":{"type":"string","description":"The severity level of this flaw (Critical, High, Medium, Low, Informational).","maxLength":200},"reporter":{"type":"integer","readOnly":true,"description":"Documents who reported the flaw."},"file":{"type":"string","description":"Title of the file the finding came from","maxLength":511},"test_type":{"type":"integer"},"endpoints":{"type":"array","items":{"$ref":"#/components/schemas/UnassignedEndpoint"}},"status":{"type":"string","readOnly":true},"prefetch":{"type":"object","properties":{"reporter":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/AddUser"}},"test_type":{"type":"object","readOnly":true,"additionalProperties":{"$ref":"#/components/schemas/TestType"}}}}},"required":["date","description","endpoints","file","id","reporter","severity","status","test_type","title"]},"UsageRecord":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"event_type":{"enum":["import","reimport","import_preview","reimport_preview","bulk_finding_delete","sensei_repo","sensei_fix"],"type":"string","description":"* `import` - Import\n* `reimport` - Reimport\n* `import_preview` - Import Preview\n* `reimport_preview` - Reimport Preview\n* `bulk_finding_delete` - Bulk finding delete\n* `sensei_repo` - Sensei Repo Onboarded\n* `sensei_fix` - Sensei Fix Applied","x-spec-enum-id":"d40bda02ffa99825","readOnly":true},"event_subtype":{"type":"string","readOnly":true},"timestamp":{"type":"string","format":"date-time","readOnly":true},"user_id":{"type":"integer","readOnly":true,"nullable":true},"product_id":{"type":"integer","readOnly":true,"nullable":true},"count":{"type":"integer","readOnly":true},"count_created":{"type":"integer","readOnly":true},"count_closed":{"type":"integer","readOnly":true},"count_reactivated":{"type":"integer","readOnly":true},"count_untouched":{"type":"integer","readOnly":true},"count_deleted":{"type":"integer","readOnly":true},"duration_ms":{"type":"integer","readOnly":true,"nullable":true},"metadata":{"readOnly":true},"error_message":{"type":"string","readOnly":true}},"required":["count","count_closed","count_created","count_deleted","count_reactivated","count_untouched","duration_ms","error_message","event_subtype","event_type","id","metadata","product_id","timestamp","user_id"]},"User":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"username":{"type":"string","description":"Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.","pattern":"^[\\w.@+-]+$","maxLength":150},"first_name":{"type":"string","maxLength":150},"last_name":{"type":"string","maxLength":150},"email":{"type":"string","format":"email"},"date_joined":{"type":"string","format":"date-time","readOnly":true},"last_login":{"type":"string","format":"date-time","readOnly":true,"nullable":true},"is_active":{"type":"boolean","title":"Active","description":"Designates whether this user should be treated as active. Unselect this instead of deleting accounts."},"is_staff":{"type":"boolean","title":"Staff status","description":"Designates whether the user can log into this admin site."},"is_superuser":{"type":"boolean","title":"Superuser status","description":"Designates that this user has all permissions without explicitly assigning them."},"token_last_reset":{"type":"string","format":"date-time","nullable":true,"readOnly":true},"password_last_reset":{"type":"string","format":"date-time","nullable":true,"readOnly":true},"configuration_permissions":{"type":"array","items":{"type":"integer","nullable":true}}},"required":["date_joined","email","id","last_login","password_last_reset","token_last_reset","username"]},"UserContactInfo":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"user_profile":{"allOf":[{"$ref":"#/components/schemas/User"}],"readOnly":true},"title":{"type":"string","nullable":true,"maxLength":150},"phone_number":{"type":"string","description":"Phone number must be entered in the format: '+999999999'. Up to 15 digits allowed.","pattern":"^\\+?1?\\d{9,15}$","maxLength":15},"cell_number":{"type":"string","description":"Phone number must be entered in the format: '+999999999'. Up to 15 digits allowed.","pattern":"^\\+?1?\\d{9,15}$","maxLength":15},"twitter_username":{"type":"string","nullable":true,"maxLength":150},"github_username":{"type":"string","nullable":true,"maxLength":150},"slack_username":{"type":"string","nullable":true,"title":"Slack Email Address","description":"Email address associated with your slack account","maxLength":150},"slack_user_id":{"type":"string","nullable":true,"maxLength":25},"block_execution":{"type":"boolean","description":"Instead of async deduping a finding the findings will be deduped synchronously and will 'block' the user until completion."},"deduplication_execution_mode":{"enum":["async","async_wait","sync","",null],"type":"string","x-spec-enum-id":"bf7fb8ff28520a46","nullable":true,"description":"Controls how import/reimport deduplication post-processing is executed. 'Async' dispatches it to the background and returns immediately (default). 'Async, wait for deduplication' dispatches to the background but waits for deduplication to finish before responding, so notifications and statistics reflect the deduplicated state. 'Synchronous' runs the import deduplication inline. Can be overridden per request. Independent of block_execution, which forces all async tasks (notifications, jira, ...) to the foreground.\n\n* `async` - Async (do not wait)\n* `async_wait` - Async, wait for deduplication\n* `sync` - Synchronous (block)"},"force_password_reset":{"type":"boolean","description":"Forces this user to reset their password on next login."},"ui_use_tailwind":{"type":"boolean","title":"Use new UI (beta)","description":"Opt in to the new Tailwind-based UI. Leave off for the classic UI."},"token_last_reset":{"type":"string","format":"date-time","nullable":true,"description":"Timestamp of the most recent API token reset for this user."},"password_last_reset":{"type":"string","format":"date-time","nullable":true,"description":"Timestamp of the most recent password reset for this user."},"user":{"type":"integer"}},"required":["id","user","user_profile"]},"UserRequest":{"type":"object","properties":{"username":{"type":"string","minLength":1,"description":"Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.","pattern":"^[\\w.@+-]+$","maxLength":150},"first_name":{"type":"string","maxLength":150},"last_name":{"type":"string","maxLength":150},"email":{"type":"string","format":"email","minLength":1},"is_active":{"type":"boolean","title":"Active","description":"Designates whether this user should be treated as active. Unselect this instead of deleting accounts."},"is_staff":{"type":"boolean","title":"Staff status","description":"Designates whether the user can log into this admin site."},"is_superuser":{"type":"boolean","title":"Superuser status","description":"Designates that this user has all permissions without explicitly assigning them."},"password":{"type":"string","writeOnly":true,"minLength":1},"configuration_permissions":{"type":"array","items":{"type":"integer","nullable":true}}},"required":["email","username"]},"UserStub":{"type":"object","properties":{"id":{"type":"integer","readOnly":true},"username":{"type":"string","description":"Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.","pattern":"^[\\w.@+-]+$","maxLength":150},"first_name":{"type":"string","maxLength":150},"last_name":{"type":"string","maxLength":150}},"required":["id","username"]},"UserStubRequest":{"type":"object","properties":{"username":{"type":"string","minLength":1,"description":"Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.","pattern":"^[\\w.@+-]+$","maxLength":150},"first_name":{"type":"string","maxLength":150},"last_name":{"type":"string","maxLength":150}},"required":["username"]},"V3EndpointCompatible":{"type":"object","description":"Serializes a LocationProductReference model to something that looks like an Endpoint.","properties":{"id":{"type":"integer","readOnly":true},"protocol":{"type":"string"},"userinfo":{"type":"string"},"host":{"type":"string"},"port":{"type":"integer"},"path":{"type":"string"},"query":{"type":"string"},"fragment":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"location_id":{"type":"integer"},"active_finding_count":{"type":"integer","readOnly":true},"created":{"type":"string","format":"date-time","readOnly":true,"nullable":true,"description":"Time that the object was initially created, and saved to the database"},"updated":{"type":"string","format":"date-time","readOnly":true,"nullable":true,"description":"Time that the object was most recently saved to the database"},"relationship":{"enum":["owned_by","used_by",""],"type":"string","x-spec-enum-id":"8c638fc6583828e5","description":"The relationship between two locations\n\n* `owned_by` - is owned by\n* `used_by` - is used by"},"relationship_data":{"description":"Any extra data about this relationship"},"status":{"enum":["Active","Mitigated"],"type":"string","x-spec-enum-id":"bcfb073a62b96b70","description":"The status of the the given Location\n\n* `Active` - Active\n* `Mitigated` - Mitigated"},"product":{"type":"integer"}},"required":["active_finding_count","created","fragment","host","id","location_id","path","port","product","protocol","query","tags","updated","userinfo"]},"Version":{"type":"object","properties":{"version":{"type":"string","maxLength":8}},"required":["version"]},"VulnerabilityId":{"type":"object","properties":{"vulnerability_id":{"type":"string","maxLength":50}},"required":["vulnerability_id"]},"VulnerabilityIdRequest":{"type":"object","properties":{"vulnerability_id":{"type":"string","minLength":1,"maxLength":50}},"required":["vulnerability_id"]},"WidgetAggregateRequestRequest":{"type":"object","properties":{"model":{"enum":["finding","product","engagement","test"],"type":"string","description":"* `finding` - finding\n* `product` - product\n* `engagement` - engagement\n* `test` - test","x-spec-enum-id":"238c8fed600431b0"},"filters":{},"group_by":{"type":"string","minLength":1,"description":"Dimension key from the model's catalog."},"aggregation":{"enum":["count"],"type":"string","description":"* `count` - count","x-spec-enum-id":"f96d7dec6ae7b484","default":"count"},"time_bucket":{"enum":["day","week","month","quarter","year",null],"type":"string","x-spec-enum-id":"d84a1376d5a58541","nullable":true,"description":"Required iff the dimension's kind is 'time'.\n\n* `day` - day\n* `week` - week\n* `month` - month\n* `quarter` - quarter\n* `year` - year"},"limit":{"type":"integer","maximum":1000,"minimum":1,"nullable":true,"description":"Top-N cap. Omit / null for no cap."}},"required":["group_by","model"]},"WidgetAgingRequestRequest":{"type":"object","properties":{"filters":{},"boundaries":{"type":"array","items":{"type":"integer","maximum":3650,"minimum":1}},"date_field":{"type":"string","minLength":1,"default":"created"},"severity_filter":{"type":"array","items":{"type":"string","minLength":1}}}},"WidgetCatalogEntry":{"type":"object","properties":{"type":{"type":"string","description":"The value to set on a widget's ``type`` field."},"label":{"type":"string"},"category":{"type":"string"},"description":{"type":"string"},"data_endpoints":{"type":"array","items":{"type":"string"},"description":"Relative URLs the widget POSTs/GETs to render. Empty for widgets rendered entirely from config (markdown, iframe, favorites, quick_actions, table)."},"config_example":{"description":"A minimal valid widget ``config`` dict."}},"required":["category","config_example","data_endpoints","description","label","type"]},"WidgetCatalogResponse":{"type":"object","properties":{"categories":{"type":"array","items":{"$ref":"#/components/schemas/WidgetCategory"},"description":"Category metadata, matches the frontend's grouping order."},"widgets":{"type":"array","items":{"$ref":"#/components/schemas/WidgetCatalogEntry"},"description":"One entry per widget type. Order is editorial."}},"required":["categories","widgets"]},"WidgetCategory":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"description":{"type":"string"}},"required":["description","id","label"]},"WidgetCountRequestRequest":{"type":"object","properties":{"model":{"enum":["finding","product","engagement","test"],"type":"string","x-spec-enum-id":"238c8fed600431b0","description":"Target model. Must be one of the supported COUNT models.\n\n* `finding` - finding\n* `product` - product\n* `engagement` - engagement\n* `test` - test"},"filters":{"description":"Filter dict in the same shape the list view's URL emits. Empty object means 'no filters' (counts everything)."}},"required":["model"]},"WidgetCountResponse":{"type":"object","properties":{"count":{"type":"integer"}},"required":["count"]},"WidgetDimension":{"type":"object","properties":{"key":{"type":"string"},"label":{"type":"string"},"kind":{"type":"string"}},"required":["key","kind","label"]},"WidgetDimensionsResponse":{"type":"object","properties":{"model":{"type":"string"},"dimensions":{"type":"array","items":{"$ref":"#/components/schemas/WidgetDimension"}}},"required":["dimensions","model"]},"WidgetHeatmapRequestRequest":{"type":"object","properties":{"filters":{},"date_field":{"enum":["created","mitigated","date"],"type":"string","description":"* `created` - created\n* `mitigated` - mitigated\n* `date` - date","x-spec-enum-id":"cf7b4eb347a72af1","default":"created"},"window_days":{"type":"integer","maximum":730,"minimum":30,"default":365}}},"WidgetMttrMttdRequestRequest":{"type":"object","properties":{"filters":{},"time_bucket":{"enum":["day","week","month"],"type":"string","description":"* `day` - day\n* `week` - week\n* `month` - month","x-spec-enum-id":"273287207128dc4a","default":"week"},"window_days":{"type":"integer","maximum":730,"minimum":7,"default":90}}},"WidgetPriorityHistogramRequestRequest":{"type":"object","properties":{"filters":{},"bin_count":{"type":"integer","maximum":50,"minimum":5,"default":10}}},"WidgetRateChartRequestRequest":{"type":"object","properties":{"model":{"type":"string","minLength":1},"filters":{},"pass_filters":{},"group_by":{"type":"string","minLength":1,"description":"Categorical dim — time/banded dims not allowed."},"limit":{"type":"integer","maximum":50,"minimum":1},"sort":{"enum":["rate_desc","rate_asc","count_desc"],"type":"string","description":"* `rate_desc` - rate_desc\n* `rate_asc` - rate_asc\n* `count_desc` - count_desc","x-spec-enum-id":"b4181f04a282698f"},"min_denominator":{"type":"integer","minimum":0},"metric_label":{"type":"string","minLength":1}},"required":["group_by","model"]},"WidgetRecordMetric":{"type":"object","properties":{"key":{"type":"string"},"label":{"type":"string"},"default_sort":{"enum":["asc","desc"],"type":"string","description":"* `asc` - asc\n* `desc` - desc","x-spec-enum-id":"eadf035d1a023852"}},"required":["default_sort","key","label"]},"WidgetRecordMetricsResponse":{"type":"object","properties":{"model":{"type":"string"},"metrics":{"type":"array","items":{"$ref":"#/components/schemas/WidgetRecordMetric"}}},"required":["metrics","model"]},"WidgetRiskMatrixRequestRequest":{"type":"object","properties":{"filters":{},"x_dim":{"enum":["severity","risk","cvssv3_band","cvssv4_band"],"type":"string","description":"* `severity` - severity\n* `risk` - risk\n* `cvssv3_band` - cvssv3_band\n* `cvssv4_band` - cvssv4_band","x-spec-enum-id":"fd343279b8aa98a3","default":"severity"}}},"WidgetSankeyRequestRequest":{"type":"object","properties":{"model":{"type":"string","minLength":1,"default":"finding"},"filters":{},"source_dim":{"type":"string","minLength":1,"description":"Categorical dim — same allowlist as aggregate group_by."},"target_dim":{"type":"string","minLength":1}},"required":["source_dim","target_dim"]},"WidgetScanCoverageRequestRequest":{"type":"object","properties":{"model":{"type":"string","minLength":1,"default":"product"},"filters":{},"windows":{"type":"array","items":{"type":"integer","maximum":3650,"minimum":1},"description":"Day counts. 1-4 windows; defaults to [30, 90, 180, 365]."}}},"WidgetSunburstRequestRequest":{"type":"object","properties":{"model":{"type":"string","minLength":1,"default":"finding"},"filters":{},"hierarchy":{"type":"array","items":{"type":"string","minLength":1},"description":"1 or 2 dim keys, in outer-to-inner order."}},"required":["hierarchy"]},"WidgetTopRecordsRequestRequest":{"type":"object","properties":{"model":{"type":"string","minLength":1},"filters":{},"metric":{"type":"string","minLength":1},"limit":{"type":"integer","maximum":100,"minimum":1},"sort":{"enum":["asc","desc",null],"type":"string","description":"* `asc` - asc\n* `desc` - desc","x-spec-enum-id":"eadf035d1a023852","nullable":true}},"required":["metric","model"]},"WidgetTreemapRequestRequest":{"type":"object","properties":{"filters":{},"metric":{"enum":["count","active_count"],"type":"string","description":"* `count` - count\n* `active_count` - active_count","x-spec-enum-id":"d3abee9754f3e36d","default":"active_count"}}},"WidgetVelocityRequestRequest":{"type":"object","properties":{"filters":{},"time_bucket":{"enum":["day","week","month","quarter","year"],"type":"string","description":"* `day` - day\n* `week` - week\n* `month` - month\n* `quarter` - quarter\n* `year` - year","x-spec-enum-id":"d84a1376d5a58541","default":"week"},"window_days":{"type":"integer","maximum":730,"minimum":7,"default":90}}},"_MappedTest":{"type":"object","description":"The Test object nested inside a MappingTest through row.","properties":{"id":{"type":"integer","readOnly":true},"title":{"type":"string","nullable":true,"maxLength":255},"scan_type":{"type":"string","nullable":true}},"required":["id"]},"AddUser":{"type":"object","description":"Minimal user representation with id and username only.","properties":{"id":{"type":"integer","readOnly":true},"username":{"type":"string","maxLength":150}},"required":["username"]}},"securitySchemes":{"basicAuth":{"type":"http","scheme":"basic"},"cookieAuth":{"type":"apiKey","in":"cookie","name":"sessionid"},"tokenAuth":{"type":"apiKey","in":"header","name":"Authorization","description":"Token-based authentication with required prefix \"Token\""}}}}