{"openapi":"3.1.0","info":{"title":"Security for Confluence Cloud API","description":"REST API for the Soteri Security for Confluence Cloud app.\n\nEvery request acts as the user who issued its API key. Only app administrators can issue API keys, and a key stops working once its issuing user is no longer an app administrator. An app administrator is a product administrator or a user granted explicit access to the app, either directly or through a group. An API key grants no additional space or content permissions, so each endpoint's documented access rules apply to the issuing user.\n\nTimestamps are numbers rather than ISO-8601 strings: seconds since the Unix epoch, carrying a fractional part for sub-second precision, except where a field is documented as whole milliseconds.","version":"7.6.0"},"externalDocs":{"description":"Documentation","url":"https://docs.soteri.io/security-for-confluence"},"servers":[{"url":"https://security-for-confluence.soteri.io","description":"Generated server url"}],"security":[{"apiKeyBearerAuth":[]}],"tags":[{"name":"Audit Log","description":"Read and export the audit log of app activity."},{"name":"Export Jobs","description":"Track the progress of exports that run in the background and download the files they produce."},{"name":"Email Rule Settings","description":"Read and change the settings of the built-in email address scanning rule."},{"name":"Generic Password Rule Settings","description":"Read and change the settings of the built-in generic password scanning rule."},{"name":"Reviewed Findings","description":"Marking findings as reviewed and removing existing reviews."},{"name":"Permissions","description":"Permission information for the issuing user."},{"name":"Scan Management","description":"Scheduling scans and reading scan status and findings."},{"name":"AI Scanning Rules","description":"Read and update the AI scanning rules applied to scanned content."},{"name":"Global Reviewed Findings","description":"Findings reviewed across every space, and their imports and exports."},{"name":"Content Deletion","description":"Deleting the content that contains a finding."},{"name":"Exports","description":"CSV exports of scan findings, reviewed findings, and space overviews."},{"name":"Scanning Rules","description":"REST API for dealing with scanning rules."},{"name":"Instance Settings","description":"Read and change the settings that apply to the whole Atlassian site."},{"name":"Content Labeling","description":"Applying and removing the remediation label on content containing a finding."}],"paths":{"/rest/settings/update":{"put":{"tags":["Instance Settings"],"summary":"Change the settings that apply to the whole site","description":"Updates the site-wide settings supplied in the request. A setting that is omitted is left unchanged, so a request that omits every setting is rejected.","operationId":"setSettings","parameters":[{"name":"autoScan","in":"query","description":"The desired auto-scan status.","required":false,"schema":{"type":["boolean","null"]}},{"name":"deduplicateExports","in":"query","description":"Deprecated and ignored. Exports are deduplicated unless the request that starts an\n     export sets its <code>deduplicateFindings</code> parameter to false. A request that supplies only this parameter\n     is rejected.","required":false,"deprecated":true,"schema":{"type":["boolean","null"]}},{"name":"includePlaintextInExports","in":"query","description":"Whether to include plaintext matches in exports.","required":false,"schema":{"type":["boolean","null"]}},{"name":"requireReviewReason","in":"query","description":"Whether to require a reason when marking a finding as reviewed.","required":false,"schema":{"type":["boolean","null"]}},{"name":"mlScanning","in":"query","description":"Whether to enable ML scanning.","required":false,"schema":{"type":["boolean","null"]}},{"name":"scanAttachments","in":"query","description":"Whether to enable attachment scanning.","required":false,"schema":{"type":["boolean","null"]}}],"responses":{"403":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"400":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"503":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"402":{"description":"Relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"401":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"429":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"502":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"200":{"description":"OK"}}}},"/rest/settings/entity-permissions":{"get":{"tags":["Instance Settings"],"summary":"Get the administrative access granted on this site","description":"Lists the users and groups that have been granted administrative access to the app.","operationId":"getEntityPermissions","responses":{"403":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"400":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"503":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"401":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"429":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"502":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"200":{"description":"The users and groups that have been granted administrative access to the app.","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EntityAccessDto"}}}}}}},"put":{"tags":["Instance Settings"],"summary":"Replace the administrative access granted on this site","description":"Replaces the set of users and groups that have administrative access to the app.","operationId":"setEntityPermissions","requestBody":{"description":"The users and groups to grant access to the app.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EntityAccessDto"}}}},"required":true},"responses":{"403":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"400":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"503":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"401":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"429":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"502":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"200":{"description":"OK"}}}},"/rest/rules":{"get":{"tags":["Scanning Rules"],"summary":"Get the list of rules","description":"Get the list of rules.","operationId":"getRules","responses":{"403":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"400":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"503":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"401":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"429":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"502":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"200":{"description":"A collection of rules.","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ValidationRuleDto"}}}}}}},"put":{"tags":["Scanning Rules"],"summary":"Update a custom rule","description":"Updates a custom scanning rule. This is also how a custom rule is enabled or disabled.","operationId":"updateCustomRule","requestBody":{"description":"The rule to update.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomRuleInputDto"}}},"required":true},"responses":{"403":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"400":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"503":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"401":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"429":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"502":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"200":{"description":"The updated rule.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ValidationRuleDto"}}}}}},"post":{"tags":["Scanning Rules"],"summary":"Create a new custom rule","description":"Creates a custom scanning rule from a name and a regular expression. The regular expression must satisfy the custom regex pattern validation rules.","operationId":"createCustomRule","requestBody":{"description":"The rule to create.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCustomRuleDto"}}},"required":true},"responses":{"403":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"400":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"503":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"401":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"429":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"502":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"200":{"description":"The created rule.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ValidationRuleDto"}}}}}}},"/rest/rules/{id}/clear-message":{"put":{"tags":["Scanning Rules"],"summary":"Clear the error message associated with a custom rule","description":"Clear the error message associated with a custom rule.","operationId":"clearMessage","parameters":[{"name":"id","in":"path","description":"The ID of the rule.","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"403":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"400":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"503":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"401":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"429":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"502":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"200":{"description":"The updated rule.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ValidationRuleDto"}}}}}}},"/rest/rules/generic-password-settings":{"get":{"tags":["Generic Password Rule Settings"],"summary":"Get the generic password rule settings","description":"Returns the settings that control which values the built-in generic password rule reports as findings.","operationId":"getGenericPasswordRuleSettings","responses":{"403":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"400":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"503":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"401":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"429":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"502":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"200":{"description":"The current generic password rule settings.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/GenericPasswordRuleSettingsDto"}}}}}},"put":{"tags":["Generic Password Rule Settings"],"summary":"Update the generic password rule settings","description":"Replaces the settings that control which values the built-in generic password rule reports as findings.","operationId":"updateGenericPasswordRuleSettings","requestBody":{"description":"The new settings.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenericPasswordRuleSettingsDto"}}},"required":true},"responses":{"403":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"400":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"503":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"401":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"429":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"502":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"200":{"description":"The updated settings.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/GenericPasswordRuleSettingsDto"}}}}}}},"/rest/rules/email-settings":{"get":{"tags":["Email Rule Settings"],"summary":"Get the email address rule settings","description":"Returns the settings that control which email addresses the built-in email address rule reports as findings.","operationId":"getEmailRuleSettings","responses":{"403":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"400":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"503":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"401":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"429":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"502":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"200":{"description":"The current email rule settings.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/EmailRuleSettingsDto"}}}}}},"put":{"tags":["Email Rule Settings"],"summary":"Update the email address rule settings","description":"Replaces the settings that control which email addresses the built-in email address rule reports as findings.","operationId":"updateEmailRuleSettings","requestBody":{"description":"The new settings.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailRuleSettingsDto"}}},"required":true},"responses":{"403":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"400":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"503":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"401":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"429":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"502":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"200":{"description":"The updated settings.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/EmailRuleSettingsDto"}}}}}}},"/rest/rules/ai":{"get":{"tags":["AI Scanning Rules"],"summary":"Get the AI scanning rules","description":"Get the AI scanning rules.","operationId":"getModelRules","responses":{"403":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"400":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"503":{"description":"The request could not be completed because of a temporary problem. Retry the request.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"401":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"429":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"502":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"200":{"description":"Collection of AI scanning rules.","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ModelRuleDto"}}}}}}},"put":{"tags":["AI Scanning Rules"],"summary":"Update an AI scanning rule","description":"Update an AI scanning rule.","operationId":"updateModelRule","requestBody":{"description":"Rule.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelRuleDto"}}},"required":true},"responses":{"403":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"400":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"503":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"404":{"description":"Relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"402":{"description":"Relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"401":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"429":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"502":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"200":{"description":"Updated rule.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ModelRuleDto"}}}}}}},"/rest/space/{spaceId}/label-finding/delete":{"post":{"tags":["Content Labeling"],"summary":"Remove the remediation label from the content containing a finding","description":"Remove the remediation label from a piece of content.","operationId":"delete","parameters":[{"name":"spaceId","in":"path","description":"The ID of the space the content is in.","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"description":"The content to remove the label from. For comment and attachment findings, the parent page or blog post is unlabeled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LabelFindingRequestBody"}}},"required":true},"responses":{"403":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"400":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"503":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"404":{"description":"Relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"401":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"429":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"502":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"200":{"description":"OK"}}}},"/rest/space/{spaceId}/label-finding/create":{"post":{"tags":["Content Labeling"],"summary":"Apply the remediation label to content containing a finding","description":"Apply the remediation label to a piece of content.","operationId":"create","parameters":[{"name":"spaceId","in":"path","description":"The ID of the space the content is in.","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"description":"The content to label. For comment and attachment findings, the parent page or blog post is labeled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LabelFindingRequestBody"}}},"required":true},"responses":{"403":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"400":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"503":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"404":{"description":"Relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"401":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"429":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"502":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"200":{"description":"OK"}}}},"/rest/space/{spaceId}/delete-content":{"post":{"tags":["Content Deletion"],"summary":"Delete the content containing a finding","description":"Delete the content containing a finding: a page, blog post, comment, or attachment.","operationId":"delete_1","parameters":[{"name":"spaceId","in":"path","description":"The ID of the space the content is in.","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"description":"The content to delete. Comment and attachment findings delete the comment or attachment itself, not the parent page or blog post.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteContentRequestBody"}}},"required":true},"responses":{"403":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"400":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"503":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"404":{"description":"Relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"401":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"429":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"502":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"200":{"description":"OK"}}}},"/rest/space/space-scan-stats/batch":{"post":{"tags":["Scan Management"],"summary":"Get the number of vulnerabilities and the scan status for multiple spaces at once","description":"Spaces that the issuing user cannot view or that are not found are silently omitted from the response.","operationId":"getSpaceScanStatsBatch","requestBody":{"description":"The list of space IDs to look up.","content":{"application/json":{"schema":{"type":"array","items":{"type":"integer","format":"int64"}}}},"required":true},"responses":{"403":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"400":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"503":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"401":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"429":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"502":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"200":{"description":"Scan statistics for each requested space that the issuing user can access, keyed by space ID.","content":{"*/*":{"schema":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/SpaceStatusDto"}}}}}}}},"/rest/space/scan-space":{"post":{"tags":["Scan Management"],"summary":"Schedule scans for an entire space","description":"Requires permission to view the space.","operationId":"scanSpace","parameters":[{"name":"spaceId","in":"query","description":"The space ID.","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"403":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"400":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"503":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"404":{"description":"Relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"401":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"429":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"502":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"200":{"description":"The status of the newly scheduled space scan.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ScanDto"}}}}}}},"/rest/space/scan-page":{"post":{"tags":["Scan Management"],"summary":"Schedule a scan for a single piece of content","description":"Requires permission to view the space.","operationId":"scanPage","parameters":[{"name":"contentType","in":"query","description":"The type of content to scan, as a case-insensitive string. The request fails if this is not one of the accepted values.","required":true,"schema":{"type":"string","enum":["page","blogpost"]}},{"name":"contentId","in":"query","description":"The content ID.","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"versionNumber","in":"query","description":"The version number, or null to scan all versions.","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"versionDate","in":"query","description":"The version's creation date, or null to scan all versions.","required":false,"schema":{"type":"number","format":"double"}}],"responses":{"403":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"400":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"503":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"401":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"429":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"502":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"200":{"description":"The status of the newly scheduled scan.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanDto"}}}}}}},"/rest/space/review-finding":{"post":{"tags":["Reviewed Findings"],"summary":"Create a reviewed finding","description":"Create a reviewed finding.","operationId":"create_1","parameters":[{"name":"spaceId","in":"query","description":"The space ID.","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"description":"The matched text and rule that identify the finding to review, the scope the review applies to, and the reason it was reviewed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReviewFindingRequestBodyLong"}}},"required":true},"responses":{"403":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"400":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"503":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"404":{"description":"Relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"401":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"429":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"502":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"200":{"description":"OK"}}}},"/rest/space/review-finding/delete":{"post":{"tags":["Reviewed Findings"],"summary":"Delete reviewed findings for the given match","description":"Delete reviewed findings for the given match.","operationId":"delete_2","parameters":[{"name":"spaceId","in":"query","description":"The space ID.","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"description":"The matched text and rule that identify the finding whose reviews should be removed, and the scope to remove them from.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReviewFindingRequestBodyLong"}}},"required":true},"responses":{"403":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"400":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"503":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"404":{"description":"Relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"401":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"429":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"502":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"200":{"description":"OK"}}}},"/rest/space/permissions/batch":{"post":{"tags":["Scan Management"],"summary":"Filter a list of space IDs to those the issuing user can access","description":"Returns the subset of the supplied space IDs that the issuing user can view.","operationId":"filterPermittedSpaces","requestBody":{"description":"The space IDs to check.","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"}}}},"required":true},"responses":{"403":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"400":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"503":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"401":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"429":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"502":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"200":{"description":"The permitted subset of the requested space IDs.","content":{"*/*":{"schema":{"type":"array","items":{"type":"string"}}}}}}}},"/rest/space/findings":{"post":{"tags":["Exports"],"summary":"Start an export of a space's findings","description":"Starts an export of the findings in a single space and returns the created job. The export is produced in the background, so the job is returned before its file exists. Requires permission to view the space.","operationId":"exportSpaceFindings","parameters":[{"name":"spaceId","in":"query","description":"The space ID.","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"ruleNames","in":"query","description":"An optional comma-separated list of rule names to restrict the exported findings to.","required":false,"schema":{"type":"string"}},{"name":"deduplicateFindings","in":"query","description":"Whether to report a finding once when it appears in several versions of the same\n     scanned content, as the Security Analysis page does. Set this to false to get a row for every version\n     instead.","required":false,"schema":{"type":"boolean","default":true}}],"responses":{"403":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"400":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"503":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"404":{"description":"Relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"401":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"429":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"502":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"200":{"description":"The created export job.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ExportJobStatusDto"}}}}}}},"/rest/space/attachments/coverage":{"post":{"tags":["Exports"],"summary":"Start an export of a space's attachment coverage","description":"Starts an export listing every attachment in a single space, together with whether it was scanned, and returns the created job. The export is produced in the background, so the job is returned before its file exists. Requires an Advanced license. Requires permission to view the space.","operationId":"exportSpaceAttachmentCoverage","parameters":[{"name":"spaceId","in":"query","description":"The ID of the space.","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"403":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"400":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"503":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"404":{"description":"Relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"402":{"description":"Relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"401":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"429":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"502":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"200":{"description":"The created export job.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ExportJobStatusDto"}}}}}}},"/rest/security/latest/global-reviewed/unreview":{"post":{"tags":["Global Reviewed Findings"],"summary":"Remove the global review from a single false positive","description":"Removes the global review of one matched text, so that findings of it are once again unreviewed except where a space-scoped or item-scoped review covers them.","operationId":"unreview","requestBody":{"description":"The matched text whose global review should be removed. Any reason the request carries is ignored, because un-reviewing needs none.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GlobalReviewRequestBody"}}},"required":true},"responses":{"403":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"400":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"503":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"404":{"description":"Relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"401":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"429":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"502":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"200":{"description":"The matched text is no longer globally reviewed."}}}},"/rest/security/latest/global-reviewed/review":{"post":{"tags":["Global Reviewed Findings"],"summary":"Globally review a single false positive","description":"Marks one matched text as reviewed everywhere it occurs, in every space. Reviewing a matched text which is already globally reviewed replaces the reason recorded for it.","operationId":"review","requestBody":{"description":"The matched text to review everywhere, and the reason for reviewing it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GlobalReviewRequestBody"}}},"required":true},"responses":{"403":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"400":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"503":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"401":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"429":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"502":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"200":{"description":"The false positive is now globally reviewed."}}}},"/rest/security/latest/global-reviewed/import":{"post":{"tags":["Global Reviewed Findings"],"summary":"Import globally reviewed findings from a CSV file","description":"Import globally reviewed findings from a CSV file.","operationId":"create_2","requestBody":{"description":"The uploaded CSV payload.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadCsvRequest"}}},"required":true},"responses":{"403":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"400":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"503":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"401":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"429":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"502":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"200":{"description":"A summary of the import, including the number of rows submitted and the number of globally reviewed findings created. Rows which already existed are counted as submitted but not as created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GlobalReviewedFindingUpdateDto"}}}}}}},"/rest/security/latest/global-reviewed/export":{"post":{"tags":["Global Reviewed Findings"],"summary":"Start an export of globally reviewed findings","description":"Starts an export of the findings that are marked as reviewed everywhere they occur, and returns the created job. The export is produced in the background, so the job is returned before its file exists.","operationId":"export","responses":{"403":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"400":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"503":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"401":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"429":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"502":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"200":{"description":"The created export job.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportJobStatusDto"}}}}}}},"/rest/security/latest/global-reviewed/delete":{"post":{"tags":["Global Reviewed Findings"],"summary":"Delete globally reviewed findings from a CSV file","description":"Delete globally reviewed findings from a CSV file.","operationId":"delete_3","requestBody":{"description":"The uploaded CSV payload.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadCsvRequest"}}},"required":true},"responses":{"403":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"400":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"503":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"401":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"429":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"502":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"200":{"description":"A summary of the deletion, including the number of rows submitted and the number of globally reviewed findings deleted. Rows which did not exist are counted as submitted but not as deleted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GlobalReviewedFindingUpdateDto"}}}}}}},"/rest/security/latest/global-reviewed/delete-all":{"post":{"tags":["Global Reviewed Findings"],"summary":"Delete all globally reviewed findings","description":"Delete all globally reviewed findings.","operationId":"deleteAll","parameters":[{"name":"confirm","in":"query","description":"If true, delete all globally reviewed findings.","required":false,"schema":{"type":"boolean","default":false}}],"responses":{"403":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"400":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"503":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"401":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"429":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"502":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"200":{"description":"A summary of the deletion, including the number of globally reviewed findings deleted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GlobalReviewedFindingUpdateDto"}}}}}}},"/rest/rules/toggle":{"post":{"tags":["Scanning Rules"],"summary":"Set if a built-in rule is enabled","description":"Enables or disables one of the built-in scanning rules. Disabled rules are not applied to subsequent scans.","operationId":"toggleBuiltInRule","parameters":[{"name":"name","in":"query","description":"The name of the built-in rule.","required":true,"schema":{"type":"string","minLength":1}},{"name":"enabled","in":"query","description":"If the rule should be enabled or not.","required":true,"schema":{"type":"boolean"}}],"responses":{"403":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"400":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"503":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"401":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"429":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"502":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"200":{"description":"OK"}}}},"/rest/rules/delete":{"post":{"tags":["Scanning Rules"],"summary":"Delete a custom rule","description":"Deletes a custom scanning rule. The rule to delete is identified by the request body, so this operation uses POST rather than DELETE.","operationId":"deleteCustomRule","requestBody":{"description":"The rule to delete.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomRuleInputDto"}}},"required":true},"responses":{"403":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"400":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"503":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"401":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"429":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"502":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"200":{"description":"OK"}}}},"/rest/instance/scan":{"post":{"tags":["Scan Management"],"summary":"Schedule scans for the entire site","description":"Schedules a scan of every space on the site.","operationId":"scanInstance","parameters":[{"name":"force","in":"query","description":"Whether to force re-scan already up-to-date spaces and content histories.","required":false,"schema":{"type":"boolean","default":false}}],"responses":{"403":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"400":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"503":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"401":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"429":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"502":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"200":{"description":"OK"}}}},"/rest/findings":{"post":{"tags":["Exports"],"summary":"Start an export of findings across every space the issuing user has access to","description":"Starts an export of the findings of every space the issuing user can view, and returns the created job. The export is produced in the background, so the job is returned before its file exists.","operationId":"exportAllUserFindings","parameters":[{"name":"ruleNames","in":"query","description":"An optional comma-separated list of rule names to restrict the exported findings to.","required":false,"schema":{"type":"string"}},{"name":"includeArchived","in":"query","description":"Whether to include archived spaces in the export.","required":false,"schema":{"type":"boolean","default":false}},{"name":"deduplicateFindings","in":"query","description":"Whether to report a finding once when it appears in several versions of the same\n     scanned content, as the Security Analysis page does. Set this to false to get a row for every version\n     instead.","required":false,"schema":{"type":"boolean","default":true}}],"responses":{"403":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"400":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"503":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"401":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"429":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"502":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"200":{"description":"The created export job.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ExportJobStatusDto"}}}}}}},"/rest/export/reviewed/space/findings":{"post":{"tags":["Exports"],"summary":"Start an export of a space's reviewed findings","description":"Starts an export of the reviewed findings in a single space and returns the created job. The export is produced in the background, so the job is returned before its file exists. Requires permission to view the space.","operationId":"exportAllReviewedFindingsForSpace","parameters":[{"name":"spaceId","in":"query","description":"The space ID.","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"403":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"400":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"503":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"404":{"description":"Relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"401":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"429":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"502":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"200":{"description":"The created export job.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportJobStatusDto"}}}}}}},"/rest/export/reviewed/findings":{"post":{"tags":["Exports"],"summary":"Start an export of reviewed findings across every space the issuing user has access to","description":"Starts an export of the reviewed findings of every space the issuing user can view, and returns the created job. The export is produced in the background, so the job is returned before its file exists.","operationId":"exportAllReviewedFindingsForUser","parameters":[{"name":"includeArchived","in":"query","description":"Whether to include archived spaces in the export.","required":false,"schema":{"type":"boolean","default":false}}],"responses":{"403":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"400":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"503":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"401":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"429":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"502":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"200":{"description":"The created export job.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportJobStatusDto"}}}}}}},"/rest/dashboard/export":{"post":{"tags":["Exports"],"summary":"Start an export of space data","description":"Starts an export of per-space security data and returns the created job. Only the spaces the issuing user can view are included.","operationId":"exportDashboard","parameters":[{"name":"includeArchived","in":"query","description":"Whether to include archived spaces in the export.","required":false,"schema":{"type":"boolean","default":false}}],"responses":{"403":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"400":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"503":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"401":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"429":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"502":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"200":{"description":"The created export job.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportJobStatusDto"}}}}}}},"/rest/audit-log/export":{"post":{"tags":["Audit Log"],"summary":"Start an export of audit log entries","description":"Starts an export of the audit log entries matching the supplied filters and returns the created job. The export is produced in the background, so the job is returned before its file exists. Each filter matches on a substring rather than on the whole value.","operationId":"exportAuditLog","parameters":[{"name":"author","in":"query","description":"If present and nonblank, filters events by author.","required":false,"schema":{"type":"string","pattern":"[^\\x00]*"}},{"name":"eventType","in":"query","description":"If present and nonblank, filters events by type.","required":false,"schema":{"type":"string","pattern":"[^\\x00]*"}},{"name":"eventDetails","in":"query","description":"If present and nonblank, filters events by details (as JSON text).","required":false,"schema":{"type":"string","pattern":"[^\\x00]*"}}],"responses":{"403":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"400":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"503":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"401":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"429":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"502":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"200":{"description":"The created export job.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportJobStatusDto"}}}}}}},"/rest/attachments/coverage":{"post":{"tags":["Exports"],"summary":"Start an export of attachment coverage across every space the issuing user has access to","description":"Starts an export listing every attachment in every space the issuing user can view, together with whether it was scanned, and returns the created job. The export is produced in the background, so the job is returned before its file exists. Requires an Advanced license.","operationId":"exportAllUserAttachmentCoverage","parameters":[{"name":"includeArchived","in":"query","description":"Whether to include archived spaces in the export.","required":false,"schema":{"type":"boolean","default":false}}],"responses":{"403":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"400":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"503":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"402":{"description":"Relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"401":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"429":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"502":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"200":{"description":"The created export job.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ExportJobStatusDto"}}}}}}},"/rest/space/scan-status":{"get":{"tags":["Scan Management"],"summary":"Get the security status for either a single page or an entire space","description":"Returns the scan status and matching findings for a single page or blog post when a content ID is supplied, or for an entire space when it is not. Requires permission to view the space.","operationId":"getScanStatus","parameters":[{"name":"spaceId","in":"query","description":"The ID of the space. This is required on every request, but is only used when no content ID is supplied, in which case the status of the whole space is returned.","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"contentType","in":"query","description":"The type of content to get the status for, as a case-insensitive string. Required when a content ID is supplied, and the request fails if it is not one of the accepted values.","required":false,"schema":{"type":"string","enum":["page","blogpost"]}},{"name":"contentId","in":"query","description":"If present, the content ID.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"versionNumber","in":"query","description":"If present, the version number of the page version.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"versionDate","in":"query","description":"If present, the version date linked to the page version.","required":false,"schema":{"type":"number","format":"double"}},{"name":"reviewed","in":"query","description":"Restricts the findings to those that have been reviewed, or to those that have not. Omit to return both.","required":false,"schema":{"type":"boolean"}},{"name":"page","in":"query","description":"The page number of results to get.","required":false,"schema":{"type":"integer","format":"int32","default":0}},{"name":"size","in":"query","description":"The number of results per page.","required":false,"schema":{"type":"integer","format":"int32","default":20}},{"name":"ruleNames","in":"query","description":"An optional comma-separated list of rule names to restrict the returned findings to. Every name must match a rule that is configured on this site.","required":false,"schema":{"type":"string"}}],"responses":{"403":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"400":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"503":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"404":{"description":"Relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"401":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"429":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"502":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"200":{"description":"The scan status, along with the page of findings that match the request.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ScanDto"}}}}}}},"/rest/settings":{"get":{"tags":["Instance Settings"],"summary":"Get the settings that apply to the whole site","description":"Returns the settings that apply across every space on this site.","operationId":"getSettings","responses":{"403":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"400":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"503":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"401":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"429":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"502":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"200":{"description":"The instance settings.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/InstanceSettingsDto"}}}}}}},"/rest/settings/review-reason-categories":{"get":{"tags":["Instance Settings"],"summary":"Get the review reason categories this site accepts","description":"Lists the review reason categories this site accepts. A reasonCategory sent when marking a finding as reviewed must be one of these values.","operationId":"getReviewReasonCategories","responses":{"403":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"400":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"503":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"401":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"429":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"502":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"200":{"description":"The review reason categories this site accepts, in the order they should be offered.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ReviewReasonCategoriesResponse"}}}}}}},"/rest/rules/validation-rules":{"get":{"tags":["Scanning Rules"],"summary":"Get the list of validation rules for custom regex patterns","description":"Lists the constraints a custom rule's regular expression must satisfy. Each entry gives a regular expression that must not match the submitted pattern, along with the message reported when it does.","operationId":"getValidationRules","responses":{"403":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"400":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"503":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"401":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"429":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"502":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"200":{"description":"List of validation rule definitions.","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ValidationRuleDefinitionDto"}}}}}}}},"/rest/rules/filter-pattern-validation-rules":{"get":{"tags":["Scanning Rules"],"summary":"Get the list of validation rules for custom filter patterns","description":"Like the custom regex pattern validation rules but without the minimum-length check. Filter patterns are matched against an already-detected password literal, so short patterns are legitimate.","operationId":"getFilterPatternValidationRules","responses":{"403":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"400":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"503":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"401":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"429":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"502":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"200":{"description":"List of filter pattern validation rule definitions.","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ValidationRuleDefinitionDto"}}}}}}}},"/rest/permissions":{"get":{"tags":["Permissions"],"summary":"Get the issuing user's permissions","description":"Returns whether the issuing user is a product admin and/or an app admin.","operationId":"getPermissions","responses":{"403":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"400":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"503":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"401":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"429":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"502":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"200":{"description":"Whether the issuing user is a product admin and whether they are an app admin.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/PermissionsDto"}}}}}}},"/rest/instance/scan/force-status":{"get":{"tags":["Scan Management"],"summary":"Get the current availability of the forced site rescan action","description":"Reports whether a forced rescan of the whole site can be requested now, and when the next one becomes available if it is currently cooling down.","operationId":"getForceInstanceRescanStatus","responses":{"403":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"400":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"503":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"401":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"429":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"502":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"200":{"description":"The forced instance rescan status.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ForceInstanceRescanStatusDto"}}}}}}},"/rest/export/jobs/{jobId}":{"get":{"tags":["Export Jobs"],"summary":"Get the status of a single export job","description":"Get the status of a single export job.","operationId":"getExportJobStatus","parameters":[{"name":"jobId","in":"path","description":"The job ID.","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"403":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"400":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"503":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"404":{"description":"Relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"401":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"429":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"502":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"200":{"description":"Export job status.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ExportJobStatusDto"}}}}}}},"/rest/export/jobs/{jobId}/download":{"get":{"tags":["Export Jobs"],"summary":"Download the file produced by a completed export","description":"Streams the file produced by an export that has finished. The export may be downloaded once: a successful request reports the job as DOWNLOADED, and downloading it again is refused.","operationId":"downloadExportFile","parameters":[{"name":"jobId","in":"path","description":"The job ID.","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"403":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"400":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"503":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"404":{"description":"Relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"401":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"429":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"502":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"200":{"description":"The exported file."},"409":{"description":"The export has not finished yet, or has already been downloaded."}}}},"/rest/export/jobs/tracked":{"get":{"tags":["Export Jobs"],"summary":"Get export jobs that are tracked (not yet downloaded) for the issuing user","description":"Get export jobs that are tracked (not yet downloaded) for the current user.","operationId":"getTrackedExportJobs","responses":{"403":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"400":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"503":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"401":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"429":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"502":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"200":{"description":"Tracked export job statuses.","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ExportJobStatusDto"}}}}}}}},"/rest/audit-log/get":{"get":{"tags":["Audit Log"],"summary":"Get a page of audit log entries","description":"Note that filters are applied by substring.","operationId":"getEvents","parameters":[{"name":"page","in":"query","description":"The page to get.","required":false,"schema":{"type":"integer","format":"int32","default":0}},{"name":"size","in":"query","description":"The page size.","required":false,"schema":{"type":"integer","format":"int32","default":100}},{"name":"author","in":"query","description":"If present and nonblank, filters events by author.","required":false,"schema":{"type":"string","pattern":"[^\\x00]*"}},{"name":"eventType","in":"query","description":"If present and nonblank, filters events by type.","required":false,"schema":{"type":"string","pattern":"[^\\x00]*"}},{"name":"eventDetails","in":"query","description":"If present and nonblank, filters events by details (as JSON text).","required":false,"schema":{"type":"string","pattern":"[^\\x00]*"}}],"responses":{"403":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"400":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"503":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"401":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"429":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"502":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"200":{"description":"A page of audit log entries.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/AuditLogDto"}}}}}}},"/rest/audit-log/event_types":{"get":{"tags":["Audit Log"],"summary":"Get audit log event types grouped by category","description":"Lists the event types that audit log entries can have, grouped by category. Each entry pairs a stable event code with a human-readable description.","operationId":"events","responses":{"403":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"400":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"503":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"401":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"429":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"502":{"description":"The relevant error information.","content":{"*/*":{"schema":{"$ref":"#/components/schemas/RestErrorDto"}}}},"200":{"description":"Grouped event types.","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EventTypeGroupDto"}}}}}}}}},"components":{"schemas":{"RestErrorDto":{"type":"object","description":"The body returned when a request cannot be completed.","properties":{"restErrorTitle":{"type":"string","description":"A short title describing the error."},"restErrorDescription":{"type":["string","null"],"description":"Further details about the error, when any are available."},"violations":{"type":"array","description":"A list of specific violations.","items":{"$ref":"#/components/schemas/Violation"}}}},"Violation":{"type":"object","description":"A single field of the request that did not meet a constraint.","properties":{"fieldName":{"type":"string"},"message":{"type":["string","null"]}}},"EntityAccessDto":{"type":"object","description":"A user or group granted explicit access to the app. This makes the user, or each member of the group, an app administrator.","properties":{"type":{"type":"string","description":"Whether this entry grants access to a user or to a group.","enum":["GROUP","USER"]},"idOrKey":{"type":"string","description":"The Atlassian account ID for a user entry, or the group ID for a group entry.","maxLength":255,"minLength":0},"name":{"type":["string","null"],"description":"The username or group name. Not required when sending this to the API, but always returned by it."},"displayName":{"type":["string","null"],"description":"The user's display name. Only set for user entries."}}},"CustomRuleInputDto":{"type":"object","description":"The fields of a custom scanning rule that a caller may set when updating or deleting it. Unknown fields are ignored, so a previously fetched rule may be sent back unchanged.","properties":{"id":{"type":["string","null"],"description":"The ID of the rule to update or delete, as a UUID string."},"name":{"type":"string","description":"The name of the rule.","maxLength":255,"minLength":0},"regexp":{"type":"string","description":"The regular expression for the rule."},"enabled":{"type":"boolean","description":"True if this rule is enabled."}},"required":["name"]},"ValidationRuleDto":{"type":"object","description":"A scanning rule, either one of the app's built-in rules or a custom rule.","properties":{"id":{"type":["string","null"],"description":"Uniquely identifies the rule. For a built-in rule this is the rule's name; for a custom rule it is an opaque identifier."},"name":{"type":"string","description":"The name of the rule.","maxLength":255,"minLength":0},"regexp":{"type":"string","description":"The regular expression for the rule."},"builtIn":{"type":"boolean","description":"Whether this is one of the app's built-in rules rather than a custom rule."},"enabled":{"type":"boolean","description":"True if this rule is enabled."},"type":{"type":["string","null"],"description":"The type of rule this is."},"message":{"type":["string","null"],"description":"A message associated with this rule, e.g. if it generated an exception."},"blocking":{"type":["boolean","null"],"description":"Whether this rule blocks the operation being scanned, on products that support blocking and are configured to do so. Null where blocking does not apply."}},"required":["name"]},"GenericPasswordRuleSettingsDto":{"type":"object","description":"Settings that control which values the built-in generic password rule reports.","properties":{"filterEnvironmentVariables":{"type":"boolean","description":"If true, filter out findings where the value is an environment variable reference or config accessor (e.g. ${VAR}, %(var)s, config.get(\"x\"), process.env.X). These are references to where a secret lives, not hardcoded credentials."},"filterPlaceholders":{"type":"boolean","description":"If true, filter out findings where the value is a placeholder (e.g. CHANGE_ME, your_password_here). These are template values that don't represent real credentials."},"filterNullAndRedacted":{"type":"boolean","description":"If true, filter out findings where the value is null, empty, or a redaction marker (e.g. [REDACTED], ****)."},"filterTooShort":{"type":"boolean","description":"If true, filter out findings where the extracted password value is shorter than the minimum secret length. Short values are rarely real secrets."},"customPlaceholderPatterns":{"type":"array","description":"User-defined regex patterns matched against the extracted password literal. Findings matching any pattern are\n treated as placeholder false positives and suppressed. Patterns must pass filter-pattern validation rules.","items":{"type":"string"}},"customRedactedPatterns":{"type":"array","description":"User-defined regex patterns matched against the extracted password literal. Findings matching any pattern are\n treated as redacted false positives and suppressed. Patterns must pass filter-pattern validation rules.","items":{"type":"string"}},"aiPasswordConfirmation":{"type":"boolean","description":"If true, run the AI classifier to confirm each generic password finding before reporting it. Findings that score below the classifier's confidence threshold are suppressed as false positives. Requires an advanced license and enabling AI Model Scanning."},"aiPasswordConfirmationThreshold":{"type":"number","format":"double","description":"The minimum true-positive confidence score the AI classifier must assign a finding for it to be kept. Findings\n scoring below this threshold are suppressed.","maximum":1.0,"minimum":0.0}}},"EmailRuleSettingsDto":{"type":"object","description":"Settings that control which email addresses the built-in email address rule reports.","properties":{"domainFilterMode":{"type":"string","description":"How to interpret the domain list.","enum":["NONE","IGNORE_DOMAINS","FLAG_ONLY_DOMAINS"]},"domains":{"type":"array","description":"Set of domains to filter. Interpretation depends on domainFilterMode: NONE ignores domains and flags all emails; IGNORE_DOMAINS means emails from these domains won't be flagged; FLAG_ONLY_DOMAINS means only emails from these domains will be flagged.","items":{"type":"string"},"uniqueItems":true},"filterRoleBasedEmails":{"type":"boolean","description":"If true, filter out role-based email addresses (support@, info@, noreply@, etc.). These are typically functional\n mailboxes rather than individual persons and don't represent personal PII."},"filterExampleEmails":{"type":"boolean","description":"If true, filter out example/test email addresses (test@, demo@, @example.com, etc.). These are placeholder\n addresses that don't represent real PII."}}},"ModelRuleDto":{"type":"object","description":"An AI scanning rule and the confidence threshold at which it reports a finding.","properties":{"id":{"type":"string","format":"uuid","description":"Rule ID."},"name":{"type":"string","description":"Rule name."},"confidence":{"type":"number","format":"double","description":"Confidence threshold. Above this threshold, a finding is created.","maximum":1.0,"minimum":0.0},"enabled":{"type":"boolean","description":"Whether the rule is enabled."},"labels":{"type":"array","description":"The labels that this rule applies to.","items":{"type":"string"},"uniqueItems":true}}},"LabelFindingRequestBody":{"type":"object","description":"The content to label: a page, blog post, comment, or attachment. Labels for comment and attachment findings are applied to the parent page or blog post.","properties":{"contentId":{"type":"integer","format":"int64","description":"The ID of the content the finding is on."}},"required":["contentId"]},"DeleteContentRequestBody":{"type":"object","description":"The content to delete: a page, blog post, comment, or attachment.","properties":{"contentId":{"type":"integer","format":"int64","description":"The ID of the content to delete: a page, blog post, comment, or attachment. Comment and attachment findings delete the comment or attachment itself, not the page or blog post containing it."}},"required":["contentId"]},"SpaceStatusDto":{"type":"object","description":"The scan status of a single Confluence space.","properties":{"spaceKey":{"type":"string","description":"The key of the space."},"spaceName":{"type":"string","description":"The space name."},"state":{"type":"string","description":"The overall state of the space.","enum":["SCHEDULED","SCANNING","SCANNED","FAILED","UNSCANNED"]},"upToDateContent":{"type":"boolean","description":"Whether all content in the space has been scanned."},"upToDateSettings":{"type":"boolean","description":"Whether the latest scan was performed with up-to-date settings."},"errorMessage":{"type":["string","null"],"description":"The error from the most recent scan of the space, or null if it did not fail."},"findingCount":{"type":"integer","format":"int64","description":"The number of findings in the space."},"finished":{"type":"boolean","description":"Whether the space's most recent scan has finished."}}},"EnrichedFindingDto":{"type":"object","description":"A single scan finding, together with details about the page, blog post, or comment that contains it, such as the scanned text and the content title.","properties":{"contentId":{"type":"integer","format":"int64","description":"The content ID this finding was in."},"locationType":{"type":"string","description":"The type of location this finding is for -- is it a page or blog post? A comment?","enum":["PAGE_OR_BLOG_POST","ATTACHMENT","COMMENT"]},"path":{"type":"string","description":"A path identifying where within the content this finding was found."},"ruleName":{"type":"string","description":"The name of the rule which generated this finding."},"lineOffsetStart":{"type":"integer","format":"int32","description":"The start offset of the finding within the scanned text. This can be null for some findings."},"lineOffsetEnd":{"type":"integer","format":"int32","description":"The end offset of the finding within the scanned text. This can be null for some findings."},"confidence":{"type":["number","null"],"format":"double","description":"The confidence of the finding, if the matcher supports confidence scores."},"reviewed":{"type":"boolean","description":"If this finding has been reviewed."},"globallyReviewed":{"type":"boolean","description":"If this finding has been globally reviewed."},"fineGrainedReviewed":{"type":"boolean","description":"If just this instance of the finding has been reviewed."},"reviewable":{"type":"boolean","description":"If this finding is reviewable. Some built-in rules findings cannot be reviewed."},"contentType":{"type":"string","description":"The type of content this finding was in. This was added when we switched to the V2 API.\n\n <p>This property is mutable because it might need to be updated after retrieval from the database if the content\n type changed.\n\n <p>This property is serialized because it distinguishes pages from blog posts for the frontend, whereas\n {@link io.soteri.leak.dto.FindingDto#locationType #locationType} groups them together as {@link ConfluenceLocationType#PAGE_OR_BLOG_POST ConfluenceLocationType#PAGE_OR_BLOG_POST}.","enum":["PAGE","BLOG_POST","COMMENT"]},"attachmentExtractionVersion":{"type":["integer","null"],"format":"int32","description":"The extraction version used to extract text, if this is an attachment finding."},"attachmentFilename":{"type":["string","null"],"description":"The attachment filename resolved for this response."},"attachmentMediaType":{"type":["string","null"],"description":"The attachment media type resolved for this response, when available."},"versionNumber":{"type":"integer","format":"int32","description":"The version number of the content this finding was in."},"historical":{"type":"boolean","description":"Whether this finding is not present in the latest version of the content."},"firstVersionNumber":{"type":["integer","null"],"format":"int32","description":"The first version number that this finding was present in. Null if a scan finding is only present in a single\n version of a page."},"pageName":{"type":"string","description":"The name of the page."},"text":{"type":"string","description":"The text that was scanned to generate this finding."},"contentFound":{"type":"boolean","description":"If the content was found (e.g. the text contains the actual scanned content, not a helpful error message)."},"builtInRule":{"type":"boolean","description":"Whether the rule which generated this finding is built-in; false for custom rules."},"truncated":{"type":"boolean","description":"True if this finding has been truncated because it was too long."},"url":{"type":["string","null"],"description":"The URL to the containing content for this scan finding. Null upon object creation, then populated later during\n enriching."},"securityAnalysisUrl":{"type":["string","null"],"description":"The URL to the security analysis page, deep-linked to the page or blog post containing this finding and\n pre-filtered to its rule, or the space-level view when the containing content is unknown."},"firstVersionUrl":{"type":["string","null"],"description":"The URL to the first version of this scan finding. Only used for grouped scan findings."},"diffUrl":{"type":["string","null"],"description":"A URL to a diff where the finding was first introduced. Null if this is the first version or a comment finding."},"pathFragments":{"type":["array","null"],"description":"The path to the content which contains this finding. Not used for exports.","items":{"$ref":"#/components/schemas/PathFragmentLink"}},"reasonCategory":{"type":["string","null"],"description":"The category of the review reason, if this finding has been reviewed."},"reasonNotes":{"type":["string","null"],"description":"Additional notes for the review reason, if this finding has been reviewed."},"reviewer":{"type":["string","null"],"description":"The account ID of the user who reviewed this finding."},"reviewTime":{"type":["string","null"],"format":"date-time","description":"When this finding was reviewed."},"labeled":{"type":["boolean","null"],"description":"Whether the content this finding is on carries the remediation label."},"authorAccountId":{"type":["string","null"],"description":"The account ID of the author blamed for this finding, or null when it is unknown. A finding is blamed on the\n author of the content version that introduced it, except in an undeduplicated export, where each row is blamed on\n the author of its own version. See {@link io.soteri.leak.dto.EnrichedFindingDto#authorName #authorName}. Null for fast (redacted) exports; populated otherwise."},"authorName":{"type":["string","null"],"description":"The display name of the user identified by {@link io.soteri.leak.dto.EnrichedFindingDto#authorAccountId #authorAccountId}, or null when the account ID is unknown or\n could not be resolved."},"latestVersionAuthorName":{"type":["string","null"],"description":"The display name of the user identified by {@link io.soteri.leak.dto.EnrichedFindingDto#latestVersionAuthorAccountId #latestVersionAuthorAccountId}, or null when the account ID is\n unknown or could not be resolved."},"location":{"type":"string","description":"A readable description of where this finding was found, such as the title of the page or blog post that contains it."},"firstIntroducedTimestamp":{"type":"integer","format":"int64","description":"When the finding was first introduced, as milliseconds since the epoch."},"lastSeenTimestamp":{"type":"integer","format":"int64","description":"When the finding was last seen, as milliseconds since the epoch."}}},"PagedEnrichedFindingDto":{"type":"object","description":"A single page of results, together with the total number of results available.","properties":{"values":{"type":"array","description":"The results on this page.","items":{"$ref":"#/components/schemas/EnrichedFindingDto"}},"totalCount":{"type":"integer","format":"int64","description":"The total number of results available across all pages."}}},"PathFragmentLink":{"type":"object","description":"A representation of part of a file or content path, e.g., /path/to/x.","properties":{"title":{"type":"string","description":"What to call this part of the path."},"url":{"type":"string","description":"Where this part of the path points."}}},"ScanDto":{"type":"object","description":"The status of a scan, together with any findings it produced. Returned for both content scans and space scans.","properties":{"scanState":{"type":"string","description":"The state of the scan.","enum":["SCHEDULED","SCANNING","SCANNED","FAILED","UNSCANNED"]},"upToDate":{"type":"boolean","description":"Reports staleness due to content change."},"errorMessage":{"type":["string","null"],"description":"A message describing why the scan failed, or null if the scan did not fail."},"findings":{"$ref":"#/components/schemas/PagedEnrichedFindingDto"},"upToDateSettings":{"type":"boolean","description":"Reports staleness due to settings change."},"progress":{"$ref":"#/components/schemas/ScanProgressDto","description":"Progress of the scan. Only present for space scans when the scan state is SCANNING."}}},"ScanProgressDto":{"type":"null","description":"The progress of a scan, as the number of items scanned so far out of the approximate total number of items in scope.","properties":{"numScanned":{"type":"integer","format":"int64","description":"The number of items that have been scanned so far."},"numTotal":{"type":"integer","format":"int64","description":"The total number of items to scan. Might not be exact, based on Atlassian API limitations."},"percentageProgress":{"type":"integer","format":"int32","description":"Calculate the percentage progress of the scan."}}},"ReviewFindingRequestBodyLong":{"type":"object","description":"The expected contents of a request to create or delete a reviewed finding.","properties":{"matchText":{"type":"string","description":"The plain text of what to mark as reviewed.","minLength":1},"ruleName":{"type":"string","description":"The name of the rule which generated this finding.","maxLength":255,"minLength":0},"fineGrainedScope":{"type":["integer","null"],"format":"int64","description":"The fine-grained review scope."},"reasonCategory":{"type":["string","null"],"description":"The category of the review reason."},"reasonNotes":{"type":["string","null"],"description":"Additional notes for the review reason."}},"required":["matchText","ruleName"]},"ExportJobStatusDto":{"type":"object","description":"The state of an export that runs in the background.","properties":{"jobId":{"type":"string","format":"uuid","description":"The identifier of the export, used to check its status and to request its download link."},"exportType":{"type":"string","description":"The kind of content this export contains.","enum":["FINDINGS_INSTANCE","FINDINGS_SPACE","FINDINGS_ITEM","DASHBOARD","REVIEWED_FINDINGS_INSTANCE","REVIEWED_FINDINGS_SPACE","GLOBAL_REVIEWED_FINDINGS","AUDIT_LOG","ATTACHMENT_COVERAGE_INSTANCE","ATTACHMENT_COVERAGE_SPACE"]},"targetId":{"type":["integer","null"],"format":"int64","description":"The identifier of the single object the export is scoped to: the space for FINDINGS_SPACE and REVIEWED_FINDINGS_SPACE exports, and the individual content item for FINDINGS_ITEM exports. Null for exports that are not scoped to one object."},"status":{"type":"string","description":"How far the export has got, and whether its file can be downloaded.","enum":["PENDING","IN_PROGRESS","READY","DOWNLOADED","FAILED","INTERRUPTED"]},"createdAt":{"type":"number","format":"double","description":"When the export was requested."},"startedAt":{"type":["number","null"],"format":"double","description":"When the export began producing its file, or null if it has not begun yet or is waiting to be retried."},"completedAt":{"type":["number","null"],"format":"double","description":"When the export finished or failed, or null while it is still in progress."},"completedTargetsCount":{"type":["integer","null"],"format":"int32","description":"How many of the export's targets have been completed so far, or null for exports that do not report progress per target."},"totalTargetsCount":{"type":["integer","null"],"format":"int32","description":"How many targets the export covers in total, or null for exports that do not report progress per target."},"errorMessage":{"type":["string","null"],"description":"Why the export failed, or null unless the status is FAILED."},"stuck":{"type":"boolean","description":"Whether this export appears stuck (active but not progressing), so it shouldn't block a new export."}}},"GlobalReviewRequestBody":{"type":"object","description":"The expected contents of a request to globally review a single finding, or to un-review one.","properties":{"matchText":{"type":"string","description":"The plain text of what to review everywhere it occurs.","minLength":1},"ruleName":{"type":["string","null"],"description":"The name of the rule whose finding prompted this review. Optional, and only recorded in the audit log for\n posterity.","maxLength":255,"minLength":0},"reasonCategory":{"type":["string","null"],"description":"The category of the review reason."},"reasonNotes":{"type":["string","null"],"description":"Additional notes for the review reason."}},"required":["matchText"]},"UploadCsvRequest":{"type":"object","description":"JSON request body for globally reviewed findings upload and delete operations.","properties":{"filename":{"type":"string","description":"An optional name for the submitted file. This value is ignored and has no effect on the operation."},"csvBase64":{"type":"string","description":"The contents of a CSV file, encoded as a Base64 string. This value is required. Once decoded, the CSV must contain a single column with the header \"Match text\",  and one row for each matched text to be reviewed."}}},"GlobalReviewedFindingUpdateDto":{"type":"object","description":"Information about a particular update operation of globally reviewed findings.","properties":{"create":{"type":"boolean","description":"If this was a create operation. If false, this was a delete operation. Mostly used for integration tests."},"reviewedFindingsUploaded":{"type":"integer","format":"int64","description":"The number of rows read from the uploaded CSV, excluding the header row and any wholly empty rows."},"reviewedFindingsAdded":{"type":["integer","null"],"format":"int64","description":"For create operations, the number of reviewed findings which were actually created. Can be less than\n {@link io.soteri.cloud.dto.GlobalReviewedFindingUpdateDto#reviewedFindingsUploaded #reviewedFindingsUploaded} if some of the uploaded findings already existed. Null for delete operations."},"reviewedFindingsDeleted":{"type":["integer","null"],"format":"int64","description":"For delete operations, the number of reviewed findings which were actually deleted. Can be less than\n {@link io.soteri.cloud.dto.GlobalReviewedFindingUpdateDto#reviewedFindingsUploaded #reviewedFindingsUploaded} if some of the uploaded findings didn't exist to delete. Null for create\n operations."},"reviewedFindingsUpdated":{"type":["integer","null"],"format":"int64","description":"For create operations, the number of preexisting reviewed findings this update overwrote the review reasons of.\n Null for delete operations."},"reviewedFindingsSkipped":{"type":["integer","null"],"format":"int64","description":"For create operations, the number of uploaded rows that were rejected because their review reason was missing or\n named no allowed category. Null for delete operations."},"rowsWithoutMatchText":{"type":"integer","format":"int64","description":"The number of uploaded rows that carried content but named nothing to review, as happens when a spreadsheet\n shifts the columns of the file. Reported for both create and delete operations, so that the same file yields the\n same count either way."}}},"CreateCustomRuleDto":{"type":"object","description":"The name and regular expression of a new custom scanning rule. The identifier is assigned when the rule is created.","properties":{"name":{"type":"string","description":"The name of the rule.","maxLength":255,"minLength":0},"regexp":{"type":"string","description":"The regular expression for the rule."}},"required":["name"]},"InstanceSettingsDto":{"type":"object","description":"The settings that apply to the whole Atlassian site.","properties":{"autoScan":{"type":"boolean","description":"Whether this instance should be automatically scanned upon new and updated content."},"includePlaintextInExports":{"type":"boolean","description":"Whether to include plain text secrets in exports. If true, exports will include plaintext secrets. If false,\n exports will include links to help locate the secret in context."},"requireReviewReason":{"type":"boolean","description":"Whether a reason is required when marking a finding as reviewed."},"mlScanning":{"type":"boolean","description":"Whether Model Scanning is enabled."},"scanAttachments":{"type":"boolean","description":"Whether attachment scanning is enabled."}}},"ReviewReasonCategoriesResponse":{"type":"object","description":"The review reason categories this site accepts.","properties":{"categories":{"type":"array","description":"The ordered set of allowed kebab-case category identifiers.","items":{"type":"string"},"uniqueItems":true}}},"ValidationRuleDefinitionDto":{"type":"object","description":"A constraint that a custom rule's regular expression must satisfy. A submitted pattern is rejected when it matches the constraint's pattern.","properties":{"pattern":{"type":"string","description":"Regex pattern to match against the user's input pattern. If this regex matches the user's pattern, the validation\n fails. Examples:\n\n <pre>\n - <code>(^|[^\\\\\\\\])\\\\\\\\(\\\\\\\\\\\\\\\\)*(n|r|R|(x0|u000)[aAdD])</code> Detects newline matchers\n - <code>^.{0,9</code>$} Detects patterns that are too short\n - <code>^\\\\.\\\\*.*</code> Detects patterns starting with .*\n </pre>"},"message":{"type":"string","description":"Error message to display when validation fails. Can include {pattern} placeholder which will be replaced with the\n user's pattern (e.g., \"Custom rule regexp \\\"{pattern}\\\" contains a newline matcher and cannot be used.\")."}}},"PermissionsDto":{"type":"object","description":"The permission flags for the issuing user.","properties":{"isProductAdmin":{"type":"boolean","description":"Whether the issuing user is a product administrator."},"isAppAdmin":{"type":"boolean","description":"Whether the issuing user is a product administrator or has been granted explicit access to the app, either\n directly or through a group."}}},"ForceInstanceRescanStatusDto":{"type":"object","description":"Availability information for the forced instance rescan action.","properties":{"available":{"type":"boolean","description":"Whether a forced instance rescan can be requested now."},"lastForcedInstanceRescanAt":{"type":["number","null"],"format":"double","description":"When the last forced instance rescan was requested, if ever. Serialized even when null, since \"never requested\"\n is the answer a consumer is asking for rather than a field that does not apply."},"nextAvailableAt":{"type":["number","null"],"format":"double","description":"When the next forced instance rescan becomes available, if currently cooling down."}}},"AuditLogDto":{"type":"object","description":"Returned as the JSON body when fetching audit log events.","properties":{"events":{"type":"array","items":{"$ref":"#/components/schemas/EventDto"}}}},"EventDto":{"type":"object","description":"A single audit log entry.","properties":{"eventType":{"type":"string","description":"The human-readable description of the type of activity this entry records."},"author":{"type":"string","description":"The account ID of the user responsible for the event, or \"System\" if there is no user."},"timestamp":{"type":"number","format":"double","description":"When the event occurred."},"eventDetails":{"type":"string","description":"Details about the event, as a JSON string."},"displayName":{"type":"string","description":"The display name of the author, or \"System\" when no user was responsible for the event."}}},"EventTypeDto":{"type":"object","description":"An audit log event type, pairing its stable code with a human-readable description.","properties":{"code":{"type":"string","description":"The stable code identifying this event type, for example \"updated_app_access\"."},"description":{"type":"string","description":"The human-readable description of this event type, as it appears in the audit log."}}},"EventTypeGroupDto":{"type":"object","description":"A named group of related audit log event types.","properties":{"description":{"type":"string","description":"Description of the group."},"eventTypes":{"type":"array","description":"Members of the group.","items":{"$ref":"#/components/schemas/EventTypeDto"}}}}},"securitySchemes":{"apiKeyBearerAuth":{"type":"http","description":"API key issued from the app's administration screen, without the `Bearer ` prefix. This is a string starting with `soteri_` followed by 43 characters.","scheme":"bearer"}}}}