{"openapi":"3.0.1","info":{"contact":{"email":"info@sandflysecurity.com"},"description":"Sandfly Security Server API","license":{"name":"Sandfly Security, Ltd.","url":"https://www.sandflysecurity.com"},"title":"Sandfly API","version":"5.7.0"},"servers":[{"url":"https://{sandfly-api-host}/v4"}],"security":[{"bearerAuth":[]}],"paths":{"/alerts/email":{"get":{"description":"Gets all of the email alert entries.","operationId":"getEmailAlerts","responses":{"200":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ScrollingResponse"}],"required":["data"],"properties":{"data":{"description":"Alert email entries.","uniqueItems":true,"items":{"type":"object","required":["id"],"allOf":[{"$ref":"#/components/schemas/EmailAlert"}],"properties":{"id":{"type":"string","description":"Alias for name.","deprecated":true}}},"type":"array"}},"type":"object"}}},"description":"Email entries retrieved"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Email entries not found."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Get all email alerts","tags":["Notifications"]},"post":{"description":"Adds an email entry.","operationId":"addEmailAlert","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailAlertsConfig"}}},"description":"Email json object to insert","required":true},"responses":{"201":{"content":{},"description":"Added"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Add email entry","tags":["Notifications"]}},"/alerts/email/test/{name}":{"post":{"description":"Tests an email entry.","operationId":"testEmailAlert","parameters":[{"description":"email name to test","in":"path","name":"name","required":true,"schema":{"format":"string","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"email entry test message sent."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error testing email entry."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Test email entry","tags":["Notifications"]}},"/alerts/email/{name}":{"delete":{"description":"Deletes an email entry.","operationId":"deleteEmailAlert","parameters":[{"description":"email name to delete","in":"path","name":"name","required":true,"schema":{"format":"string","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"email entry deleted."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error deleting email entry."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Delete email entry","tags":["Notifications"]},"get":{"description":"Gets an email entry by name.","operationId":"getEmailAlert","parameters":[{"description":"email name to retrieve","in":"path","name":"name","required":true,"schema":{"format":"string","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"email entry retrieved."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error retrieving email entry."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Get email entry","tags":["Notifications"]},"put":{"description":"Updates an email entry.","operationId":"updateEmailAlert","parameters":[{"description":"email name to update","in":"path","name":"name","required":true,"schema":{"format":"string","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailUpdate"}}},"description":"Email json object to update","required":true},"responses":{"201":{"content":{},"description":"Updated"},"404":{"content":{},"description":"The requested email alert does not exist"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Update email entry","tags":["Notifications"]}},"/alerts/syslog":{"get":{"description":"Gets all syslog entries","operationId":"getSyslogAlerts","responses":{"200":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ScrollingResponse"}],"required":["data"],"properties":{"data":{"description":"Alert email entries.","uniqueItems":true,"items":{"$ref":"#/components/schemas/SyslogAlert"},"type":"array"}},"type":"object"}}},"description":"Syslog retrieved"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Syslog entries not found."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Get all syslog entries","tags":["Notifications"]},"post":{"description":"Adds a syslog entry.","operationId":"addSyslogAlert","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyslogAdd"}}},"description":"Syslog json object to insert","required":true},"responses":{"201":{"content":{},"description":"Added"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Add syslog entry","tags":["Notifications"]}},"/alerts/syslog/{name}":{"delete":{"description":"Deletes a syslog entry.","operationId":"deleteSyslogAlert","parameters":[{"description":"syslog name to delete","in":"path","name":"name","required":true,"schema":{"format":"string","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Syslog entry deleted."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error deleting syslog entry."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Delete syslog entry","tags":["Notifications"]},"get":{"description":"Get a syslog entry.","operationId":"getSyslogAlert","parameters":[{"description":"syslog name to get","in":"path","name":"name","required":true,"schema":{"format":"string","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyslogAlert"}}},"description":"Syslog found."},"404":{"content":{},"description":"The requested syslog entry doesn't exist"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Get syslog entry","tags":["Notifications"]},"put":{"description":"Updates a syslog entry.","operationId":"updateSyslogAlert","parameters":[{"description":"syslog name to update","in":"path","name":"name","required":true,"schema":{"format":"string","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyslogUpdate"}}},"description":"Syslog json object to update","required":true},"responses":{"201":{"content":{},"description":"Updated"},"404":{"content":{},"description":"The requested syslog entry doesn't exist"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Update syslog entry","tags":["Notifications"]}},"/audit":{"delete":{"description":"Deletes the audit log.","operationId":"deleteAuditLog","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Audit log deleted"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error getting audit log."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"No audit log found."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Delete audit log","tags":["Audit Log"]},"get":{"description":"Gets the audit log.","operationId":"getAuditLog","parameters":[{"description":"page number to retrieve","in":"query","name":"page","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ScrollingResponse"}],"properties":{"data":{"description":"List of logs","items":{"$ref":"#/components/schemas/AuditLogEntry"},"type":"array"}},"required":["data"],"type":"object"}}},"description":"Audit log retrieved"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error getting audit log."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"No audit log found."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Get audit log","tags":["Audit Log"]}},"/auth":{"get":{"operationId":"getMe","description":"Get the current logged in user.","summary":"Get current user","tags":["Users","Authentication"],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","required":["saved_views","user"],"properties":{"saved_views":{"type":"array","items":{"$ref":"#/components/schemas/SavedView"}},"user":{"$ref":"#/components/schemas/User"}}}}},"description":"Current user."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}}}},"/auth/login":{"post":{"description":"Gets the authentication token.","operationId":"apiLogin","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthLogin"}}},"description":"Authentication json blob.","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthAccessRefreshToken"}}},"description":"Login valid"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error during login"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Invalid login"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"security":[],"summary":"Get authentication token","tags":["Authentication"]}},"/auth/login_refresh":{"post":{"description":"Gets a new authentication token but marks old one as non-fresh.","operationId":"apiLoginRefresh","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthLoginRefresh"}}},"description":"Options to pass to refresh call such as full_details","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthAccessToken"}}},"description":"Login valid"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error during login"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Invalid login"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Refresh authentication token","tags":["Authentication"]}},"/auth/logout":{"delete":{"description":"Log out user and revoke token.","operationId":"logout","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthLogout"}}},"description":"User logged out."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error during logout"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Log out user and revoke token","tags":["Authentication"]}},"/config":{"get":{"description":"Gets the current server configurations in the system.","operationId":"getConfig","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerConfiguration"}}},"description":"Server configuration retrieved"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Server configuration not found."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Get all server configurations","tags":["Server Configuration"]},"put":{"description":"Update server configurations.","operationId":"updateConfig","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerConfigurationUpdate"}}},"description":"Server configuration json object to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Configuration updated."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Configuration failed validation. Configuration not updated."},"502":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Testing connectivity to a remote system failed. Configuration not updated."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Update server configurations","tags":["Server Configuration"]}},"/config/sso/enabled":{"get":{"description":"Returns SSO enabled boolean.","operationId":"isSsoEnabled","responses":{"200":{"description":"Returns true if license allows for SSO, SSO is configured and enabled in settings.","content":{"application/json":{"schema":{"type":"boolean"}}}},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Get SSO status","tags":["Authentication"]}},"/debug/tlsregenerate":{"post":{"description":"Forces regeneration of the self-signed TLS certificate. This is a debug endpoint since certificates are auto-renewed before expiration.","operationId":"regenerateTlsCert","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"TLS certificate regenerated successfully."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Regenerate self-signed TLS certificate","tags":["Debug"]}},"/credentials":{"delete":{"description":"This deletes all credential_ids passed into the body as bulk operation.","operationId":"deleteCredentials","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialsDelete"}}},"description":"List of credential_ids to delete.","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Credentials deleted"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error with delete request."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Delete credentials in bulk","tags":["Credentials"]},"get":{"operationId":"getCredentials","description":"Gets all of the credentials that are entered in the system.","responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"items":{"$ref":"#/components/schemas/CredentialsHostEncrypted"},"type":"array"}},"required":["data"],"type":"object"}}},"description":"Credentials retrieved"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Credentials not found."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Get all credentials","tags":["Credentials"]}},"/credentials/{credentials_id}":{"delete":{"description":"Deletes a remote system login credential encrypted record.","operationId":"deleteCredential","parameters":[{"description":"credentials_id to delete.","in":"path","name":"credentials_id","required":true,"schema":{"format":"string","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Node credentials deleted"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error with delete request."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Nothing to delete."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Delete remote system login encrypted record","tags":["Credentials"]},"get":{"description":"Gets the encrypted credentials to allow scanning nodes to login to a remote host.","operationId":"getCredential","parameters":[{"description":"credentials_id to retrieve.","in":"path","name":"credentials_id","required":true,"schema":{"format":"string","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialsHostEncrypted"}}},"description":"Credentials retrieved"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Credentials not found."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Get encrypted credentials","tags":["Credentials"]},"post":{"description":"Creates either an sshkey/sshkey password or username/password to an encrypted remote host credential record.","operationId":"addCredential","parameters":[{"description":"credentials_id to create.","in":"path","name":"credentials_id","required":true,"schema":{"format":"string","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialConfiguration"}}},"description":"Credentials json blob.","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Remote credentials encrypted and inserted."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Remote credentials already exist. Not overwritten."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Add remote system login credentials","tags":["Credentials"]},"put":{"description":"Updates the sshkey/sshkey password or username/password to an encrypted remote host credential record.","operationId":"updateCredential","parameters":[{"description":"credentials_id to update.","in":"path","name":"credentials_id","required":true,"schema":{"format":"string","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialConfiguration"}}},"description":"Credentials json blob.","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/StandardResponseStatus"}],"properties":{"data":{"properties":{"generated":{"type":"boolean"},"public_key":{"type":"string"}},"required":["generated"],"type":"object"}},"required":["data"]}}},"description":"Remote credentials updated, encrypted, and inserted."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Remote credentials already exist. Not overwritten."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Update remote system login credentials","tags":["Credentials"]}},"/errors":{"delete":{"description":"Deletes all errors.","operationId":"deleteScanErrorLog","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Errors deleted."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error with delete request."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Delete all scan errors","tags":["Scan"]},"get":{"description":"Gets the error log.","operationId":"getScanErrorLog","parameters":[{"description":"get summary data","in":"query","name":"summary","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorLog"}}},"description":"Error log retrieved"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Get scan error log","tags":["Scan"]}},"/hosts":{"delete":{"description":"Deletes all host_ids passed into the body as a bulk operation.","operationId":"deleteHosts","requestBody":{"content":{"application/json":{"schema":{"properties":{"host_ids":{"description":"List of host_ids to delete.","items":{"type":"string"},"type":"array"},"host_sequence_ids":{"description":"List of host_sequence_ids to delete.","type":"array","items":{"type":"integer"}}},"type":"object"}}},"description":"List of host_ids to delete.","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Hosts deleted"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error with delete request."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Delete hosts in bulk","tags":["Hosts"]},"get":{"operationId":"getHosts","description":"Gets a list of all hosts in the system. **NOTE**: almost all uses of this function should use the `?summary=true` parameter; the raw call without a summary parameter or with `?summary=false` exists only for backward compatability.","parameters":[{"name":"summary","in":"query","required":false,"schema":{"type":"boolean","default":false},"description":"When summary is false (the default, although not recommended for most uses of this API) the \"raw host JSON\" is returned for each host. When summary is true (recommended), a flat set of fields containing the main host details, as well as data from SSH hunter such as key counts, zone violations, duplicate keys, etc. (not found in the summary=false response)."},{"description":"Only supported when `summary=true`. If present, restricts the host list data to the specific SSH key IDs. Only hosts with the requested SSH keys will be returned, and the SSH-related counts will only count the requested keys. When present, the top-level response object will include a key_names map providing the friendly names for each key that exists. While not modeled in this OpenAPI spec schema, this parameter accepts a comma-delimited list of multiple key IDs.","in":"query","name":"key_filter","required":false,"schema":{"type":"integer"}},{"description":"Only supported when `summary=true`. Number of results per page. Support a maximum page size of 100,000.","in":"query","name":"size","required":false,"schema":{"type":"integer","default":10000}},{"description":"Only supported when `summary=true`. Page number of results to retrieve.","in":"query","name":"page","required":false,"schema":{"type":"integer","default":1}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","allOf":[{"$ref":"#/components/schemas/ScrollingResponse"}],"required":["data"],"properties":{"data":{"description":"List of hosts","oneOf":[{"$ref":"#/components/schemas/Hosts"},{"$ref":"#/components/schemas/HostSummaryRollups"}]},"key_names":{"description":"If the `key_filter` parameter contains one more key IDs, this property will be present and contain a map of key IDs to friendly key names. If there is no key_filter parameter, this property will not exist in the response.","type":"object","additionalProperties":{"type":"string","description":"The friendly name of the key ID."}}}}}},"description":"Host information retrieved"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Hosts not found."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Get all hosts","tags":["Hosts"]},"post":{"description":"Adds new hosts.","operationId":"addHosts","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HostConfiguration"}}},"description":"Host data to use to scan for and input new hosts.","required":true},"responses":{"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Host information accepted for processing."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error with host add."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Host not found."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Add hosts","tags":["Hosts"]}},"/hosts/retry":{"post":{"description":"Retry the attempt to connect to inactive hosts to add them to the system.","operationId":"retryHosts","requestBody":{"content":{"application/json":{"schema":{"properties":{"host_ids":{"description":"List of host_ids of hosts to retry.","items":{"type":"string"},"type":"array"},"host_sequence_ids":{"description":"List of sequence_ids of hosts to retry.","type":"array","items":{"type":"integer"}}},"type":"object"}}},"description":"List of inactive host IDs to retry."},"responses":{"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Host IDs accepted for processing."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error with host retry."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Host or dependent resources (jump hosts, credentials, queues) not found."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Retry inactive hosts","tags":["Hosts"]}},"/hosts/tags":{"put":{"description":"Bulk update tags on hosts.","summary":"Bulk tag hosts","operationId":"bulkTagHosts","parameters":[{"description":"operation - add or remove the requested tags","in":"query","name":"operation","required":true,"schema":{"$ref":"#/components/schemas/BulkTagOperation"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HostBulkTag"}}},"description":"Parameters to list the host IDs and tags.","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Bulk tag operation completed successfully."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error with request"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"tags":["Hosts"]}},"/hosts/{host_id}":{"delete":{"description":"Deletes a registered host by host ID.","operationId":"deleteHost","parameters":[{"description":"host_id or host_sequence_id to delete.","in":"path","name":"host_id","required":true,"schema":{"oneOf":[{"title":"host_id","format":"string","type":"string"},{"title":"host_sequence_id","format":"string","type":"integer"}]}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Host deleted"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error with delete request."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Delete host","tags":["Hosts"]},"get":{"description":"Gets a registered host by host ID.","operationId":"getHost","parameters":[{"description":"host_id or host_sequence_id to retrieve.","in":"path","name":"host_id","required":true,"schema":{"oneOf":[{"title":"host_id","format":"string","type":"string"},{"title":"host_sequence_id","format":"string","type":"integer"}]}},{"$ref":"#/components/parameters/summary"}],"responses":{"200":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Host"},{"$ref":"#/components/schemas/HostSummary"}]}}},"description":"Host information retrieved"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error with get request."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Host not found."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Get host","tags":["Hosts"]},"put":{"description":"Allows users to update a host (such as credentials to use, active or not, host aliases, jump_hosts and tags).","operationId":"updateHost","parameters":[{"description":"Unique host_id or host_sequence_id to update.","in":"path","name":"host_id","required":true,"schema":{"oneOf":[{"title":"host_id","format":"string","type":"string"},{"title":"host_sequence_id","format":"string","type":"integer"}]}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HostUpdate"}}},"description":"Parameters to update in the registered host.","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Host information updated."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error with update request."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Update host","tags":["Hosts"]}},"/hosts/{host_id}/info/kernelmodules":{"get":{"operationId":"hostInfoKernelModules","description":"Get kernel modules list for host.","summary":"Host kernel modules list","tags":["Host Results Info"],"parameters":[{"name":"host_id","description":"host_id or host_sequence_id to retrieve.","in":"path","required":true,"schema":{"oneOf":[{"title":"host_id","format":"string","type":"string"},{"title":"host_sequence_id","format":"string","type":"integer"}]}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","allOf":[{"$ref":"#/components/schemas/HostInfoResponse"}],"properties":{"data":{"type":"array","description":"Kernel modules list for this host, current as of the date indicated in the results_date property. Will be an empty array if there are no relevant recon sandfly results for this host.","items":{"$ref":"#/components/schemas/HostInfoKernelModule"}}}}}},"description":"Host kernel modules retrieved"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error with get request."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Host not found."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}}}},"/hosts/{host_id}/info/lastlog":{"get":{"operationId":"hostInfoLastlog","description":"Get lastlog entry list for host.","summary":"Host lastlog entry list","tags":["Host Results Info"],"parameters":[{"name":"host_id","description":"host_id or host_sequence_id to retrieve.","in":"path","required":true,"schema":{"oneOf":[{"title":"host_id","format":"string","type":"string"},{"title":"host_sequence_id","format":"string","type":"integer"}]}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","allOf":[{"$ref":"#/components/schemas/HostInfoResponse"}],"properties":{"data":{"type":"array","description":"Lastlog entry list for this host, current as of the date indicated in the results_date property. Will be an empty array if there are no relevant recon sandfly results for this host.","items":{"$ref":"#/components/schemas/HostInfoLastlog"}}}}}},"description":"Host lastlog entry list retrieved"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error with get request."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Host not found."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}}}},"/hosts/{host_id}/info/listeners":{"get":{"operationId":"hostInfoListeners","description":"Get network listeners list for host.","summary":"Host network listeners list","tags":["Host Results Info"],"parameters":[{"name":"host_id","description":"host_id or host_sequence_id to retrieve.","in":"path","required":true,"schema":{"oneOf":[{"title":"host_id","format":"string","type":"string"},{"title":"host_sequence_id","format":"string","type":"integer"}]}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","allOf":[{"$ref":"#/components/schemas/HostInfoResponse"}],"properties":{"data":{"type":"array","description":"Network listeners list for this host, current as of the date indicated in the results_date property. Will be an empty array if there are no relevant recon sandfly results for this host.","items":{"$ref":"#/components/schemas/HostInfoListener"}}}}}},"description":"Host network listeners list retrieved"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error with get request."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Host not found."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}}}},"/hosts/{host_id}/info/loggedinusers":{"get":{"operationId":"hostInfoLoggedInUsers","description":"Get logged in users for host.","summary":"Host logged in users","tags":["Host Results Info"],"parameters":[{"name":"host_id","description":"host_id or host_sequence_id to retrieve.","in":"path","required":true,"schema":{"oneOf":[{"title":"host_id","format":"string","type":"string"},{"title":"host_sequence_id","format":"string","type":"integer"}]}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","allOf":[{"$ref":"#/components/schemas/HostInfoResponse"}],"properties":{"data":{"type":"array","description":"Login sessions list for this host, current as of the date indicated in the results_date property. Will be an empty array if there are no relevant recon sandfly results for this host.","items":{"$ref":"#/components/schemas/HostInfoLoggedInUser"}}}}}},"description":"Host login session list retrieved"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error with get request."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Host not found."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}}}},"/hosts/{host_id}/info/processes":{"get":{"operationId":"hostInfoProcesses","description":"Get process list for host.","summary":"Host process list","tags":["Host Results Info"],"parameters":[{"name":"host_id","description":"host_id or host_sequence_id to retrieve.","in":"path","required":true,"schema":{"oneOf":[{"title":"host_id","format":"string","type":"string"},{"title":"host_sequence_id","format":"string","type":"integer"}]}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","allOf":[{"$ref":"#/components/schemas/HostInfoResponse"}],"properties":{"data":{"type":"array","description":"Process list for this host, current as of the date indicated in the results_date property. Will be an empty array if there are no relevant recon sandfly results for this host.","items":{"$ref":"#/components/schemas/HostInfoProcess"}}}}}},"description":"Host process list retrieved"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error with get request."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Host not found."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}}}},"/hosts/{host_id}/info/scheduledtasks":{"get":{"operationId":"hostInfoScheduledTasks","description":"Get scheduled tasks list for host.","summary":"Host scheduled tasks list","tags":["Host Results Info"],"parameters":[{"name":"host_id","description":"host_id or host_sequence_id to retrieve.","in":"path","required":true,"schema":{"oneOf":[{"title":"host_id","format":"string","type":"string"},{"title":"host_sequence_id","format":"string","type":"integer"}]}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","allOf":[{"$ref":"#/components/schemas/HostInfoResponse"}],"properties":{"data":{"type":"array","description":"Scheduled task (cron jobs, at jobs, systemd timers) list for this host, current as of the date indicated in the results_date property. Will be an empty array if there are no relevant recon sandfly results for this host.","items":{"$ref":"#/components/schemas/HostInfoScheduledTask"}}}}}},"description":"Host scheduled task list retrieved"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error with get request."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Host not found."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}}}},"/hosts/{host_id}/info/services":{"get":{"operationId":"hostInfoServices","description":"Get systemd service unit list for host.","summary":"Host systemd service list","tags":["Host Results Info"],"parameters":[{"name":"host_id","description":"host_id or host_sequence_id to retrieve.","in":"path","required":true,"schema":{"oneOf":[{"title":"host_id","format":"string","type":"string"},{"title":"host_sequence_id","format":"string","type":"integer"}]}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","allOf":[{"$ref":"#/components/schemas/HostInfoResponse"}],"properties":{"data":{"type":"array","description":"systemd service unit list for this host, current as of the date indicated in the results_date property. Will be an empty array if there are no relevant recon sandfly results for this host.","items":{"$ref":"#/components/schemas/HostInfoService"}}}}}},"description":"Host systemd service unit list retrieved"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error with get request."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Host not found."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}}}},"/hosts/{host_id}/info/users":{"get":{"operationId":"hostInfoUsers","description":"Get user list for host.","summary":"Host user list","tags":["Host Results Info"],"parameters":[{"name":"host_id","description":"host_id or host_sequence_id to retrieve.","in":"path","required":true,"schema":{"oneOf":[{"title":"host_id","format":"string","type":"string"},{"title":"host_sequence_id","format":"string","type":"integer"}]}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","allOf":[{"$ref":"#/components/schemas/HostInfoResponse"}],"properties":{"data":{"type":"array","description":"User list for this host, current as of the date indicated in the results_date property. Will be an empty array if there are no relevant recon sandfly results for this host.","items":{"$ref":"#/components/schemas/HostInfoUser"}}}}}},"description":"Host user list retrieved"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error with get request."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Host not found."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}}}},"/hostsrollup/{host_id}":{"get":{"description":"Get a host and associated host data by host ID.","operationId":"getHostRollup","summary":"Get host rollup","tags":["Hosts"],"parameters":[{"description":"host_id or host_sequence_id to retrieve.","in":"path","name":"host_id","required":true,"schema":{"oneOf":[{"title":"host_id","format":"string","type":"string"},{"title":"host_sequence_id","format":"string","type":"integer"}]}},{"description":"If present, restricts the SSH key data in the ssh_summary object of the response to the specific key ID. While not modeled in this API spec, instead of a single integer key ID, this may be a comma-delimited list of key IDs to restrict to a set of keys.","in":"query","name":"ssh_key_filter","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HostRollup"}}},"description":"Host information retrieved"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error with get request."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Host not found."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}}}},"/jumphosts":{"delete":{"description":"Deletes all jump hosts passed into the body as bulk operation.","operationId":"deleteJumpHosts","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JumpHostsDelete"}}},"description":"List of jump hosts to delete.","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Jump hosts deleted"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error with delete request."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Delete jump hosts in bulk","tags":["JumpHosts"]},"get":{"description":"Gets all of the jump hosts in the system.","operationId":"getJumpHosts","responses":{"200":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ScrollingResponse"}],"properties":{"data":{"description":"List of Jump Hosts","items":{"$ref":"#/components/schemas/JumpHost"},"type":"array"}},"required":["data"],"type":"object"}}},"description":"Jump host information retrieved"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error with get request."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Host not found."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Get all jump hosts","tags":["JumpHosts"]}},"/jumphosts/{jump_host_name}":{"delete":{"description":"Deletes a jump host by name.","operationId":"deleteJumpHost","parameters":[{"description":"jump_host_name delete.","in":"path","name":"jump_host_name","required":true,"schema":{"format":"string","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Jump host deleted"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error with delete request."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Delete jump host","tags":["JumpHosts"]},"get":{"description":"Gets a jump host by jump host name.","operationId":"getJumpHost","parameters":[{"description":"jump_host_name to retrieve.","in":"path","name":"jump_host_name","required":true,"schema":{"format":"string","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JumpHost"}}},"description":"Jump host information retrieved"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error with get request."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Host not found."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Get jump host","tags":["JumpHosts"]},"post":{"description":"Allows users to create a jump host.","operationId":"addJumpHost","parameters":[{"description":"jump_host_name to add.","in":"path","name":"jump_host_name","required":true,"schema":{"format":"string","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JumpHostAdd"}}},"description":"Parameters to add in the registered jump_host.","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Jump host information added."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error with update request."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Add jump host","tags":["JumpHosts"]},"put":{"description":"Allows users to update a jump host (such as credentials to use or new hostname).","operationId":"updateJumpHost","parameters":[{"description":"jump_host_name to update.","in":"path","name":"jump_host_name","required":true,"schema":{"format":"string","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JumpHostUpdate"}}},"description":"Parameters to update in the registered jump host.","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Jump host information updated."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error with update request."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Update jump host","tags":["JumpHosts"]}},"/license":{"delete":{"description":"Deletes a license.","operationId":"deleteLicense","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"License entry deleted."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error deleting license entry."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Delete license","tags":["License"]},"get":{"description":"Gets the license data.","operationId":"getLicense","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/License"}}},"description":"License retrieved"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"License entry not found."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Get license data","tags":["License"]},"post":{"description":"Adds a license entry.","operationId":"addLicense","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LicenseAdd"}}},"description":"License json object to insert","required":true},"responses":{"201":{"content":{},"description":"Added"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Add license entry","tags":["License"]},"put":{"description":"Updates a license entry.","operationId":"updateLicense","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LicenseUpdate"}}},"description":"License json object to update","required":true},"responses":{"201":{"content":{},"description":"Added"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Update license entry","tags":["License"]}},"/license/refresh":{"post":{"description":"Refresh an online license entitlement.","operationId":"refreshLicense","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/License"}}},"description":"License refreshed"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"License entry not found."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Refresh license entitlement","tags":["License"]}},"/llmanalysis":{"get":{"summary":"Get LLM analyses","description":"Get list of all LLM analyses. The returned list will be in reverse chronological order of modification date. If a hostid or resultid query parameter is supplies, the results will be limited to that result and/or host ID (if both are provided, they are treated as \"or\").","operationId":"getLlmAnalyses","tags":["LLM Analysis"],"parameters":[{"description":"number of analyses per page","in":"query","name":"size","required":false,"schema":{"type":"integer","default":100}},{"description":"page number of analyses to retrieve","in":"query","name":"page","required":false,"schema":{"type":"integer","default":1}},{"description":"Host sequence ID to limit list to","in":"query","name":"hostid","required":false,"schema":{"type":"integer"}},{"description":"Result ID to limit list to","in":"query","name":"resultid","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ScrollingResponse"}],"properties":{"data":{"description":"List of LLM analyses","items":{"$ref":"#/components/schemas/LlmAnalysisSummary"},"type":"array"}},"required":["data"],"type":"object"}}},"description":"LLM analyses retrieved."},"400":{"description":"Page or size query parameter is invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}}},"post":{"summary":"Begin LLM analysis","description":"Begin a new LLM analysis for a host or result(s).","operationId":"beginLlmAnalysis","tags":["LLM Analysis"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LlmAnalysisAdd"}}}},"responses":{"201":{"description":"LLM analysis created.","content":{"application/json":{"schema":{"type":"integer","description":"ID of the newly created LLM analysis."}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Invalid request body."},"403":{"description":"LLM integration is not enabled in the server configuration.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"The host ID or result IDs were not found."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}}}},"/llmanalysis/bulkdelete":{"post":{"summary":"Bulk delete LLM analyses","description":"Bulk delete LLM analyses. Call is idempotent; will return OK even if LLM analysis ID does not exist.","tags":["LLM Analysis"],"operationId":"deleteLlmAnalysisBulk","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"integer","description":"LLM analysis ID to delete."},"description":"LLM analysis IDs to delete."}},"required":["ids"]}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LlmAnalysis"}}},"description":"LLM analyses deleted."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Invalid request body."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}}}},"/llmanalysis/{id}":{"get":{"summary":"Get LLM analysis","description":"Get an LLM analysis, with its metadata and model response(s).","operationId":"getLlmAnalysis","tags":["LLM Analysis"],"parameters":[{"description":"LLM analysis ID to get.","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LlmAnalysis"}}},"description":"LLM analysis retrieved."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Invalid LLM analysis ID in path."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"LLM analysis ID not found."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}}},"delete":{"summary":"Delete LLM analysis","description":"Delete an LLM analysis. Call is idempotent; will return OK even if LLM analysis ID does not exist.","operationId":"deleteLlmAnalysis","tags":["LLM Analysis"],"parameters":[{"description":"LLM analysis ID to delete.","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LlmAnalysis"}}},"description":"LLM analysis deleted."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Invalid LLM analysis ID in path."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}}}},"/llmanalysis/{id}/chat":{"put":{"summary":"Add chat to LLM analysis","description":"Add a new user chat message to an LLM analysis and submit to the model to get a response. The LLM analysis must be in the \"ready\" state.","operationId":"addLlmAnalysisChat","tags":["LLM Analysis"],"parameters":[{"description":"LLM analysis ID to add chat message to.","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LlmAnalysisChatAdd"}}}},"responses":{"202":{"content":{"application/json":{"schema":{"type":"integer","description":"ID of the LLM analysis the chat was added to."}}},"description":"Chat added to LLM analysis."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Bad request."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"LLM analysis ID not found."},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"The LLM analysis is not in a state that allows the additional of new chat message."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}}}},"/llmanalysis/{id}/wait":{"get":{"summary":"Wait for LLM analysis","description":"Wait for an LLM analysis to complete. This endpoint will not return until the requested LLM analysis ID has returned to a \"ready\" or \"error\" state.","tags":["LLM Analysis"],"operationId":"waitLlmAnalysisComplete","parameters":[{"description":"LLM analysis ID to wait for.","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"integer","description":"ID of the LLM analysis that completed."}}},"description":"LLM analysis is complete."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Invalid ID parameter in query path."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"LLM analysis ID not found."},"504":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Server timeout; will return after 30 minutes. The client may begin a new wait request to continue waiting."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}}}},"/notifications":{"get":{"summary":"Get notifications","description":"Get a list of all event notification configurations.","operationId":"getNotifications","responses":{"200":{"description":"Notifications retrieved.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/TotalledResponse"}],"type":"object","properties":{"data":{"$ref":"#/components/schemas/NotificationSummaries"}}}}}},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"tags":["Notifications"]},"post":{"summary":"Create notification","description":"Create a new event notification configuration.","operationId":"notificationAdd","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Notification"}}}},"responses":{"201":{"content":{"application/json":{"schema":{"type":"integer","description":"The ID of the new notification."}}},"description":"Notification created."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Invalid request body."},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Cannot create new notification because the number of allowed notifications by the license has been reached."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"User is not permitted to perform this action."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"tags":["Notifications"]}},"/notifications/{id}":{"get":{"summary":"Get notification details","description":"Get details of an event notification configuration.","operationId":"getNotification","parameters":[{"description":"Notification ID to get.","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Notification"}}},"description":"Notification retrieved."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"User is not permitted to perform this action."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Notification configuration not found."}},"tags":["Notifications"]},"put":{"summary":"Update notification","description":"Change an existing event notification configuration.","operationId":"updateNotification","parameters":[{"description":"Notification ID to replace.","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Notification"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"type":"integer","description":"The ID of the updated notification."}}},"description":"Notification updated."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Invalid request body."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"User is not permitted to perform this action."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"tags":["Notifications"]},"delete":{"summary":"Delete notification","description":"Delete an event notification configuration.","operationId":"deleteNotification","parameters":[{"description":"Notification ID to delete.","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Notification deleted."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Invalid delete request (e.g. non-integer ID in request)."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"User is not permitted to perform this action."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"tags":["Notifications"]}},"/notifications/test/{id}":{"post":{"summary":"Test notification","description":"Attempt to send a test notification.","operationId":"testNotification","parameters":[{"description":"Notification ID to test.","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Notification test was sent successfully."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Invalid request."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"User is not permitted to perform this action."},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"The test was not successful. Error details are in the response message."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"tags":["Notifications"]}},"/notifications/pause/":{"put":{"description":"Pauses notifications by ID.","summary":"Pause notifications","operationId":"pauseNotifications","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationIDs"}}},"description":"List of notification_ids to pause.","required":true},"responses":{"200":{"content":{},"description":"Notifications paused."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"tags":["Notifications"]}},"/notifications/unpause/":{"put":{"description":"Unpauses notifications by ID.","summary":"Unpause notifications","operationId":"unpauseNotifications","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationIDs"}}},"description":"List of notification_ids to unpause.","required":true},"responses":{"200":{"content":{},"description":"Notifications unpaused."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"tags":["Notifications"]}},"/notifications/pause/{id}":{"put":{"description":"Pause a notification.","operationId":"pauseNotification","parameters":[{"description":"notification ID to pause","in":"path","name":"id","required":true,"schema":{"format":"integer"}}],"responses":{"200":{"content":{},"description":"Notification paused"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Pause notification","tags":["Notifications"]}},"/notifications/unpause/{id}":{"put":{"description":"Unpause a notification.","operationId":"unpauseNotification","parameters":[{"description":"notification ID to unpause","in":"path","name":"id","required":true,"schema":{"format":"integer"}}],"responses":{"200":{"content":{},"description":"Notification unpaused"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Unpause notification","tags":["Notifications"]}},"/reports/host_snapshot":{"get":{"description":"Host snapshot report.","summary":"Host snapshot report","operationId":"getHostSnapshot","responses":{"200":{"description":"Get snapshot successful.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HostSnapshot"}}}},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"tags":["Reports"]}},"/reports/scan_performance":{"get":{"parameters":[{"description":"Scan performance from X date-time.","in":"query","name":"begin","required":false,"schema":{"format":"date-time","type":"string"}},{"description":"Scan performance to X date-time.","in":"query","name":"end","required":false,"schema":{"format":"date-time","type":"string"}},{"description":"Limit results to 100 days.","in":"query","name":"limit","required":false,"schema":{"type":"boolean"}}],"description":"Scan performance report.","summary":"Scan performance report","operationId":"getScanPerformance","responses":{"200":{"description":"Get scan performance successful.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanPerformanceReport"}}}},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"tags":["Reports"]}},"/results":{"delete":{"description":"Deletes results.","operationId":"deleteResults","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResultsDelete"}}},"description":"Results search delete parameters.","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Results"}}},"description":"Status of results found"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"No results found"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Delete results","tags":["Results"]},"post":{"description":"Gets all of the results.","operationId":"getResults","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResultsSearch"}}},"description":"Results search parameters.","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ScrollingResponse"}],"required":["data"],"properties":{"data":{"oneOf":[{"$ref":"#/components/schemas/Results"},{"$ref":"#/components/schemas/ResultSummaries"}]}},"type":"object"}}},"description":"Status of results found"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"No results found"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Get results","tags":["Results"]}},"/results/timeline":{"post":{"summary":"Result timeline","description":"Get results timelines for hosts.","tags":["Results"],"operationId":"getResultsTimeline","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["filter"],"properties":{"filter":{"description":"Result search filter.","type":"object","required":["items","logicOperator"],"properties":{"items":{"$ref":"#/components/schemas/ResultSearchFilterItem"},"logicOperator":{"$ref":"#/components/schemas/ResultSearchFilterOperator"},"quickFilterValues":{"type":"array","items":{"type":"string"}}}}}}}},"description":"Result search parameters.","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/HostResultTimeline"}}}}}},"description":"Timeline of results by host matching the filter."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Invalid request"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}}}},"/results/all":{"delete":{"description":"Deletes all results.","operationId":"deleteAllResults","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Status of delete"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"No results found"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Delete all results","tags":["Results"]}},"/results/{result_id}":{"delete":{"description":"Deletes a result by result ID.","operationId":"deleteResult","parameters":[{"description":"result_id delete.","in":"path","name":"result_id","required":true,"schema":{"oneOf":[{"title":"id","format":"string","type":"string"},{"title":"sequence_id","format":"string","type":"integer"}]}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Result deleted"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error with delete request."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Delete result","tags":["Results"]},"get":{"description":"Gets a result by result ID.","operationId":"getResult","parameters":[{"description":"result_id to retrieve.","in":"path","name":"result_id","required":true,"schema":{"oneOf":[{"title":"id","format":"string","type":"string"},{"title":"sequence_id","format":"string","type":"integer"}]}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Result"}}},"description":"Result information retrieved"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error with get request."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Host not found."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Get result","tags":["Results"]}},"/results/delete/hostsandflies":{"post":{"summary":"Delete sandfly results for host","description":"Delete all results for a sandfly list on a single host.","tags":["Results"],"operationId":"deleteHostSandflyResults","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["host_id","sandflies"],"properties":{"host_id":{"type":"string","description":"The host from which to delete the results."},"sandflies":{"type":"array","items":{"type":"string"},"description":"The sandfly names to delete the results for."}}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Status of delete"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Invalid request body."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}}}},"/results/delete/sandflyhosts":{"post":{"summary":"Delete host results for sandfly","description":"Delete all results for a host list on a single sandfly.","tags":["Results"],"operationId":"deleteSandflyHostResults","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["host_ids","sandfly"],"properties":{"sandfly":{"type":"string","description":"The sandfly from which to delete the results."},"host_ids":{"type":"array","items":{"type":"string"},"description":"The host IDs to delete the results for."}}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Status of delete"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Invalid request body."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}}}},"/resultprofiles":{"get":{"summary":"Get result profiles","description":"Get summary list of all result profiles.","operationId":"getProfiles","responses":{"200":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/TotalledResponse"}],"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ProfileSummary"}}}}}},"description":"Result profile information retrieved"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"tags":["Drift Detection","Result Profiles"]},"post":{"summary":"Create new result profile","description":"Create new result profile. One or more host IDs and/or result IDs must be included in the request, which will add the associated eligible results to the result profile.","operationId":"createProfile","deprecated":true,"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileCreateRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"type":"integer","description":"The ID of the new result profile."}}},"description":"Result profile created"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Invalid request body."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"There were no eligible results on the requested host(s) and/or result ID(s)."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"tags":["Drift Detection","Result Profiles"]}},"/resultprofiles/autodrift":{"post":{"summary":"Create auto-drift profile","description":"Create a new result profile that will automatically gather results from a set of model hosts for a period of time before applying them as a drift (and optionally whitelist) profile on a set of covered hosts.","operationId":"createProfileAutoDrift","tags":["Drift Detection","Result Profiles"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoDriftCreateRequest"}}}},"responses":{"201":{"content":{"application/json":{"schema":{"type":"integer","description":"The ID of the new auto-drift result profile."}}},"description":"Auto-drift profile created"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Invalid request body."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}}}},"/resultprofiles/autodrift/{id}":{"put":{"summary":"Edit autodrift profile","description":"Edit an autodrift profile. Optionally edit different parts of the profile by setting the objects non-null; null objects (or keys left out) indicate that that portion of the profile will not be modified.","operationId":"editAutoDriftProfile","tags":["Drift Detection","Result Profiles"],"parameters":[{"description":"Result profile ID to edit.","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoDriftEditRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Auto-drift profile successfully updated"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Invalid request body."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Autodrift profile not found"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}}}},"/resultprofiles/autodrift/{id}/gather":{"delete":{"summary":"Remove gather configuration","description":"Remove gather configuration from an autodrift profile.","operationId":"deleteAutoDriftGather","tags":["Drift Detection","Result Profiles"],"parameters":[{"description":"Result profile ID to edit.","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Gather configuration removed."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Result profile not found."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}}}},"/resultprofiles/autodrift/{id}/enforce":{"put":{"summary":"Switch to enforce mode","description":"Immediately transition an autodrift profile to enforce mode.","operationId":"enforceAutoDriftProfile","tags":["Drift Detection","Result Profiles"],"parameters":[{"description":"Result profile ID to change to enforce mode.","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Profile switched to enforce mode."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Result profile not found."},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Result profile is not an autodrift profile."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}}}},"/resultprofiles/autodrift/{id}/restartgather":{"put":{"summary":"Restart gather period","description":"Restart/re-enter gather period on an autodrift profile.","operationId":"restartAutoDriftGather","tags":["Drift Detection","Result Profiles"],"parameters":[{"description":"Result profile ID to restart gather on.","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Gather configuration entered/restarted."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Result profile not found."},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Result profile is not an autodrift profile, or does not have a gather configuration defined, or there are no more model hosts on the profile."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}}}},"/resultprofiles/autodrift/{id}/schedule":{"delete":{"summary":"Remove schedule configuration","description":"Remove scan schedule configuration from an autodrift profile.","operationId":"deleteAutoDriftSchedule","tags":["Drift Detection","Result Profiles"],"parameters":[{"description":"Result profile ID to edit.","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Scan schedule configuration removed."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Result profile not found."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}}}},"/resultprofiles/autodrifttemplates":{"get":{"summary":"Get auto-drift templates","description":"Get recommended auto-drift result profile templates for various use cases.","operationId":"getAutoDriftTemplates","tags":["Drift Detection","Result Profiles"],"responses":{"200":{"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ProfileAutoDriftTemplate"}}}},"description":"Result profile details retrieved."}}}},"/resultprofiles/{id}":{"get":{"summary":"Get a result profile","description":"Get details of a result profile by ID.","operationId":"getProfile","parameters":[{"description":"Result profile ID to get.","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Profile"}}},"description":"Result profile details retrieved."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Result profile not found."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"tags":["Drift Detection","Result Profiles"]},"put":{"summary":"Update result profile","description":"Update the details and associations of a result profile. This replaces all existing associations on the result profile.","operationId":"updateProfile","deprecated":true,"parameters":[{"description":"Result profile ID to update.","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileUpdateRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Result profile details successfully updated."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Invalid result profile request (including malformed JSON, invalid modes, associated host IDs not found, etc.)."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"tags":["Drift Detection","Result Profiles"]},"delete":{"summary":"Delete a result profile","description":"Delete a single result profile by ID.","operationId":"deleteProfile","parameters":[{"description":"Result profile ID to delete.","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Result profile deleted."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Invalid delete request (e.g. non-integer ID in request)."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Profile not found."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"tags":["Drift Detection","Result Profiles"]}},"/resultprofiles/{id}/append":{"post":{"summary":"Append results to result profile","operationId":"appendProfile","description":"Append additional results from model host(s) and/or result IDs to an existing result profile.","parameters":[{"description":"Result profile ID to append results to.","in":"path","name":"id","required":true,"schema":{"type":"integer"}},{"description":"Enable safe mode - only add drift results for sandflies that are already enabled for drift in the result profile.","in":"query","name":"safemode","required":false,"schema":{"type":"boolean"}}],"requestBody":{"content":{"application/json":{"schema":{"description":"Host ID(s) and/or result ID(s) to snapshot and append to the result profile.","allOf":[{"$ref":"#/components/schemas/ProfileAppendRequest"}]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Result profile updated."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Invalid result profile append request."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"No eligible results were found on the Host ID(s) and/or result ID(s)."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"tags":["Drift Detection","Result Profiles"]}},"/resultprofiles/{id}/autoappend":{"post":{"summary":"Automatically append results to an autodrift profile","operationId":"autoappendProfile","description":"Append all current results from the previously configured model hosts to an existing auto-drift profile.","parameters":[{"description":"Result profile ID to append results to. Must be a profile for which autodrift=true.","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoDriftAutoAppendRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Result profile updated."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Invalid result profile append request."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Result profile ID not found."},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"The autodrift profile no longer has any model hosts in the system."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"tags":["Drift Detection","Result Profiles"]}},"/resultprofiles/{id}/sandfly/{sandfly}":{"get":{"summary":"Get result profile sandfly results","description":"Get a list of results that are part of a result profile for a given sandfly.","operationId":"getProfileSandfly","tags":["Drift Detection","Result Profiles"],"parameters":[{"description":"Result profile ID to get.","in":"path","name":"id","required":true,"schema":{"type":"integer"}},{"description":"Sandfly name to get.","in":"path","name":"sandfly","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileSandflyResults"}}},"description":"Result profile details retrieved."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Bad request -- profile ID or sandfly name format invalid"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Result profile not found or sandfly not found in profile."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}}},"delete":{"summary":"Delete a sandfly from a result profile","description":"Delete all of the results for a sandfly on a result profile, removing enforcement of drift/whitelisting for the sandfly from the profile.","operationId":"deleteProfileSandfly","tags":["Drift Detection","Result Profiles"],"parameters":[{"description":"Result profile ID to delete from.","in":"path","name":"id","required":true,"schema":{"type":"integer"}},{"description":"Sandfly name to delete from profile.","in":"path","name":"sandfly","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Sandfly deleted from profile."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Profile or sandfly on profile not found."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}}}},"/resultprofiles/{id}/deletesandflies":{"post":{"summary":"Bulk delete sandflies from profile","description":"Bulk delete sandflies from a result profile.","operationId":"bulkDeleteProfileSandflies","tags":["Drift Detection","Result Profiles"],"parameters":[{"description":"Result profile ID to delete from.","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"description":"Sandfly names to delete from profile.","type":"object","required":["sandflies"],"properties":{"sandflies":{"type":"array","items":{"type":"string","description":"Sandfly name to delete."}}}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Sandfly deleted from profile."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Invalid request."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}}}},"/resultprofiles/{id}/sandfly/{sandfly}/{hash}":{"delete":{"summary":"Delete result hash from result profile.","description":"Delete a specific result hash from a sandfly on a result profile.","operationId":"deleteProfileResult","tags":["Drift Detection","Result Profiles"],"parameters":[{"description":"Result profile ID to delete from.","in":"path","name":"id","required":true,"schema":{"type":"integer"}},{"description":"Sandfly name to delete result from.","in":"path","name":"sandfly","required":true,"schema":{"type":"string"}},{"description":"Result hash to delete. May be a blank string, indicating a drift entry for 'no results' on the sandfly.","in":"path","name":"hash","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Result(s) deleted from profile."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Bad request -- sandfly name format invalid or hash format invalid"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}}}},"/resultprofiles/{id}/sandfly/{sandfly}/deleteresults":{"post":{"summary":"Bulk delete results from profile","description":"Bulk delete results from a sandfly on a result profile.","operationId":"bulkDeleteProfileResults","tags":["Drift Detection","Result Profiles"],"parameters":[{"description":"Result profile ID to delete from.","in":"path","name":"id","required":true,"schema":{"type":"integer"}},{"description":"Sandfly name to delete results from.","in":"path","name":"sandfly","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"description":"Result hashes to delete from sandfly on profile.","type":"object","required":["hashes"],"properties":{"hashes":{"type":"array","items":{"type":"string","description":"Hash (or empty string, in the case of 'no results' drift results) to delete."}}}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Results deleted from profile."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Invalid request."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}}}},"/resultprofiles/host/{host_id}":{"get":{"summary":"Get result profiles for host","description":"Get summary of all result profiles that apply to this host ID.","operationId":"getProfilesForHost","parameters":[{"description":"Host to retrieve. Accepts a host_id or host_sequence_id.","in":"path","name":"host_id","required":true,"schema":{"oneOf":[{"title":"host_id","format":"string","type":"string"},{"title":"host_sequence_id","format":"string","type":"integer"}]}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"description":"List of result profiles.","type":"array","items":{"$ref":"#/components/schemas/ProfileForHost"}},"total":{"description":"Total number of result profiles.","type":"integer"}},"required":["data","total"]}}},"description":"Result profile list retrieved."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Host not found."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"tags":["Drift Detection","Result Profiles"]}},"/resultprofiles/export":{"post":{"operationId":"exportProfiles","description":"Export selected result profiles for backup or to move to another system.","summary":"Export result profiles","tags":["Drift Detection","Result Profiles"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfilesIDList"}}},"description":"Result profile IDs to export.","required":true},"responses":{"200":{"description":"Exported data","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}}}}},"/resultprofiles/import":{"post":{"operationId":"importProfiles","description":"Import selected result profiles from backup.","summary":"Import result profiles","tags":["Drift Detection","Result Profiles"],"parameters":[{"description":"If true, deletes old tag and host associations when replacing an existing result profile before importing the associations saved in the backup that is being imported. Otherwise, merge the associations currently on the server with those in the backup being uploaded. Default value is false.","in":"query","name":"replaceAssociations","required":false,"schema":{"type":"boolean"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"Profiles imported","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"default":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}}}}},"/resultprofiles/pause/":{"put":{"summary":"Bulk pause result profiles","operationId":"bulkPauseProfiles","description":"Pause result profiles in bulk, preventing them from creating drift alerts or whitelisting incoming results.","tags":["Drift Detection","Result Profiles"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfilesIDList"}}},"description":"List of result profile IDs to pause.","required":true},"responses":{"200":{"content":{},"description":"Result profiles paused."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}}}},"/resultprofiles/unpause/":{"put":{"summary":"Bulk unpause result profiles","operationId":"bulkunPauseProfiles","description":"Unpause result profiles in bulk.","tags":["Drift Detection","Result Profiles"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfilesIDList"}}},"description":"List of result profile IDs to unpause.","required":true},"responses":{"200":{"content":{},"description":"Result profiles unpaused."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}}}},"/resultprofiles/pause/{id}":{"put":{"summary":"Pause result profile","operationId":"pauseProfile","description":"Pause a result profile, preventing it from creating drift alerts or whitelisting incoming results.","tags":["Drift Detection","Result Profiles"],"parameters":[{"description":"Result profile ID to pause.","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{},"description":"Result profile paused"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Result profile not found"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}}}},"/resultprofiles/unpause/{id}":{"put":{"summary":"Unpause result profile","operationId":"unpauseProfile","description":"Unause a result profile.","tags":["Drift Detection","Result Profiles"],"parameters":[{"description":"Result profile ID to unpause.","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{},"description":"Result profile unpaused"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Result profile not found"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}}}},"/resultprofilesDelete":{"post":{"summary":"Delete result profiles","operationId":"deleteProfiles","description":"Bulk delete result profiles with a list of result profile IDs.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfilesIDList"}}},"description":"Result profile IDs to delete.","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Result profiles successfully deleted."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Invalid result profiles delete request."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"tags":["Drift Detection","Result Profiles"]}},"/resultprofileresult/{id}":{"get":{"summary":"Get result profile result","description":"Get result JSON for a result profile result ID.","operationId":"getProfileResultJSON","tags":["Drift Detection","Result Profiles"],"parameters":[{"description":"Result profile result ID to get.","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","required":["result"],"properties":{"result":{"type":"object","additionalProperties":true,"description":"Result JSON"}}}}},"description":"Result found."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Result ID is not an integer."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Result not found."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}}}},"/resultsummary/host/{host_id}":{"get":{"description":"Gets results grouped by sandfly for a particular host.","operationId":"getHostResultSummary","parameters":[{"description":"host to retrieve results for. Accepts a host_id or host_sequence_id.","in":"path","name":"host_id","required":true,"schema":{"oneOf":[{"title":"host_id","format":"string","type":"string"},{"title":"host_sequence_id","format":"string","type":"integer"}]}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResultsSummaryHost"}}},"description":"Result information retrieved"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error with get request."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Host not found."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Get host result summary","tags":["Results"]}},"/resultsummary/sandfly/{sandfly_name}":{"get":{"description":"Gets results grouped by host for a particular sandfly.","operationId":"getSandflyResultSummary","parameters":[{"description":"sandfly to retrieve results for.","in":"path","name":"sandfly_name","required":true,"schema":{"format":"string","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResultsSummarySandfly"}}},"description":"Result information retrieved"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error with get request."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Host not found."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Get sandfly result summary","tags":["Results"]}},"/sandflies":{"get":{"description":"Gets all of the registered sandflies.","operationId":"getSandflies","parameters":[{"description":"Returns flattened summary view of all sandflies.","in":"query","name":"summary","required":false,"schema":{"type":"boolean"}},{"description":"Excludes template sandflies from the result list.","in":"query","name":"noTemplates","required":false,"schema":{"type":"boolean"}},{"description":"Only includes sandflies with at least one result in the database.","in":"query","name":"resultsOnly","required":false,"schema":{"type":"boolean"}},{"description":"Only includes sandflies that can be included in schedules.","in":"query","name":"schedulable","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"items":{"oneOf":[{"$ref":"#/components/schemas/Sandfly"},{"$ref":"#/components/schemas/SandflySummary"}]},"type":"array"}},"type":"object"}}},"description":"Sandfly information retrieved"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error getting sandflies."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"No sandflies found."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Get all registered sandflies","tags":["Sandflies"]},"post":{"description":"Adds a custom sandfly.","operationId":"addSandfly","parameters":[{"description":"Will allow existing sandflies with the same name to be overwritten.","in":"query","name":"upload","required":false,"schema":{"type":"boolean"}}],"requestBody":{"content":{"application/json":{"schema":{"description":"Sandflies to add.","type":"object","additionalProperties":{"$ref":"#/components/schemas/SandflyCustom"}}}},"description":"Custom Sandfly json object to insert","required":true},"responses":{"201":{"content":{},"description":"Added"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Add custom sandfly","tags":["Sandflies"]},"put":{"description":"Updates a custom sandfly.","operationId":"updateSandfly","requestBody":{"content":{"application/json":{"schema":{"description":"Sandflies to update.","type":"object","additionalProperties":{"$ref":"#/components/schemas/SandflyCustom"}}}},"description":"Custom Sandfly json object to update.","required":true},"responses":{"201":{"content":{},"description":"Updated"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Update custom sandfly","tags":["Sandflies"]}},"/sandflies/activate":{"put":{"description":"Activates all sandflies passed into the body as bulk operation.","operationId":"activateSandflies","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SandflyList"}}},"description":"List of sandflies to activate.","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Sandflies activated."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error with activate request."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Activate sandflies in bulk","tags":["Sandflies"]}},"/sandflies/backup":{"get":{"description":"This displays all registered custom sandflies as a big JSON object for backup purposes.","operationId":"backupSandflies","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SandflyBackup"}}},"description":"Custom Sandfly information retrieved"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error getting custom sandflies."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"No custom sandflies found."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Backup all custom sandflies","tags":["Sandflies"]}},"/sandflies/deactivate":{"put":{"description":"Deactivates all sandflies passed into the body as bulk operation.","operationId":"deactivateSandflies","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SandflyList"}}},"description":"List of sandflies to deactivate.","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Sandflies deactivated."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error with deactivate request."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Deactivate sandflies in bulk","tags":["Sandflies"]}},"/sandflies/name":{"delete":{"description":"Deletes a custom sandfly entry by name.","operationId":"deleteSandflies","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SandflyList"}}},"description":"List of sandflies to delete.","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Custom sandflies entry deleted."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error deleting custom sandfly entries."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Delete custom sandflies","tags":["Sandflies"]}},"/sandflies/name/{sandfly_name}":{"delete":{"description":"Deletes a custom sandfly entry.","operationId":"deleteSandfly","parameters":[{"description":"sandfly name to delete","in":"path","name":"sandfly_name","required":true,"schema":{"format":"string","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Custom sandfly entry deleted."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error deleting custom sandfly entry."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Delete custom sandfly","tags":["Sandflies"]},"get":{"description":"Gets a sandfly with the supplied name.","operationId":"getSandfly","parameters":[{"description":"Sandfly name to retrieve","in":"path","name":"sandfly_name","required":true,"schema":{"format":"string","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Sandfly"}]}}},"description":"Sandfly information retrieved"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error getting sandfly."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Sandfly name not found."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Get sandfly","tags":["Sandflies"]}},"/sandflies/name/{sandfly_name}/activate":{"put":{"description":"Activates a sandfly by name.","operationId":"activateSandfly","parameters":[{"description":"sandfly name to activate.","in":"path","name":"sandfly_name","required":true,"schema":{"format":"string","type":"string"}}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Activated sandfly."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error activating sandfly."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Sandfly name not found to activate."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Activate sandfly","tags":["Sandflies"]}},"/sandflies/name/{sandfly_name}/deactivate":{"put":{"description":"Deactivates a sandfly by name.","operationId":"deactivateSandfly","parameters":[{"description":"sandfly name to deactivate.","in":"path","name":"sandfly_name","required":true,"schema":{"format":"string","type":"string"}}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Deactivated sandfly."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error deactivating sandfly."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Sandfly name not found to deactivate."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Deactivate sandfly","tags":["Sandflies"]}},"/sandflies/reload_all":{"post":{"description":"Reloads all of the sandflies in server's sandfly directory to their default settings.","operationId":"reloadSandflies","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Sandfly"}}},"description":"Reloading sandlflies and adding them to DB as active for scanning."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error inserting sandflies."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Reload all sandflies to default","tags":["Sandflies"]}},"/sandflies/response/{sandfly_name}":{"put":{"description":"Updates the system sandfly response options.","operationId":"updateResponse","parameters":[{"description":"sandfly name to update.","in":"path","name":"sandfly_name","required":true,"schema":{"format":"string","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SandflyResponse"}}},"description":"Response options in sandfly to update.","required":true},"responses":{"201":{"content":{},"description":"Updated"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Update system sandfly response options","tags":["Sandflies"]}},"/savedviews/{namespace}/{name}":{"delete":{"description":"Deletes a single custom grid view, for a specific data grid, for the current user.","summary":"Delete custom view","operationId":"deleteView","parameters":[{"description":"namespace of grid","in":"path","name":"namespace","required":true,"schema":{"format":"string","type":"string"}},{"description":"name of view","in":"path","name":"name","required":true,"schema":{"format":"string","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/StandardResponse"}],"type":"object"}}},"description":"OK"}},"tags":["SavedViews"]}},"/scan":{"post":{"description":"Scan remote hosts with host_id list and sandfly list.","operationId":"startScan","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanManual"}}},"description":"Hosts to scan and sandfly list to use in scan.","required":true},"responses":{"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Scan accepted for processing."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"An error happened with supplied host_ids or sandfly list."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"A licensing violation occurred."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Scan remote hosts","tags":["Scan"]}},"/scan/adhoc":{"post":{"description":"Scan remote hosts on an ad hoc basis with supplied key and sandflies.","operationId":"startAdhocScan","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanAdhoc"}}},"description":"Ad hoc scan JSON.","required":true},"responses":{"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Remote scan accepted for processing."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"A required parameter was not found or other error happened."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"A licensing violation occurred."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Scan remote hosts - ad hoc","tags":["Scan"]}},"/schedule":{"delete":{"description":"Deletes all schedule_ids passed into the body as a bulk operation. Schedules that don't exist will be ignored without error; schedules that are of type result_profile_gather will not be deleted, but any current trickle run will be canceled.","operationId":"deleteSchedules","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduleIds"}}},"description":"List of schedule_ids to delete.","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Schedule(s) deleted"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error with delete request."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Delete schedules in bulk","tags":["Schedule"]},"get":{"description":"Gets everything that is scheduled.","operationId":"getSchedules","responses":{"200":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ScrollingResponse"}],"properties":{"data":{"description":"List of schedules","type":"array","items":{"$ref":"#/components/schemas/ScheduleSummary"}}},"required":["data"],"type":"object"}}},"description":"Schedule retrieved"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Schedule not found."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Get all schedules","tags":["Schedule"]},"post":{"description":"Adds a scheduled scan.","operationId":"addSchedule","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduleAdd"}}},"description":"Schedule json object to insert.","required":true},"responses":{"201":{"content":{},"description":"Added"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Add a scan schedule","tags":["Schedule"]}},"/schedule/run/{schedule_name}":{"post":{"description":"Manually runs a schedule.","operationId":"runSchedule","parameters":[{"description":"schedule name to run","in":"path","name":"schedule_name","required":true,"schema":{"format":"string","type":"string"}},{"name":"mode","in":"query","description":"Execution mode: 'immediate' (default) or 'trickle'. Only applicable to scan schedules; discover schedules are always run in immediate mode.","required":false,"schema":{"type":"string","enum":["immediate","trickle"],"default":"immediate"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Schedule run started."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Requested schedule name not found."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Run scheduled scan now","tags":["Schedule"]}},"/schedule/pause/":{"put":{"description":"Deactivates (pauses) schedules by ID.","operationId":"pauseSchedules","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduleIds"}}},"description":"List of schedule_ids to deactivate.","required":true},"responses":{"200":{"content":{},"description":"Schedules deactivated"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Deactivate schedules","tags":["Schedule"]}},"/schedule/unpause/":{"put":{"description":"Activates (unpauses) schedules by ID.","operationId":"unpauseSchedules","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduleIds"}}},"description":"List of schedule_ids to activate.","required":true},"responses":{"200":{"content":{},"description":"Schedules activated"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Activate schedules","tags":["Schedule"]}},"/schedule/pause/{schedule_name}":{"put":{"description":"Deactivates (pauses) a schedule.","operationId":"pauseSchedule","parameters":[{"description":"schedule name to deactivate","in":"path","name":"schedule_name","required":true,"schema":{"format":"string","type":"string"}}],"responses":{"200":{"content":{},"description":"Schedule deactivated"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Deactivate schedule","tags":["Schedule"]}},"/schedule/unpause/{schedule_name}":{"put":{"description":"Activates (unpauses) a schedule.","operationId":"resumeSchedule","parameters":[{"description":"schedule name to activate","in":"path","name":"schedule_name","required":true,"schema":{"format":"string","type":"string"}}],"responses":{"200":{"content":{},"description":"Schedule activated"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Activate schedule","tags":["Schedule"]}},"/schedule/{schedule_name}":{"delete":{"description":"Deletes a schedule by schedule_name. Only schedules of type scan and discover can be deleted, result_profile_gather schedules can only be removed by editing or deleting the related result profile.","operationId":"deleteSchedule","parameters":[{"description":"schedule_name to delete","in":"path","name":"schedule_name","required":true,"schema":{"format":"string","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Schedule deleted."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error deleting schedule."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Cannot delete a schedule of type result_profile_gather."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Delete schedule","tags":["Schedule"]},"get":{"description":"Gets a schedule by schedule_name","operationId":"getSchedule","parameters":[{"description":"schedule name to retrieve","in":"path","name":"schedule_name","required":true,"schema":{"format":"string","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Schedule"}}},"description":"Schedule retrieved."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error deleting schedule."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Get schedule","tags":["Schedule"]},"put":{"description":"Updates a scheduled scan.","operationId":"updateSchedule","parameters":[{"description":"schedule name to update","in":"path","name":"schedule_name","required":true,"schema":{"format":"string","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduleUpdate"}}},"description":"Schedule json object to update.","required":true},"responses":{"200":{"content":{},"description":"Updated"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Update scheduled scan","tags":["Schedule"]}},"/schedule/{schedule_name}/abort":{"put":{"summary":"Abort schedule run","description":"Abort an active schedule run, preventing additional hosts from being added to the scan queue during this run.Note that this only prevents new hosts from being added to the scan queue, it does not affect scans that have already begun.","operationId":"abortSchedule","tags":["Schedule"],"parameters":[{"description":"schedule name to abort","in":"path","name":"schedule_name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Schedule run aborted. Note that this API call always returns 200, regardless of if the schedule exists or is currently running."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}}}},"/sshhunter/graph/{type}/{id}":{"get":{"description":"Get graph of relationships between SSH public keys, hosts, and users from SSH Hunter.","operationId":"getSshGraph","parameters":[{"description":"Type of entity of the root graph node","in":"path","name":"type","required":true,"schema":{"$ref":"#/components/schemas/SshMode"}},{"description":"The ID of the entity of the root graph node","in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"The type of graph structure to return","in":"query","name":"structure","schema":{"default":"nested","enum":["nested","flat"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"object","required":["graph_nodes"],"properties":{"graph_nodes":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/SshGraphNode"}}}}}}}},"description":"SSH node graph retrieved."},"402":{"description":"Product license does not allow SSH Hunter features."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Get SSH Hunter graph nodes","tags":["SSH Hunter"]}},"/sshhunter/hosts":{"get":{"deprecated":true,"description":"Get list of hosts with SSH public keys from SSH Hunter. Deprecated in favor of `GET /v4/hosts?summary=true&...` which now includes all of the same data.","operationId":"getSshHosts","parameters":[{"description":"If present, restricts the host list data to the specific key ID.","in":"query","name":"key","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ScrollingResponse"}],"properties":{"data":{"properties":{"hosts":{"description":"List of hosts","items":{"$ref":"#/components/schemas/SshHostSummary"},"type":"array"}},"required":["hosts"],"type":"object"}},"required":["data"],"type":"object"}}},"description":"SSH host list retrieved."},"402":{"description":"Product license does not allow SSH Hunter features."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Get hosts with SSH public keys","tags":["SSH Hunter"]}},"/sshhunter/hosts/{host_id}":{"get":{"deprecated":true,"description":"Get details of a host with SSH public keys from SSH Hunter. Deprecated in favor of `GET /v4/hostsrollup/{host_id}`, which includes all of the same data.","operationId":"getSshHost","parameters":[{"description":"ID of host to retrieve","in":"path","name":"host_id","required":true,"schema":{"oneOf":[{"title":"host_id","format":"string","type":"string"},{"title":"host_sequence_id","format":"string","type":"integer"}]}},{"description":"If present, restricts the host list data to the specific key ID.","in":"query","name":"key","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/SshHostWithZones"}}}}},"description":"SSH host details retrieved."},"402":{"description":"Product license does not allow SSH Hunter features."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Get SSH public key details for a host","tags":["SSH Hunter"]}},"/sshhunter/key":{"post":{"description":"Add SSH public keys.","summary":"Add SSH keys","tags":["SSH Hunter"],"operationId":"addSshKeys","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SshKeysAdd"}}},"description":"Host data to use to scan for and input new hosts.","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"SSH keys added or updated."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Invalid request."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}}}},"/sshhunter/key/{id}":{"get":{"description":"Get details of an SSH public key from SSH Hunter.","operationId":"getSshKey","parameters":[{"description":"ID of key to retrieve","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SshKey"}}},"description":"SSH key details retrieved."},"402":{"description":"Product license does not allow SSH Hunter features."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Get SSH public key details","tags":["SSH Hunter"]}},"/sshhunter/key/tags":{"put":{"description":"Bulk update tags on SSH public keys.","summary":"Bulk tag SSH keys","operationId":"bulkTagSSHKeys","parameters":[{"description":"operation - add or remove the requested tags","in":"query","name":"operation","required":true,"schema":{"$ref":"#/components/schemas/BulkTagOperation"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SSHBulkTag"}}},"description":"Parameters to list the key IDs and tags.","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Bulk tag operation completed successfully."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error with request"},"402":{"description":"Product license does not allow SSH Hunter features."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"tags":["SSH Hunter"]}},"/sshhunter/key/{id}/tags":{"put":{"description":"Set tags on an SSH public key.","summary":"Tag SSH key","operationId":"tagSSHKey","parameters":[{"description":"ID of key to modify","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["key_tags"],"properties":{"key_tags":{"description":"List of tags to set on the key, or an empty list to clear tags. All existing tags will be replaced.","$ref":"#/components/schemas/SshKeyTags"}}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Tag operation completed successfully."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error with request"},"402":{"description":"Product license does not allow SSH Hunter features."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"tags":["SSH Hunter"]}},"/sshhunter/hosttags":{"post":{"operationId":"getSSHKeysHostTags","description":"For the set of requested keys, get the hosts tags for the hosts the keys were found on. The result object will contain an entry for each key in the input key list that exists in the database. Keys that don't exist will be ignored.","summary":"Get SSH keys host tags","tags":["SSH Hunter"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["key_ids"],"properties":{"key_ids":{"type":"array","description":"List of key IDs to retrieve.","items":{"type":"integer","description":"SSH ID."}}}}}}},"responses":{"200":{"description":"SSH key host tags retrieved.","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/SshKeyHostTagSummary"}}}}},"400":{"description":"Invalid input JSON","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"default":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}}}}},"/sshhunter/keyhosttags":{"post":{"operationId":"getSSHHostsAndTagsForKeys","description":"For the requested list of SSH key IDs, returns a list of all hosts with those keys and the host tags on each host.","summary":"Get hosts+tags for SSH keys","tags":["SSH Hunter"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["key_ids"],"properties":{"key_ids":{"type":"array","description":"List of key IDs to retrieve.","items":{"type":"integer","description":"SSH ID."}}}}}}},"responses":{"200":{"description":"Hosts and host tags retrieved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SshHostsAndTags"}}}},"400":{"description":"Invalid input JSON","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"default":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}}}}},"/sshhunter/hostkeytags":{"post":{"operationId":"getSSHKeysAndTagsForHosts","description":"For the requested list of Host IDs, returns a list of all keys on those hosts and the key tags on each key.","summary":"Get keys+tags for hosts","tags":["SSH Hunter"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["host_ids"],"properties":{"host_ids":{"type":"array","description":"List of host IDs to retrieve.","items":{"type":"integer","description":"Host sequence ID."}}}}}}},"responses":{"200":{"description":"Hosts and host tags retrieved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SshKeysAndTags"}}}},"400":{"description":"Invalid input JSON","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"default":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}}}}},"/sshhunter/summary":{"get":{"operationId":"getSshSummary","description":"Get list of SSH public keys from SSH Hunter.","parameters":[{"description":"number of results per page","in":"query","name":"size","required":false,"schema":{"type":"integer"}},{"description":"page number of results to retrieve","in":"query","name":"page","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ScrollingResponse"}],"properties":{"data":{"description":"List of SSH Keys","items":{"$ref":"#/components/schemas/SshKeySummary"},"type":"array"}},"required":["data"],"type":"object"}}},"description":"SSH key summary retrieved."},"402":{"description":"Product license does not allow SSH Hunter features."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Get SSH public keys","tags":["SSH Hunter"]}},"/sshhunter/users":{"get":{"description":"Get list of users with SSH public keys from SSH Hunter.","operationId":"getSshUsers","parameters":[{"description":"If present, restricts the user list data to the specific key ID.","in":"query","name":"key","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ScrollingResponse"}],"properties":{"data":{"type":"object","properties":{"users":{"description":"List of SSH Users","items":{"$ref":"#/components/schemas/SshUserSummary"},"type":"array"}}}},"required":["data"],"type":"object"}}},"description":"SSH user list retrieved."},"402":{"description":"Product license does not allow SSH Hunter features."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Get users with SSH public keys","tags":["SSH Hunter"]}},"/sshhunter/users/{username}":{"get":{"description":"Get details of a user with SSH public keys from SSH Hunter.","operationId":"getSshUser","parameters":[{"description":"username to retrieve","in":"path","name":"username","required":true,"schema":{"type":"string"}},{"description":"If present, restricts the user data to the specific key ID.","in":"query","name":"key","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/SshUser"}}}}},"description":"SSH user details retrieved."},"402":{"description":"Product license does not allow SSH Hunter features."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Get SSH public key details for a user","tags":["SSH Hunter"]}},"/sshhunter/zones":{"get":{"summary":"Get SSH security zones","description":"Get summary list of all SSH security zones.","operationId":"getSSHZones","responses":{"200":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/TotalledResponse"}],"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/SSHZoneSummary"}}}}}},"description":"SSH security zone information retrieved"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"tags":["SSH Zones"]},"post":{"operationId":"createSSHZone","summary":"Create SSH security zone","description":"Create a new SSH security zone.","tags":["SSH Zones"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SSHZoneConfiguration"}}},"description":"SSH security zone to add.","required":true},"responses":{"201":{"description":"SSH security zone created.","content":{"application/json":{"schema":{"type":"integer","description":"The ID of the new SSH security zone."}}}},"400":{"description":"Invalid input or SSH security zone failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"409":{"description":"A zone with this name already exists.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"default":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}}}}},"/sshhunter/zones/{id}":{"get":{"summary":"Get an SSH security zone","description":"Get details of an SSH security zone by ID.","operationId":"getSshZone","parameters":[{"description":"SSH security zone ID to get.","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SSHZone"}}},"description":"SSH security zone details retrieved."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"SSH security zone not found."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"tags":["SSH Zones"]},"put":{"operationId":"updateSSHZone","summary":"Update SSH security zone","description":"Update an SSH security zone.","tags":["SSH Zones"],"parameters":[{"description":"SSH security zone ID to update","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SSHZoneConfiguration"}}},"description":"SSH security zone to replace existing zone with.","required":true},"responses":{"200":{"description":"SSH security zone updated.","content":{"application/json":{"schema":{"type":"integer","description":"The ID of the updated SSH security zone."}}}},"400":{"description":"Invalid input or SSH security zone failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"404":{"description":"The SSH security zone ID doesn't exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"409":{"description":"A zone with this name already exists.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"default":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}}}},"delete":{"operationId":"deleteSSHZone","summary":"Delete SSH security zone","description":"Delete an SSH security zone.","tags":["SSH Zones"],"parameters":[{"description":"SSH security zone ID to delete","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"SSH security zone deleted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}},"default":{"description":"Unexpected error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}}}}}},"/status":{"get":{"deprecated":true,"operationId":"getStatus","description":"Gets system status statistics.","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusSystem"}}},"description":"Status retrieved."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error getting system status."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Get system status statistics","tags":["Status"]}},"/status/nodes":{"get":{"description":"Gets node status statistics.","operationId":"getStatusByNodes","parameters":[{"name":"summary","in":"query","required":false,"description":"If true, omit the individual task details.","schema":{"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusByNodes"}}},"description":"Status retrieved."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error getting node status."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Get node status statistics","tags":["Status"]}},"/status/tags":{"post":{"deprecated":true,"description":"Gets system status by tags over time.","operationId":"getStatusByTag","requestBody":{"content":{"application/json":{"schema":{"properties":{"result_status":{"description":"Result status type of alert, pass or error (default is alert if none supplied).","$ref":"#/components/schemas/ResultStatus"}},"type":"object"}}},"description":"result_status","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"tags":{"description":"Dictionary of Tags","$ref":"#/components/schemas/StatusByTags"}},"required":["tags"],"type":"object"}}},"description":"Status by tags retrieved."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error getting system status."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Get system status by tags over time","tags":["Status"]}},"/tags/hosts":{"get":{"description":"Gets all of the host tags in a unique list format.","operationId":"getHostTags","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagSummary"}}},"description":"Host tags retrieved"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Hosts not found."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Get all host tags","tags":["Tags"]}},"/tags/sandflies":{"get":{"description":"Gets all of the sandfly tags in a unique list format.","operationId":"getSandflyTags","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagSummary"}}},"description":"Host tags retrieved"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Hosts not found."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Get all sandfly tags","tags":["Tags"]}},"/tags/sshkeys":{"get":{"description":"Gets all unique SSH key tags.","operationId":"getSshKeyTags","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagSummary"}}},"description":"SSH key tags retrieved"},"402":{"description":"Product license does not allow SSH Hunter features."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Get all SSH key tags","tags":["Tags"]}},"/tasks/all":{"delete":{"description":"Purge the server's knowledge of all outstanding tasks.","operationId":"purgeTaskQueues","summary":"Purge task queues","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Task queues purged."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"tags":["Status"]}},"/tasks/queues/names":{"get":{"description":"Gets the active queue names with node counts.","operationId":"getActiveTaskQueues","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskQueues"}}},"description":"Active queue names with node counts."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Get active queue names","tags":["Status"]}},"/threatfeeds":{"get":{"summary":"Get threat feeds","description":"Get a list of all threat feed configurations.","operationId":"getThreatfeeds","responses":{"200":{"description":"Threat feeds retrieved.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/TotalledResponse"}],"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ThreatFeed"}}}}}}},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"tags":["Threat Feeds"]},"post":{"summary":"Create threat feed","description":"Create a new threat feed configuration.","operationId":"addThreatfeed","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ThreatFeedEdit"}}}},"responses":{"201":{"content":{"application/json":{"schema":{"type":"integer","description":"The ID of the new threat feed."}}},"description":"Threat feed created."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Invalid request body."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"User is not permitted to perform this action."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"tags":["Threat Feeds"]}},"/threatfeeds/{id}":{"get":{"summary":"Get threat feed details","description":"Get details of a threat feed configuration.","operationId":"getThreatfeed","parameters":[{"description":"Threat feed ID to get.","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ThreatFeed"}}},"description":"Threat feed retrieved."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"User is not permitted to perform this action."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Threat feed not found."}},"tags":["Threat Feeds"]},"put":{"summary":"Update threat feed","description":"Change an existing threat feed configuration.","operationId":"updateThreatfeed","parameters":[{"description":"Threat feed ID to replace.","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ThreatFeedEdit"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"type":"integer","description":"The ID of the updated threat feed."}}},"description":"Threat feed updated."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Invalid request body."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"User is not permitted to perform this action."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Threat feed not found."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"tags":["Threat Feeds"]},"delete":{"summary":"Delete threat feed","description":"Delete a threat feed configuration.","operationId":"deleteThreatfeed","parameters":[{"description":"Threat feed ID to delete.","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Threat feed deleted."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Invalid delete request (e.g. non-integer ID in request)."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"User is not permitted to perform this action."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"tags":["Threat Feeds"]}},"/users":{"get":{"operationId":"getUsers","description":"Gets all of the users.","parameters":[{"$ref":"#/components/parameters/include_system"}],"responses":{"200":{"content":{"application/json":{"schema":{"required":["users"],"properties":{"users":{"description":"List of users","items":{"$ref":"#/components/schemas/User"},"type":"array"}},"type":"object"}}},"description":"Users retrieved."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error getting users."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Get all users","tags":["Users"]}},"/users/password/{username}":{"put":{"operationId":"updateUserPassword","description":"Updates the password of a user.","parameters":[{"description":"username to update password","in":"path","name":"username","required":true,"schema":{"format":"string","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPassword"}}},"description":"User json blob.","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"User password updated."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error updating user."},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Not allowed to set password for the requested user, or incorrect existing password when changing own password."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"User not found."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Update user password","tags":["Users"]}},"/users/{username}":{"delete":{"operationId":"deleteUser","description":"Deletes a user.","parameters":[{"description":"username to delete","in":"path","name":"username","required":true,"schema":{"format":"string","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"User deleted."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error deleting user."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Delete user","tags":["Users"]},"get":{"operationId":"getUser","description":"Gets a user by username.","parameters":[{"description":"username to get","in":"path","name":"username","required":true,"schema":{"format":"string","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/User"}}},"description":"User data."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error getting user."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Get user","tags":["Users"]},"post":{"operationId":"createUser","description":"Adds a user.","parameters":[{"description":"username to add","in":"path","name":"username","required":true,"schema":{"format":"string","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserAdd"}}},"description":"User json blob.","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"User added."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error adding user."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Add user","tags":["Users"]},"put":{"operationId":"updateUser","description":"Updates a user.","parameters":[{"description":"username to update","in":"path","name":"username","required":true,"schema":{"format":"string","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserUpdate"}}},"description":"User json blob.","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"User updated."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error updating user."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Update user","tags":["Users"]}},"/version":{"get":{"description":"Gets the version of the product.","operationId":"getSystemVersion","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Version"}}},"description":"Version"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"No results found"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Get version","tags":["Version"]}},"/whitelistrules":{"get":{"description":"Get all whitelist rules.","operationId":"getWhitelistRules","summary":"Get whitelist rules","parameters":[{"name":"tags","in":"query","required":false,"description":"An optional comma-separated list of case-insensitive host tags to filter the list of whitelists to only those that apply to *all* tags listed in this parameter.","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/TotalledResponse"}],"properties":{"data":{"description":"List of hosts","type":"array","items":{"$ref":"#/components/schemas/WhitelistRuleSummary"}}},"required":["data"],"type":"object"}}},"description":"Hosts with ignore whitelist retrieved"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"tags":["Whitelist"]},"post":{"operationId":"createWhitelistRule","description":"Add a whitelist rule.","parameters":[{"description":"allow this whitelist to be merged into an existing whitelist if the conditions are the same","in":"query","name":"allowmerge","schema":{"type":"boolean"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhitelistRuleConfig"}}},"description":"Whitelist rule config.","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Existing Whitelist rule updated. The response will include the ID of the existing whitelist that was updated based on merging this new whitelist request into an identical existing whitelist."},"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Whitelist rule created. If merge was allowed, there was no existing whitelist rule found to merge this rule into."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error adding whitelist rule."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Add Whitelist Rule","tags":["Whitelist"]}},"/whitelistrules/{whitelist_id}":{"get":{"description":"Get a whitelist rule by ID.","operationId":"getWhitelistRule","summary":"Get whitelist rule","parameters":[{"description":"whitelist ID to retrieve","in":"path","name":"whitelist_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhitelistRule"}}},"description":"Hosts with ignore whitelist retrieved"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"tags":["Whitelist"]},"put":{"operationId":"updateWhitelistRule","description":"Update a whitelist rule.","parameters":[{"description":"whitelist ID to update","in":"path","name":"whitelist_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","allOf":[{"$ref":"#/components/schemas/WhitelistRuleConfig"}],"required":["id"],"properties":{"id":{"type":"integer","description":"whitelist ID to update. ID in URL and ID in JSON must match."}}}}},"description":"Whitelist rule config.","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Existing Whitelist rule updated. The response will include the ID of the existing whitelist that was updated based on merging this new whitelist request into an identical existing whitelist."},"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Whitelist rule created. If merge was allowed, there was no existing whitelist rule found to merge this rule into."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error adding whitelist rule."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Update whitelist rule","tags":["Whitelist"]},"delete":{"operationId":"deleteWhitelistRule","description":"Delete a whitelist rule.","parameters":[{"description":"whitelist ID to delete","in":"path","name":"whitelist_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Whitelist rule deleted."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Error deleting whitelist rule."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Delete Whitelist Rule","tags":["Whitelist"]}},"/whitelistrules/activate/":{"put":{"description":"Activate whitelist rules by ID.","operationId":"activateWhitelistRules","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhitelistRuleIds"}}},"description":"List of whitelist_ids to activate.","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Whitelists activated"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Activate whitelist rules in bulk","tags":["Whitelist"]}},"/whitelistrules/deactivate/":{"put":{"description":"Deactivate whitelist rules by ID.","operationId":"deactivateWhitelistRules","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhitelistRuleIds"}}},"description":"List of whitelist_ids to deactivate.","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Whitelists deactivated"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Dectivate whitelist rules in bulk","tags":["Whitelist"]}},"/whitelistrules/activate/{whitelist_id}":{"put":{"description":"Activate a whitelist.","operationId":"activateWhitelistRule","parameters":[{"description":"whitelist ID to activate","in":"path","name":"whitelist_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Whitelist activated"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Activate whitelist","tags":["Whitelist"]}},"/whitelistrules/deactivate/{whitelist_id}":{"put":{"description":"Deactivate a whitelist.","operationId":"deactivateWhitelistRule","parameters":[{"description":"whitelist ID to deactivate","in":"path","name":"whitelist_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Whitelist deactivated"},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Deactivate whitelist","tags":["Whitelist"]}},"/whitelistrules/host/{host_id}":{"get":{"description":"Get all whitelist rules for a particular host.","operationId":"getHostWhitelistRules","summary":"Get whitelists for host","parameters":[{"description":"Host to retrieve. Accepts a host_id or host_sequence_id.","in":"path","name":"host_id","required":true,"schema":{"oneOf":[{"title":"host_id","format":"string","type":"string"},{"title":"host_sequence_id","format":"string","type":"integer"}]}}],"responses":{"200":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/TotalledResponse"}],"properties":{"data":{"description":"List of hosts","type":"array","items":{"$ref":"#/components/schemas/WhitelistRuleSummary"}}},"required":["data"],"type":"object"}}},"description":"Host with ignore whitelist retrieved"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Host not found."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"tags":["Whitelist"]}},"/whitelistrulesDelete":{"post":{"operationId":"deleteWhitelistRules","description":"Bulk deletes whitelist rules.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhitelistRulesDelete"}}},"description":"Whitelist rules delete config.","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Whitelists successfully deleted."},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Invalid whitelist rules delete request."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Delete Whitelist Rules","tags":["Whitelist"]}},"/debug/rotatejwtkey":{"post":{"description":"Generates a new JWT signing key and saves it to the database. This invalidates all existing user sessions, requiring users to log in again. The new key takes effect immediately.","operationId":"rotateJWTKey","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"JWT signing key rotated successfully."},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Failed to rotate JWT signing key."},"default":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardResponse"}}},"description":"Unexpected error"}},"summary":"Rotate JWT Signing Key","tags":["Debug"]}}},"components":{"parameters":{"summary":{"description":"Data returned in summary form. If true, only the most important data is returned in a flattened format. If false, all data is returned.","in":"query","name":"summary","required":false,"schema":{"type":"boolean"}},"include_system":{"description":"If true, data returned include system only data types typically not intended for end user use.","in":"query","name":"summary","required":false,"schema":{"type":"boolean"}}},"schemas":{"AuditLogEntry":{"required":["id","ip_addr","message","record_type","timestamp","username"],"properties":{"id":{"type":"string","description":"ID of this audit log entry."},"ip_addr":{"type":"string","description":"IP address of the source of the request that this log message pertains to."},"message":{"type":"string","description":"Audit log message."},"record_type":{"type":"string","description":"Type of entry."},"timestamp":{"type":"string","description":"Time the activity occurred."},"username":{"type":"string","description":"Username (or, if internally triggered by the Sandfly API service, '[system]') that triggered this event."}},"type":"object"},"AuthAccessRefreshToken":{"deprecated":true,"required":["access_token","access_token_data","access_token_expire_date","access_token_issue_date","llm","refresh_token","refresh_token_data","refresh_token_expire_date","refresh_token_issue_date","user","saved_views"],"properties":{"access_token":{"description":"Access token.","type":"string"},"access_token_data":{"$ref":"#/components/schemas/JWT","description":"Access JWT data decoded.","type":"object"},"access_token_expire_date":{"description":"Access token expire date.","type":"string"},"access_token_issue_date":{"description":"Access token issue date.","type":"string"},"llm":{"description":"Current LLM configuration","$ref":"#/components/schemas/LlmLoginInfo"},"refresh_token":{"description":"Refresh token.","type":"string"},"refresh_token_data":{"$ref":"#/components/schemas/JWT","description":"Refresh JWT data decoded.","type":"object"},"refresh_token_expire_date":{"description":"Refresh token expire date.","type":"string"},"refresh_token_issue_date":{"description":"Refresh token issue date.","type":"string"},"user":{"$ref":"#/components/schemas/User"},"saved_views":{"type":"array","items":{"$ref":"#/components/schemas/SavedView"}}},"type":"object"},"AuthAccessToken":{"properties":{"access_token":{"description":"Access token","type":"string"},"access_token_data":{"$ref":"#/components/schemas/JWT","description":"Access JWT data decoded.","type":"object"},"access_token_expire_date":{"description":"Access token expire date.","type":"string","format":"date-time"},"access_token_issue_date":{"description":"Access token issue date.","type":"string","format":"date-time"},"session_expiration_date":{"description":"Time after which session cannot be refreshed.","type":"string","format":"date-time"},"user":{"$ref":"#/components/schemas/User"},"license":{"$ref":"#/components/schemas/License"},"llm":{"description":"Current LLM configuration","$ref":"#/components/schemas/LlmLoginInfo"}},"type":"object"},"AuthLogin":{"properties":{"full_details":{"description":"Get full details of issued token.","type":"boolean"},"password":{"description":"Password string.","format":"password","type":"string"},"username":{"description":"Username string.","type":"string"}},"type":"object"},"AuthLoginRefresh":{"properties":{"full_details":{"description":"Get full details of issued token.","nullable":true,"type":"boolean"}},"type":"object"},"AuthLogout":{"type":"object"},"AutoDriftCreateRequest":{"type":"object","properties":{"name":{"type":"string","description":"The name of the auto-drift result profile."},"description":{"type":"string","description":"A description of the auto-drift result profile."},"user_note":{"type":"string","description":"A user-provided note to record in the profile's history log."},"scope":{"$ref":"#/components/schemas/ProfileAutoScope"},"model_hosts":{"description":"The hosts to use as the model (i.e. template) hosts for expected results.","$ref":"#/components/schemas/ProfileAutoHosts"},"covered_hosts":{"description":"The hosts that this profile should detect drift on (and optionally whitelist) after the results from the model host(s) are gathered.","$ref":"#/components/schemas/ProfileAutoHosts"},"gather_options":{"description":"When present, this profile will enter gather mode and run gather schedules as configured. If null, no gather schedule will be created and the profile will immediately enter enforcing mode.","nullable":true,"$ref":"#/components/schemas/ProfileGatherOptions"},"schedule_options":{"description":"When present, the new profile will automatically have a scan schedule associated with it that scans the covered hosts with the selected sandflies for drift detection. If null, no scan schedule will be created.","nullable":true,"$ref":"#/components/schemas/ProfileScheduleOptions"}},"required":["name","scope","model_hosts","covered_hosts","gather_options","schedule_options"]},"AutoDriftEditRequest":{"type":"object","properties":{"name":{"type":"string","description":"The name of the auto-drift result profile. If null or an empty string, the name will remain unchanged.","nullable":true},"description":{"type":"string","description":"A description of the auto-drift result profile. If null, will not change the existing description. If an empty string, will erase the existing description.","nullable":true},"user_note":{"type":"string","description":"A user-provided note to record in the profile's history log.","nullable":true},"scope":{"$ref":"#/components/schemas/ProfileAutoScope","nullable":true},"model_hosts":{"description":"The hosts to use as the model (i.e. template) hosts for expected results.","$ref":"#/components/schemas/ProfileAutoHosts","nullable":true},"covered_hosts":{"description":"The hosts that this profile should detect drift on (and optionally whitelist) after the results from the model host(s) are gathered.","$ref":"#/components/schemas/ProfileAutoHosts","nullable":true},"gather_options":{"description":"When present, this profile will enter gather mode and run gather schedules as configured. If null, no gather schedule will be created and the profile will immediately enter enforcing mode.","nullable":true,"$ref":"#/components/schemas/ProfileGatherOptions"},"schedule_options":{"description":"When present, the new profile will automatically have a scan schedule associated with it that scans the covered hosts with the selected sandflies for drift detection. If null, no scan schedule will be created.","nullable":true,"$ref":"#/components/schemas/ProfileScheduleOptions"}},"required":["name","scope","model_hosts","covered_hosts","gather_options","schedule_options"]},"AutoDriftAutoAppendRequest":{"type":"object","properties":{"user_note":{"type":"string","description":"User-provided descriptive note explaining the results that are being added. (Optional)"}}},"CredentialConfiguration":{"required":["credentials_type"],"description":"This is how we insert credentials for a target system. When inserted, they are encrypted and stored by the system. Also used by ad hoc scan for one time use credentials.","properties":{"credentials_type":{"$ref":"#/components/schemas/CredentialsType"},"external_ca_cert_b64":{"description":"If an external credential type, base64-encoded trusted root CA certificate for the credential provider service, if necessary.","type":"string"},"external_extra_data":{"description":"If an external credential type, extra data to provide to the credential provider service.","type":"string"},"external_unique_per_host":{"description":"If an external credential type, does the provider provide a unique credential per target host?","type":"boolean"},"external_url":{"description":"If an external credential type, the URL of the credential provider service.","type":"string"},"password":{"description":"This is the password we can use to login if using username credentials or needed for sudo.","type":"string"},"ssh_key_b64":{"description":"The ssh_key we can use to login that is base 64 encoded.","type":"string"},"ssh_key_certificate_b64":{"description":"The ssh_key_certificate if using SSH CA signed credentials.","type":"string"},"ssh_key_password":{"description":"This is the password used to decrypt the ssh_key if we have one.","type":"string"},"username":{"description":"This is the username we can use to login.","type":"string"},"ima_signing_key_b64":{"description":"Base64-encoded PKCS#1, PKCS#8, or encrypted PKCS#8 PEM-format RSA private key. If present on a credential, when the credential is used to connect to a host, Sandfly will add an IMA signature to the scanning binary on the target host using this private key.","type":"string"},"ima_signing_key_password":{"description":"If ima_signing_key_b64 contains an encrypted PKCS#8 private key, this password will be used to decrypt it. Do not set this property if ima_signing_key_b64 is empty.","type":"string"}},"type":"object"},"CredentialsDelete":{"properties":{"credential_ids":{"description":"List of credential_ids to delete.","items":{"type":"string"},"type":"array"}},"type":"object"},"CredentialsHostEncrypted":{"description":"This holds public key encrypted login credentials for target systems.","properties":{"credentials_data":{"description":"Encrypted credentials in base64 format for use by scanning nodes to authenticate to target.","type":"string"},"credentials_id":{"description":"The name of this encrypted credential","type":"string"},"credentials_type":{"$ref":"#/components/schemas/CredentialsType"},"external_ca_cert_b64":{"description":"If an external credential type, base64-encoded trusted root CA certificate for the credential provider service, if necessary.","type":"string"},"external_extra_data":{"description":"If an external credential type, extra data to provide to the credential provider service.","type":"string"},"external_unique_per_host":{"description":"If an external credential type, does the provider provide a unique credential per target host?","type":"boolean"},"external_url":{"description":"If an external credential type, the URL of the credential provider service.","type":"string"},"generated":{"description":"Indicates that this credential was generated by Sandfly.","type":"boolean"},"host_count":{"description":"The number of hosts in Sandfly assigned to this credential.","format":"int32","type":"integer"},"id":{"description":"The name of this encrypted credential","type":"string","deprecated":false},"public_key":{"description":"If this credential was generated by Sandfly, this is the public key to add to a host's authorized_keys file to allow Sandfly to connect with this credential.","type":"string"},"ima_key_present":{"description":"Indicates that this credential contains an IMA signing key and Sandfly will attempt to sign the scanning binary on target hosts that use this credential.","type":"boolean","readOnly":true}},"required":["id","credentials_id","credentials_type","credentials_data","generated","host_count"],"type":"object"},"CredentialsType":{"description":"Supported Credential Types.","type":"string","enum":["ssh_key","username","external","ssh_generate_ed25519","ssh_generate_rsa4096","ssh_generate_rsa8192"]},"DashboardData":{"type":"object","required":["period","hosts","results","alert_hosts","alert_hosts_count","ssh_zone_violations","ssh_zone_violations_count","ssh_zones_count","ssh_active_keys_count","ssh_active_users_count","ssh_active_hosts_count","new_ssh_keys","new_ssh_keys_count","host_distributions","host_kernels","tactics"],"properties":{"period":{"type":"object","required":["start_time","end_time"],"description":"Time period that time-sequence data covers (will always be -72 hours from now to now).","properties":{"start_time":{"type":"string","format":"date-time"},"end_time":{"type":"string","format":"date-time"}}},"hosts":{"type":"object","description":"Count of hosts in system.","required":["total","total_active","total_inactive"],"properties":{"total":{"type":"integer"},"total_active":{"type":"integer"},"total_inactive":{"type":"integer"}}},"results":{"required":["hourly"],"properties":{"hourly":{"required":["alert","pass","error","all"],"properties":{"alert":{"$ref":"#/components/schemas/StandardTimeBasedGraphData"},"pass":{"$ref":"#/components/schemas/StandardTimeBasedGraphData"},"error":{"$ref":"#/components/schemas/StandardTimeBasedGraphData"},"all":{"$ref":"#/components/schemas/StandardTimeBasedGraphData"}}}}},"alert_hosts":{"type":"array","description":"Top 5 hosts that have alerts.","items":{"$ref":"#/components/schemas/DashboardHostSummary"}},"alert_hosts_count":{"type":"integer","description":"Total number of hosts with alerts, including those listed in alert_hosts."},"ssh_zone_violations":{"type":"array","description":"Top 5 SSH security zones that have violations.","items":{"$ref":"#/components/schemas/SSHZoneSummary"}},"ssh_zone_violations_count":{"type":"integer","description":"Total number of SSH security zones that have violations."},"ssh_zones_count":{"type":"integer","description":"Total number of SSH security zones configured."},"ssh_active_keys_count":{"type":"integer","description":"Total number of unique active SSH keys across all hosts."},"ssh_active_users_count":{"type":"integer","description":"Total number of unique usernames with active SSH keys across all hosts."},"ssh_active_hosts_count":{"type":"integer","description":"Total number of hosts with active SSH keys."},"new_ssh_keys":{"type":"array","description":"Newest 5 SSH keys that were first seen in the last 72 hours.","items":{"$ref":"#/components/schemas/DashboardSSHKeySummary"}},"new_ssh_keys_count":{"type":"integer","description":"Total number of new SSH keys in the last 72 hours, including those listed in new_ssh_keys."},"host_distributions":{"type":"array","description":"Count of OS distributions across hosts.","items":{"type":"object","required":["name","count"],"properties":{"name":{"type":"string","description":"Distribution name"},"count":{"type":"integer","description":"Number of hosts with this distribution."}}}},"host_kernels":{"type":"array","description":"Count of kernel versions across hosts.","items":{"type":"object","required":["name","count"],"properties":{"name":{"type":"string","description":"Kernel name"},"count":{"type":"integer","description":"Number of hosts with this kernel."}}}},"tactics":{"type":"array","description":"Count of alerts for each MITRE ATT&CK tactic seen over the last 72 hours.","items":{"type":"object","required":["name","count"],"properties":{"name":{"type":"string","description":"Tactic tag name"},"count":{"type":"integer","description":"Number of alerts."}}}}}},"DashboardHostSummary":{"type":"object","required":["host_id","host_sequence_id","os_info_os_release_pretty_name","os_info_node","tags","alerts"],"properties":{"host_id":{"type":"string","description":"Host ID."},"host_sequence_id":{"type":"integer","description":"Host sequence ID."},"os_info_os_release_pretty_name":{"type":"string","description":"Host OS distribution release name."},"os_info_node":{"type":"string","description":"Host node name."},"tags":{"type":"array","items":{"type":"string"},"description":"Host tags."},"alerts":{"type":"integer","description":"Host alert count."}}},"DashboardSSHKeySummary":{"type":"object","properties":{"id":{"type":"integer","description":"ID of the SSH key."},"friendly_name":{"type":"string","description":"Friendly name of the SSH key."},"first_seen":{"type":"string","format":"date-time","description":"Date and time this key was first seen across the network."},"hosts":{"type":"array","description":"Up to two hosts that this new key has appeared on.","items":{"$ref":"#/components/schemas/DashboardHostSummary"}},"more_hosts":{"type":"boolean","description":"Is this key on more than just the hosts listed in the hosts property?"}}},"DeletedData":{"enum":["[deleted]"]},"EmailAlertsConfig":{"required":["mail_password"],"allOf":[{"$ref":"#/components/schemas/EmailAlert"}],"properties":{"mail_password":{"description":"Password used with this email entry.","type":"string"}},"type":"object"},"EmailAlert":{"type":"object","required":["name","email_recipients","email_sender","mail_server","mail_port","mail_username"],"properties":{"name":{"type":"string","description":"Human friendly name for the email alert."},"email_recipients":{"type":"array","description":"Emails of those who will receive this alert.","uniqueItems":true,"items":{"type":"string","format":"email"}},"email_sender":{"type":"string","format":"email","description":"Email that will appear as the sender of the alert."},"mail_server":{"type":"string","format":"uri","description":"hostname or IP address for the SMTP server."},"mail_port":{"type":"integer","description":"SMTP server port","format":"int32","default":587},"mail_username":{"type":"string","description":"Username credential for the mail server."}}},"EmailUpdate":{"properties":{"email_recipients":{"description":"Array format of single or multiple e-mail addresses where alerts should be sent.","items":{"type":"string","format":"email"},"type":"array"},"email_sender":{"description":"email address of the person sending the e-mail.","type":"string","format":"email"},"mail_password":{"description":"Password used with this email entry. If this property is not present or is null, the existing password is not changed.","type":"string"},"mail_port":{"description":"SMTP server port","type":"integer"},"mail_server":{"description":"hostname or IP address for the SMTP server.","type":"string"},"mail_username":{"description":"Username used with this email entry. If this property is not present or is null, the existing username is not changed.","type":"string"}},"required":["email_recipients","email_sender","mail_server","mail_port"],"type":"object"},"ErrorLog":{"properties":{"data":{"description":"Error log entries.","oneOf":[{"items":{"$ref":"#/components/schemas/ErrorLogEntry"},"type":"array"},{"items":{"$ref":"#/components/schemas/ErrorLogSummaryEntry"},"type":"array"}]},"total":{"description":"Total number of records found.","format":"int32","type":"integer"}},"type":"object"},"ErrorLogEntry":{"type":"object","required":["id","data","header","run_id","host_id","ip_addr","hostname","error_msg","queue_name"],"properties":{"id":{"type":"string","description":"Error log entry ID."},"data":{"type":"string","description":"Error data"},"header":{"type":"object","description":"Information about the target host that a scan error pertains to","required":["ssh","tags","ad_hoc","run_id","status","host_id","ip_addr","end_time","hostname","ssh_port","jump_hosts","queue_name","start_time","status_msg","manual_scan","credentials_id","verify_host_key"],"properties":{"ssh":{"type":"object"},"tags":{"type":"array","items":{"type":"string"},"description":"Host tags."},"ad_hoc":{"type":"boolean","description":"Whether or not this was an ad-hoc scan request."},"run_id":{"type":"string","description":"Scan run ID."},"status":{"type":"string","description":"Overall result status."},"host_id":{"type":"string","description":"Target host ID."},"ip_addr":{"type":"string","description":"Target host IP address."},"end_time":{"type":"string","description":"Time scan attempt ended."},"hostname":{"type":"string","description":"Target host address."},"ssh_port":{"type":"integer","description":"Target host SSH port number."},"jump_hosts":{"$ref":"#/components/schemas/LinkedJumpHosts"},"queue_name":{"type":"string","description":"Scan queue name."},"start_time":{"type":"string","description":"Start time of scan attempt."},"status_msg":{"type":"string","description":"Scan status."},"manual_scan":{"type":"boolean","description":"Indicates if this was a manual (as opposed to scheduled) scan."},"credentials_id":{"type":"string","description":"Credential used to attempt to log on to target host."},"verify_host_key":{"type":"boolean","description":"Indicates if SSH host key verification was requested."}}},"run_id":{"type":"string","description":"Run ID of this scan."},"host_id":{"type":"string","description":"Host ID of target host."},"ip_addr":{"type":"string","nullable":true,"description":"Target host IP address, if known."},"hostname":{"type":"string","description":"Target host address."},"error_msg":{"type":"string","description":"Error message."},"queue_name":{"type":"string","description":"Scan queue name."}}},"ErrorLogSummaryEntry":{"type":"object","required":["id","run_id","host_id","ip_addr","hostname","start_time","error_msg","queue_name"],"properties":{"id":{"type":"string","description":"Error entry ID."},"run_id":{"type":"string","description":"Run ID of scan."},"start_time":{"type":"string","description":"Scan start time."},"host_id":{"type":"string","description":"Host ID of target host."},"ip_addr":{"type":"string","nullable":true,"description":"IP address of target host, if known."},"hostname":{"type":"string","description":"Target host address."},"error_msg":{"type":"string","description":"Error message."},"queue_name":{"type":"string","nullable":true,"description":"Scan queue name."}}},"Host":{"description":"Host object containing what was discovered about a host as it was added to the system inventory.","properties":{"active":{"title":"Host.active","description":"Is this host active (valid credentials and login)?","type":"boolean"},"authentication_status":{"title":"Host.authentication_status","description":"What is the state of the authentication? ok, failed, error","type":"string"},"credentials_id":{"title":"Host.credentials_id","description":"credentials_id to use for this host.","type":"string"},"data":{"properties":{"explanation":{"title":"Data.explanation","type":"string"},"os":{"$ref":"#/components/schemas/Os","title":"Data.os"}},"required":["explanation","os"],"additionalProperties":false,"title":"Data","type":"object"},"date_first_seen":{"description":"Date first saw this host.","title":"Host.date_first_seen","nullable":true,"type":"string"},"date_last_seen":{"title":"Host.date_last_seen","description":"Last time we saw this host.","nullable":true,"type":"string"},"date_last_scan":{"title":"Host.date_last_scan","description":"Last time we successfully connected to and authenticated to this host.","nullable":true,"type":"string"},"override_directory":{"title":"Host.override_directory","description":"Directory to run scan from instead of the node configuration values.","type":"string"},"first_seen_ip_addr":{"title":"Host.first_seen_ip_addr","description":"First IP address we saw for this host.","nullable":true,"type":"string"},"host_id":{"title":"Host.host_id","description":"A unique ID for this host (ssh key fingerprint), or the host_name if we saw no SSH.","type":"string"},"host_sequence_id":{"title":"Host.host_sequence_id","description":"Alternative integer ID assigned to this host.","type":"integer"},"hostname":{"title":"Host.hostname","description":"Hostname of host.","type":"string"},"id":{"title":"Host.id","description":"Alias for host_id.","type":"string","deprecated":false},"jump_hosts":{"items":{"type":"string","title":"Host.jump_hosts.[]"},"title":"Host.jump_hosts","description":"List of jump_host names for this host.","type":"array"},"last_seen_ip_addr":{"title":"Host.last_seen_ip_addr","description":"Last IP address we saw for this host.","nullable":true,"type":"string"},"last_scan_duration_seconds":{"title":"Last scan duration (seconds)","description":"Duration of last scan operation, in seconds.","type":"integer","nullable":true},"os":{"title":"Host.os","description":"Operating system data collected.","$ref":"#/components/schemas/Os","nullable":true},"queue_name":{"title":"Host.queue_name","description":"Queue name.","type":"string"},"results":{"properties":{"alert":{"type":"integer","description":"Total alert results on this host.","minimum":0},"error":{"type":"integer","description":"Total error results on this host.","minimum":0},"pass":{"type":"integer","description":"Total pass results on this host.","minimum":0},"total":{"type":"integer","description":"Total results on this host.","minimum":0}},"required":["alert","error","pass","total"],"additionalProperties":false,"title":"Results","type":"object"},"run_id":{"title":"Host.run_id","type":"string"},"ssh":{"properties":{"banner":{"title":"Host.ssh.banner","type":"string"},"keys":{"additionalProperties":{"properties":{"bits":{"title":"Key.bits","type":"integer"},"fingerprint":{"title":"Key.fingerprint","type":"string"},"public_key":{"title":"Key.public_key","type":"string"},"type":{"title":"Key.type","type":"string"}},"required":["bits","fingerprint","public_key","type"],"additionalProperties":false,"title":"Key","type":"object"},"title":"Host.ssh.keys","type":"object"},"negotiated_key_type":{"title":"Host.ssh.negotiated_key_type","type":"string"},"port":{"title":"Host.ssh.port","type":"integer"}},"required":["banner","keys","negotiated_key_type","port"],"additionalProperties":false,"title":"Host.ssh","type":"object"},"ssh_key_fingerprint":{"title":"Host.ssh_key_fingerprint","description":"SSH fingerprint of remote host.","nullable":true,"type":"string"},"ssh_port":{"title":"Host.ssh_port","description":"SSH port for host.","type":"integer","default":22},"tags":{"items":{"title":"Host.tags.[]","type":"string"},"title":"Host.tags","description":"A list of tags for this host.","type":"array"},"verify_host_key":{"title":"Host.verify_host_key","description":"Should we verify the host key?","type":"boolean","default":false},"version":{"title":"Host.version","description":"Version type for this record.","type":"integer"}},"required":["active","authentication_status","credentials_id","data","date_first_seen","date_last_seen","date_last_scan","first_seen_ip_addr","host_id","host_sequence_id","hostname","id","jump_hosts","last_seen_ip_addr","os","override_directory","queue_name","results","run_id","ssh","ssh_key_fingerprint","ssh_port","tags","verify_host_key","version"],"additionalProperties":false,"title":"Host","type":"object"},"Hosts":{"type":"array","items":{"$ref":"#/components/schemas/Host"},"description":"Array of host objects."},"HostBulkTag":{"type":"object","properties":{"host_ids":{"description":"List of host IDs to perform the bulk tagging operation on.","items":{"type":"string"},"type":"array"},"host_sequence_ids":{"description":"List of host sequence IDs to perform the bulk tagging operation on.","items":{"type":"integer"},"type":"array"},"tags":{"description":"List of tags to add or remove to the hosts.","items":{"type":"string"},"type":"array"}}},"BulkTagOperation":{"type":"string","enum":["add","remove"]},"HostConfiguration":{"discriminator":{"propertyName":"_mode","mapping":{"iplist_new":"#/components/schemas/HostConfigurationIplistNewCredentials","iplist_existing":"#/components/schemas/HostConfigurationIplist","netblock_new":"#/components/schemas/HostConfigurationNetblockNewCredentials","netblock_existing":"#/components/schemas/HostConfigurationNetblock"}},"oneOf":[{"$ref":"#/components/schemas/HostConfigurationIplistNewCredentials"},{"$ref":"#/components/schemas/HostConfigurationIplist"},{"$ref":"#/components/schemas/HostConfigurationNetblockNewCredentials"},{"$ref":"#/components/schemas/HostConfigurationNetblock"}]},"HostConfigurationCommon":{"type":"object","required":["_mode"],"properties":{"_mode":{"$ref":"#/components/schemas/HostConfigurationMode"},"credentials_create":{"deprecated":true,"type":"string","enum":["new","existing"],"default":"existing","example":"new"}}},"HostConfigurationMode":{"description":"A discriminator to determine which fields can be safely ignored. If left blank, the API will attempt to determine the correct configuration based on data present.","type":"string","enum":["iplist_new","iplist_existing","netblock_new","netblock_existing"],"example":"iplist_new"},"HostConfigurationIplistNewCredentials":{"allOf":[{"$ref":"#/components/schemas/HostConfigurationCommon"},{"$ref":"#/components/schemas/HostConnectionList"},{"$ref":"#/components/schemas/HostConfigurationNewCredential"},{"$ref":"#/components/schemas/HostConnectionCommon"}]},"HostConfigurationIplist":{"required":["credentials_id"],"allOf":[{"$ref":"#/components/schemas/HostConnectionList"},{"$ref":"#/components/schemas/LinkedCredential"},{"$ref":"#/components/schemas/HostConfigurationCommon"},{"$ref":"#/components/schemas/HostConnectionCommon"}]},"HostConfigurationNetblockNewCredentials":{"allOf":[{"$ref":"#/components/schemas/HostConnectionRange"},{"$ref":"#/components/schemas/HostConfigurationNewCredential"},{"$ref":"#/components/schemas/HostConfigurationCommon"},{"$ref":"#/components/schemas/HostConnectionCommon"}]},"HostConfigurationNewCredential":{"type":"object","required":["credentials_name"],"properties":{"credentials_name":{"description":"Unique name of credential","nullable":false,"type":"string"}},"allOf":[{"$ref":"#/components/schemas/CredentialConfiguration"}]},"HostConfigurationNetblock":{"required":["credentials_id"],"allOf":[{"$ref":"#/components/schemas/HostConnectionRange"},{"$ref":"#/components/schemas/LinkedCredential"},{"$ref":"#/components/schemas/HostConfigurationCommon"},{"$ref":"#/components/schemas/HostConnectionCommon"}]},"HostConnectionCommon":{"properties":{"ssh_port":{"default":22,"description":"SSH port to use for scanning.","format":"int32","type":"integer"},"tags":{"$ref":"#/components/schemas/HostTags"},"jump_hosts":{"$ref":"#/components/schemas/LinkedJumpHosts"},"queue_name":{"description":"Queue name to use for this host.","type":"string","default":"main","example":"main"},"override_directory":{"description":"Directory to run scan from instead of the node configuration values. An empty string means no override. For the behavior of an empty string in the node config file (where an empty string means use the home directory), enter\"~\" here.","type":"string"},"verify_host_key":{"default":false,"description":"Verify host key when connecting to a host.","type":"boolean","example":true},"ssh_host_keys":{"additionalProperties":{"$ref":"#/components/schemas/SshHostKeyConfig"},"description":"Expected SSH host public keys of the hosts to add. If a host key isn't provided for a host, any key will be accepted.","type":"object"}},"type":"object"},"HostConnectionList":{"properties":{"ip_list":{"description":"List of IP addresses to scan.","items":{"type":"string"},"type":"array"}},"required":["ip_list"],"type":"object"},"HostConnectionRange":{"properties":{"ip_range":{"description":"IP ranges to scan.","items":{"type":"string"},"type":"array"}},"required":["ip_range"],"type":"object"},"HostConnectionCredentialMode":{"type":"string","enum":["existing","new"]},"HostConnectionType":{"type":"string","enum":["ip_list","ip_range"]},"HostInfoCommon":{"type":"object","required":["result_id","result_sequence_id","result_status","containerized","result_sandfly"],"properties":{"result_id":{"type":"string","description":"Result ID of the result this information came from."},"result_sequence_id":{"type":"integer","format":"int64","description":"Result Sequence ID of the result this information came from."},"result_status":{"$ref":"#/components/schemas/ResultStatus"},"containerized":{"type":"boolean","description":"Indicates if this information came from a container."},"result_sandfly":{"type":"string","description":"Name of sandfly associated with this result."}}},"HostInfoResponse":{"type":"object","required":["results_date","source_sandflies","status"],"properties":{"results_date":{"type":"string","format":"date-time","description":"If data is present, the date as of which the data is current (e.g. the most recent scan date of the relevant recon sandfly on this host).","nullable":true},"source_sandflies":{"type":"array","description":"The list of sandflies that this data is derived from.","items":{"type":"string","description":"data source sandfly name"}},"status":{"type":"string","description":"Status of the data source. 'ok' indicates the sandflies are active and results are present for the host, even if no results are used for this API response after filtering. 'missing_results' means that even though the necessary sandflies are active, there were no results in the database for one or more of the necessary sandflies (if there hasn't been a recent scan of the host, the results may have expired and been deleted). 'sandfly_inactive' means one or more sandflies that provide data for this API call are inactive.","enum":["ok","missing_results","sandfly_inactive"]}}},"HostInfoKernelModule":{"type":"object","allOf":[{"$ref":"#/components/schemas/HostInfoCommon"}],"required":["module_name","module_path","module_state","module_taints"],"properties":{"module_name":{"type":"string","description":"Kernel module name."},"module_path":{"type":"string","description":"Kernel module file path."},"module_state":{"type":"string","description":"Kernel module state."},"module_taints":{"type":"string","description":"Kernel module kernel taints list."}}},"HostInfoLastlog":{"type":"object","allOf":[{"$ref":"#/components/schemas/HostInfoCommon"}],"required":["user_id","user_name","last_login_date","last_login_terminal","last_login_hostname"],"properties":{"user_id":{"type":"integer","description":"UID of the user in the lastlog entry."},"user_name":{"type":"string","description":"The username of the user in the lastlog entry."},"last_login_date":{"type":"string","format":"date-time","description":"Last login date of this user as indicated in the lastlog entry."},"last_login_terminal":{"type":"string","description":"Last login terminal of this user as indicated in the lastlog entry."},"last_login_hostname":{"type":"string","description":"Last login hostname of this user as indicated in the lastlog entry."}}},"HostInfoListener":{"type":"object","allOf":[{"$ref":"#/components/schemas/HostInfoCommon"}],"required":["process_id","process_name","process_parent_id","process_path","process_user","network_type","network_listen_port","network_listen_address"],"properties":{"process_id":{"type":"integer","description":"PID of the process bound to the listening port."},"process_name":{"type":"string","description":"Name of the process bound to the listening port."},"process_parent_id":{"type":"integer","description":"Parent process ID."},"process_path":{"type":"string","description":"Path of the process binary."},"process_user":{"type":"string","description":"Username of the process owner."},"network_type":{"type":"string","description":"Network type the listener is bound to.","enum":["tcp","tcp6","udp","udp6","icmp","icmp6","raw","raw6","sctp"]},"network_listen_port":{"type":"integer","description":"The port number of the listener."},"network_listen_address":{"type":"string","description":"The address the process is listening on."}}},"HostInfoLoggedInUser":{"type":"object","allOf":[{"$ref":"#/components/schemas/HostInfoCommon"}],"required":["user_name","login_date","login_device","login_hostname","login_ipaddress","login_process_id"],"properties":{"user_name":{"type":"string","description":"The username of the logged in user."},"login_date":{"type":"string","format":"date-time","description":"Time this user logged in."},"login_device":{"type":"string","description":"Login session device."},"login_hostname":{"type":"string","description":"The remote hostname of this login session."},"login_ipaddress":{"type":"string","description":"The remote IP address of this login session."},"login_process_id":{"type":"integer","description":"The login session process ID."}}},"HostInfoProcess":{"type":"object","allOf":[{"$ref":"#/components/schemas/HostInfoCommon"}],"required":["process_id","process_parent_id","process_name","process_cmd","process_cmdline","process_deleted","process_created","process_user","process_group"],"properties":{"process_id":{"type":"integer","description":"Process ID."},"process_parent_id":{"type":"integer","description":"Parent process ID."},"process_name":{"type":"string","description":"Process name."},"process_cmd":{"type":"string","description":"Process command."},"process_cmdline":{"type":"string","description":"Process command line."},"process_deleted":{"type":"boolean","description":"Indicates if the process binary was deleted from disk after the process started."},"process_created":{"type":"string","format":"date-time","description":"Time the process was created."},"process_user":{"type":"string","description":"Process user. If the user ID doesn't map to a username, the process UID is used."},"process_group":{"type":"string","description":"Process group. If the group ID doesn't map to a group name, the process GID is used."}}},"HostInfoScheduledTask":{"type":"object","allOf":[{"$ref":"#/components/schemas/HostInfoCommon"}],"required":["task_type","task_user","task_schedule","task_name","task_command"],"properties":{"task_type":{"type":"string","description":"The scheduler this task is from.","enum":["cron","at","systemd","systemd-user"]},"task_user":{"type":"string","description":"The username (or user ID) that runs this task."},"task_schedule":{"type":"string","description":"The schedule specification for this task."},"task_name":{"type":"string","description":"Name of this task, if the scheduler supports such a concept."},"task_command":{"type":"string","description":"The command(s) this task executes."}}},"HostInfoService":{"type":"object","allOf":[{"$ref":"#/components/schemas/HostInfoCommon"}],"required":["service_scope","service_name","service_state","service_sub_state","service_commands","service_owner_uid"],"properties":{"service_scope":{"type":"string","description":"Whether this is a system or user systemd unit.","enum":["system","user"]},"service_name":{"type":"string","description":"The service unit name."},"service_state":{"type":"string","description":"The service unit state."},"service_sub_state":{"type":"string","description":"The service unit substate."},"service_commands":{"type":"string","description":"The command(s) this service executes."},"service_owner_uid":{"type":"integer","description":"The owner of this service (e.g. 0 for system services and the user ID for user services)."}}},"HostInfoUser":{"type":"object","allOf":[{"$ref":"#/components/schemas/HostInfoCommon"}],"required":["user_id","user_name","group_id","group_name","group_membership","user_home_dir","user_gecos","user_password_locked","user_password_disabled","user_password_empty","user_password_present","user_password_type","user_ssh_authorized_keys_count","user_ssh_authorized_keys_duplicates"],"properties":{"user_id":{"type":"integer","description":"The UID of the user."},"user_name":{"type":"string","description":"The username of the user."},"group_id":{"type":"integer","description":"The primary GID of the user."},"group_name":{"type":"string","description":"The name of the primary group of the user."},"group_membership":{"type":"array","items":{"type":"string"},"description":"A list of additional group memberships for the user."},"user_home_dir":{"type":"string","description":"The home directory of the user."},"user_gecos":{"type":"string","description":"The GECOS field associated with the user."},"user_password_locked":{"type":"boolean","example":false,"description":"Indicates if the user's password is locked."},"user_password_disabled":{"type":"boolean","example":false,"description":"Indicates if the user's password is disabled."},"user_password_empty":{"type":"boolean","example":false,"description":"Indicates if the user's password is empty."},"user_password_present":{"type":"boolean","example":true,"description":"Indicates if the user's password is present."},"user_password_type":{"type":"string","description":"The hash algorithm used for the user's password."},"user_ssh_authorized_keys_count":{"type":"integer","description":"The number of SSH authorized keys for the user."},"user_ssh_authorized_keys_duplicates":{"type":"boolean","description":"Indicates if there are duplicate SSH authorized keys for the user."}}},"HostRollup":{"type":"object","required":["host","ssh_summary","whitelists_count","result_profiles_count","recon_status"],"properties":{"host":{"$ref":"#/components/schemas/Host"},"ssh_summary":{"type":"object","allOf":[{"$ref":"#/components/schemas/SshHostSummarySSHInfo"},{"$ref":"#/components/schemas/SshHostSummaryUsers"}],"properties":{"zones":{"type":"array","items":{"$ref":"#/components/schemas/SSHZoneSummary"}}}},"whitelists_count":{"type":"integer","description":"Number of whitelists applied to this host."},"result_profiles_count":{"type":"integer","description":"Number of result profiles applied to this host."},"recon_status":{"type":"object","description":"Status of the recon sandflies that contribute to host information displayed in the UI. Each property is a sandfly name, and the value is 'ok' if the sandfly is active, 'missing_results' means that even though the sandfly is active, there were no results in the database for this host (if there hasn't been a recent scan of the host, the results may have expired and been deleted), and 'sandfly_inactive' means the sandfly is inactive.","additionalProperties":{"$ref":"#/components/schemas/SandflyStatus"}}}},"HostSummary":{"type":"object","description":"Host summary record.","required":["id","host_id","host_sequence_id","hostname","active","credentials_id","authentication_status","date_first_seen","date_last_seen","first_seen_ip_addr","last_seen_ip_addr","jump_hosts","os_hardware_cpu_bugs","os_hardware_cpu_cores","os_hardware_cpu_mhz","os_hardware_cpu_model_name","os_hardware_dmi_bios_vendor","os_hardware_dmi_chassis_vendor","os_hardware_dmi_product_family","os_hardware_dmi_product_name","os_hardware_dmi_sys_vendor","os_info_arch","os_info_machine","os_info_node","os_info_os_release_id","os_info_os_release_name","os_info_os_release_version","os_info_os_release_pretty_name","os_info_os_release_version_codename","os_info_release","os_info_uptime_date","os_info_uptime_days","os_performance_cpu_fifteen_min","os_performance_cpu_fifteen_min_core_adjusted","os_performance_cpu_five_min","os_performance_cpu_five_min_core_adjusted","os_performance_cpu_one_min","os_performance_cpu_one_min_core_adjusted","override_directory","queue_name","ssh_key_fingerprint","ssh_port","verify_host_key","os_info_os_release_version_id","tags","version","results_alert","results_error","results_pass","results_total"],"properties":{"active":{"type":"boolean","description":"Is this host active (valid credentials and login)?"},"authentication_status":{"type":"string","description":"What is the state of the authentication? ok, failed, error"},"hostname":{"type":"string","description":"Hostname of host.","format":"int32"},"ssh_port":{"type":"integer","description":"SSH port for host."},"credentials_id":{"type":"string","description":"credentials_id to use for this host."},"jump_hosts":{"type":"array","description":"List of jump_host names for this host.","items":{"type":"string"}},"id":{"type":"string","description":"Alias for host_id.","deprecated":true},"host_id":{"type":"string","description":"Unique ID of the host this summary record is for."},"host_sequence_id":{"title":"Host.host_sequence_id","description":"Alternative integer ID assigned to this host.","type":"integer"},"date_first_seen":{"type":"string","description":"Date and time this host was first seen.","format":"date-time","nullable":true},"date_last_seen":{"type":"string","description":"Date and time this host was last seen.","format":"date-time","nullable":true},"first_seen_ip_addr":{"type":"string","description":"IP address this host was first seen on.","nullable":true},"last_seen_ip_addr":{"type":"string","description":"IP address this host was last seen on.","nullable":true},"os_hardware_cpu_bugs":{"type":"array","description":"List of known CPU bugs.","nullable":true,"items":{"type":"string"}},"os_hardware_cpu_cores":{"type":"integer","description":"Number of CPU cores on this host."},"os_hardware_cpu_mhz":{"type":"number","description":"CPU speed in MHz."},"os_hardware_cpu_model_name":{"type":"string","description":"CPU model name."},"os_hardware_dmi_bios_vendor":{"type":"string","description":"DMI BIOS vendor."},"os_hardware_dmi_chassis_vendor":{"type":"string","description":"DMI chassis vendor."},"os_hardware_dmi_product_family":{"type":"string","description":"DMI product family."},"os_hardware_dmi_product_name":{"type":"string","description":"DMI product name."},"os_hardware_dmi_sys_vendor":{"type":"string","description":"DMI system vendor."},"os_info_arch":{"type":"string","description":"OS architecture."},"os_info_machine":{"type":"string","description":"OS machine."},"os_info_node":{"type":"string","description":"OS node."},"os_info_os_release_id":{"type":"string","description":"OS release ID."},"os_info_os_release_name":{"type":"string","description":"OS release name."},"os_info_os_release_version":{"type":"string","description":"OS release version."},"os_info_os_release_pretty_name":{"type":"string","description":"Human friendly OS release name."},"os_info_os_release_version_codename":{"type":"string","description":"OS release version codename."},"os_info_release":{"type":"string","description":"OS release."},"os_info_uptime_date":{"type":"string","description":"OS uptime date."},"os_info_uptime_days":{"type":"integer","description":"OS uptime days."},"os_performance_cpu_fifteen_min":{"type":"number","description":"OS performance CPU fifteen min."},"os_performance_cpu_fifteen_min_core_adjusted":{"type":"number","description":"OS performance CPU fifteen min core adjusted."},"os_performance_cpu_five_min":{"type":"number","description":"OS performance CPU five min."},"os_performance_cpu_five_min_core_adjusted":{"type":"number","description":"OS performance CPU five min core adjusted."},"os_performance_cpu_one_min":{"type":"number","description":"OS performance CPU one min."},"os_performance_cpu_one_min_core_adjusted":{"type":"number","description":"OS performance CPU one min core adjusted."},"override_directory":{"type":"string","description":"Directory to run scan from instead of the node configuration values."},"queue_name":{"type":"string","description":"Queue name."},"run_id":{"type":"string","description":"Unique Run ID used to get this information."},"ssh_key_fingerprint":{"type":"string","description":"SSH fingerprint of remote host.","nullable":true},"tags":{"type":"array","description":"A list of tags for this host.","items":{"type":"string"}},"version":{"type":"integer","description":"Version type for this record.","format":"int32"},"verify_host_key":{"type":"boolean","description":"Verify host key.","default":false},"results_alert":{"type":"integer","description":"Total alert results on this host.","minimum":0},"results_error":{"type":"integer","description":"Total error results on this host.","minimum":0},"results_pass":{"type":"integer","description":"Total pass results on this host.","minimum":0},"results_total":{"type":"integer","description":"Total results on this host.","minimum":0}}},"HostSummaryRollup":{"allOf":[{"$ref":"#/components/schemas/HostSummary"},{"$ref":"#/components/schemas/SshHostSummarySSHInfo"}]},"HostSummaryRollups":{"type":"array","items":{"$ref":"#/components/schemas/HostSummaryRollup"},"description":"Array of host summary rollups."},"HostSnapshot":{"type":"object","required":["report_time","host_counts","uptime_stats","distros","kernels","architectures","missing_hosts","credential","uptimes","host_tags"],"properties":{"report_time":{"type":"string","format":"date-time","description":"Time when report was generated."},"host_counts":{"type":"object","required":["active","missing","inactive"],"properties":{"active":{"type":"integer","description":"Current number of active hosts."},"missing":{"type":"integer","description":"Current number of missing hosts."},"inactive":{"type":"integer","description":"Current number of inactive hosts."}}},"uptime_stats":{"type":"object","description":"Host uptime statistics.","required":["min","q1","median","q3","max"],"properties":{"min":{"type":"number","description":"Lowest uptime of all hosts in Sandfly."},"q1":{"type":"number","description":"1st quartile uptime of all hosts in Sandfly."},"median":{"type":"number","description":"Median uptime of all hosts in Sandfly."},"q3":{"type":"number","description":"3rd quartile uptime of all hosts in Sandfly."},"max":{"type":"number","description":"Maximum uptime of all hosts in Sandfly."}}},"distros":{"type":"array","items":{"type":"object","required":["name","count"],"description":"List of Linux distributions used by hosts in Sandfly.","properties":{"name":{"type":"string","description":"Linux distribution name."},"count":{"type":"integer","description":"Number of hosts using this distribution."}}}},"kernels":{"type":"array","items":{"type":"object","required":["name","count"],"description":"List of Linux kernel versions used by hosts in Sandfly.","properties":{"name":{"type":"string","description":"Linux kernel version string."},"count":{"type":"integer","description":"Number of hosts using this kernel."}}}},"architectures":{"type":"array","items":{"type":"object","required":["name","count"],"description":"List of processor architectures used by hosts in Sandfly.","properties":{"name":{"type":"string","description":"Architecture name."},"count":{"type":"integer","description":"Number of hosts with this architecture."}}}},"missing_hosts":{"type":"array","description":"Hosts known to Sandfly that have not had a successful scan recently.","items":{"type":"object","required":["host_id","host_sequence_id","last_seen","target_address","node_name","last_seen_ip","kernel","distro","tags","uptime_days"],"properties":{"host_id":{"type":"string","description":"Host ID."},"host_sequence_id":{"type":"integer","description":"Database-assigned host sequence number."},"last_seen":{"type":"string","description":"Date this host was last seen."},"target_address":{"type":"string","description":"Address of target host."},"node_name":{"type":"string","description":"OS-reported hostname."},"last_seen_ip":{"type":"string","description":"Last IP address used to connect to host, if known."},"kernel":{"type":"string","description":"Host kernel version string."},"distro":{"type":"string","description":"Host distribution name."},"tags":{"type":"array","items":{"type":"string"},"description":"Host tags."},"uptime_days":{"type":"integer","description":"Host uptime, in days."}}}},"credential":{"type":"array","description":"Credentials used to connect to hosts.","items":{"type":"object","required":["name","count"],"properties":{"name":{"type":"string","description":"Credential name."},"count":{"type":"integer","description":"Number of hosts in Sandfly configured to use this credential."}}}},"uptimes":{"type":"array","items":{"type":"object","required":["host_id","host_sequence_id","last_seen","target_address","node_name","last_seen_ip","kernel","distro","tags","uptime_days"],"properties":{"host_id":{"type":"string","description":"Host ID."},"host_sequence_id":{"type":"integer","description":"Database-assigned host sequence number."},"last_seen":{"type":"string","description":"Date this host was last seen."},"target_address":{"type":"string","description":"Address of target host."},"node_name":{"type":"string","description":"OS-reported hostname."},"last_seen_ip":{"type":"string","description":"Last IP address used to connect to host, if known."},"kernel":{"type":"string","description":"Host kernel version string."},"distro":{"type":"string","description":"Host distribution name."},"tags":{"type":"array","items":{"type":"string"},"description":"Host tags."},"uptime_days":{"type":"integer","description":"Host uptime, in days."}}}},"host_tags":{"type":"array","description":"Host tags","items":{"type":"object","required":["name","count"],"properties":{"name":{"type":"string","description":"Tag name"},"count":{"type":"integer","description":"Number of hosts with this tag."}}}}}},"HostTags":{"items":{"type":"string"},"type":"array","default":[],"example":["my_custom_host_tag"]},"HostUpdate":{"properties":{"active":{"description":"Activate/deactivate host boolean.","nullable":true,"type":"boolean"},"credentials_id":{"description":"Credential ID to use with this host.","nullable":true,"type":"string"},"jump_hosts":{"description":"Jump hosts to update on host.","items":{"type":"string"},"nullable":true,"type":"array"},"override_directory":{"description":"Directory to run scan from instead of the node configuration values.","type":"string","nullable":true},"ssh_port":{"description":"SSH port to use with host.","format":"int32","nullable":true,"type":"integer"},"queue_name":{"description":"Queue (node) name to use to connect to this host.","type":"string","nullable":true},"tags":{"description":"Tags to update on host.","$ref":"#/components/schemas/HostTags","nullable":true},"verify_host_key":{"description":"If true, the SSH key of the host will be recorded during the Host Add operation, then on future scans Sandfly will not authenticate to the host if the host key changes.","type":"boolean","nullable":true}},"type":"object"},"JumpHost":{"required":["id","name","hostname","ssh_port","credentials_id"],"properties":{"credentials_id":{"description":"credentials_id name to use to authenticate to this jump host.","type":"string"},"hostname":{"description":"Jump host hostname.","type":"string"},"ssh_port":{"description":"SSH port to use for this jump host.","format":"int32","type":"integer"},"name":{"description":"Unique identifier.","type":"string"},"id":{"description":"Alias for name.","type":"string","deprecated":false}},"type":"object"},"JumpHostAdd":{"properties":{"credentials_id":{"description":"credentials_id name to use to authenticate to this jump host.","type":"string"},"hostname":{"description":"Jump host hostname.","type":"string"},"ssh_port":{"description":"SSH port to use for this jump_host.","format":"int32","type":"integer"}},"type":"object"},"JumpHostsDelete":{"properties":{"jump_hosts":{"description":"List of jump_hosts to delete.","items":{"type":"string"},"type":"array"}},"type":"object"},"JumpHostUpdate":{"properties":{"credentials_id":{"description":"credentials_id name to use to authenticate to this jump host.","type":"string"},"hostname":{"description":"Jump host hostname.","type":"string"},"ssh_port":{"description":"SSH port to use for this jump host.","format":"int32","type":"integer"}},"type":"object"},"JWT":{"description":"JWT token","properties":{"exp":{"description":"Expiration time of the token.","format":"int64","type":"integer"},"sxp":{"description":"Expiration time of the session.","format":"int64","type":"integer"},"fresh":{"description":"Is the token fresh?","type":"boolean"},"iat":{"description":"Issued at time of the token.","format":"int64","type":"integer"},"jti":{"description":"JWT ID.","type":"string"},"nbf":{"description":"Not before time of the token.","format":"int64","type":"integer"},"sub":{"description":"Subject of the token.","type":"string"},"type":{"description":"Type of the token.","type":"string"}},"type":"object"},"License":{"readOnly":true,"properties":{"customer":{"properties":{"id":{"description":"Customer id.","example":"id-customer-example","type":"string"},"email":{"description":"Customer email.","example":"bob@example.com","type":"string","format":"email"},"name":{"description":"Customer name.","example":"Bob Smith","type":"string"},"website":{"description":"Customer website.","example":"https://example.com","type":"string"}},"required":["name","email","website"],"type":"object"},"date":{"properties":{"expiry":{"description":"License expiration date.","type":"string"},"issued":{"description":"License issue date.","type":"string"},"warning":{"description":"License warning date.","type":"string"}},"required":["expiry","issued","warning"],"type":"object"},"license_level":{"$ref":"#/components/schemas/LicenseLevel"},"limits":{"allOf":[{"$ref":"#/components/schemas/LicenseLimits"}],"properties":{"features":{"items":{"$ref":"#/components/schemas/LicenseFeatures"},"type":"array"}},"required":["features"],"type":"object"},"subscription":{"type":"object","required":["renewing"],"properties":{"manage_url":{"type":"string","format":"uri","description":"If present, a URL for the user to visit to manage this subscription or get additional information."},"renewing":{"type":"boolean","description":"Indicates if this subscription is currently set to automatically renew at the end of the current term."},"term_end":{"type":"string","format":"date-time","description":"If present, the time the current subscription term ends. If the subscription is renewing, this is when the next subscription period will be billed; if not renewing, this is when the license will expire."},"message":{"type":"string","description":"If present and non-empty, any messages that should be displayed to users about the status of the Sandfly subscription."}}},"usage":{"allOf":[{"$ref":"#/components/schemas/LicenseLimits"}],"type":"object"},"version":{"description":"License version.","type":"integer"},"online":{"description":"True is this is an online license entitlement.","type":"boolean"},"online_warning":{"description":"Indicates if there is a message in online_status that should be brought to the user's attention.","type":"boolean"},"online_status":{"description":"If an online license, a text status message describing the current state of the license. Will be an empty string if not an online license.","type":"string"}},"required":["customer","date","license_level","limits","usage","version","online","online_warning","online_status"],"type":"object"},"LicenseLevel":{"description":"License level.","example":8,"type":"integer","enum":[0,1,4,8]},"LicenseAdd":{"properties":{"license_key":{"description":"License base64 encoded.","type":"string"}},"type":"object"},"LicenseFeatures":{"type":"string","enum":["ad_hoc_scan","custom_sandflies","elasticsearch_replication","host_tags","sandfly_auto_response","siem_sentinel","splunk_connector","ssh_hunter","sso","threat_feed","user_roles"]},"LicenseLimits":{"properties":{"alerts":{"description":"Number of alerts allowed.","example":100,"type":"integer"},"data_retention_max_hours":{"description":"Maximum number of hours of data retention.","example":72,"type":"integer"},"email_notifications":{"description":"Number of email notifications allowed.","example":1,"type":"integer"},"hosts":{"description":"Number of hosts allowed.","example":100,"type":"integer"},"jump_hosts":{"description":"Number of jump hosts allowed.","example":100,"type":"integer"},"named_queues":{"description":"Number of named queues allowed.","example":100,"type":"integer"},"notifications":{"description":"Number of notification event configurations allowed.","example":100,"type":"integer"},"schedules":{"description":"Number of schedules allowed.","example":100,"type":"integer"},"syslog_notifications":{"description":"Number of syslog notifications allowed.","example":1,"type":"integer"},"users":{"description":"Number of users allowed.","example":100,"type":"integer"}},"required":["alerts","data_retention_max_hours","email_notifications","hosts","jump_hosts","named_queues","notifications","queues","reports","rules","scheduled_reports","scheduled_rules","users"],"type":"object"},"LicenseUpdate":{"properties":{"license_key":{"description":"License base64 encoded.","type":"string"}},"type":"object"},"LinkedCredential":{"required":["credentials_id"],"properties":{"credentials_id":{"type":"string","example":"my_credential_id"}},"type":"object"},"LinkedJumpHosts":{"description":"List of jump hosts, in order of connection.","items":{"type":"string"},"example":["my_jump_host_name"],"type":"array"},"LlmAnalysisAdd":{"description":"Request to begin a new LLM analysis of a host or results.","type":"object","properties":{"mode":{"description":"The analysis mode. Determines which other fields are required.","$ref":"#/components/schemas/LlmAnalysisMode"},"host_sequence_id":{"type":"integer","description":"The host sequence ID. Required if mode is 'host', ignored otherwise."},"result_ids":{"type":"array","items":{"type":"integer","format":"int64"},"description":"A list of result IDs. At least one result ID is required if mode is 'results', ignored otherwise."}},"required":["mode"]},"LlmAnalysisChatAdd":{"description":"Chat message to add to an existing LLM analysis.","type":"object","properties":{"text":{"type":"string","description":"The user chat message."}},"required":["text"]},"LlmAnalysisState":{"type":"string","enum":["pending","pending_followup","ready","error"],"description":"Represents the state of an LLM analysis. New analysis requests begin in the 'pending' state, which should then transition to either 'ready' or 'error' after the model response is received. If a user adds an additional question to the chat, the state will be 'pending-followup', followed again by 'ready' or 'error'."},"LlmAnalysisMode":{"type":"string","enum":["host","results"],"description":"Represents the mode of an LLM analysis. 'host' indicates the analysis was started on a host; 'results' indicates the analysis was started on one or more results."},"LlmChatEntryRole":{"type":"string","enum":["user","model","error"],"description":"Indicates the source of a chat entry. Follow-up user-entered chat is 'user', model responses are 'model', and error messages are 'error'."},"LlmChatEntry":{"type":"object","properties":{"timestamp":{"type":"string","format":"date-time","description":"Timestamp of the chat entry."},"role":{"$ref":"#/components/schemas/LlmChatEntryRole"},"userid":{"type":"string","description":"User ID (Sandfly login) associated with the chat entry. Blank for errors and model responses."},"username":{"type":"string","description":"User full name associated with the chat entry. Blank for errors and model responses."},"text":{"type":"string","description":"The text content of the chat entry. Should be Markdown format."}},"required":["timestamp","role","text"]},"LlmAnalysisResult":{"type":"object","description":"A result associated with an LLM analysis.","properties":{"result_id":{"type":"integer","format":"int64","description":"Result ID."},"sandfly":{"type":"string","description":"Name of the Sandfly for this result. May be '[deleted]' if the result no longer exists."},"status":{"description":"Status of the result. May be '[deleted]' if the result no longer exists.","oneOf":[{"$ref":"#/components/schemas/ResultStatus"}]},"key_data":{"type":"string","description":"Key data element of the result. May be '[deleted]' if the result no longer exists."},"sandfly_engine":{"description":"Engine of the sandfly for the result. May be '[deleted]' if the result no longer exists.","$ref":"#/components/schemas/SandflyEngineType"},"sandfly_tags":{"type":"array","items":{"type":"string"},"description":"Tags of the sandfly for this result."},"seen_count":{"type":"integer","description":"Seen count for result. Will be 0 if result is deleted."},"superseded":{"type":"boolean","description":"Superseded flag for result. Will always be true if result is deleted."},"first_seen":{"type":"string","description":"First seen timestamp of result. May be '[deleted]' if the result no longer exists."},"last_seen":{"type":"string","description":"Last seen timestamp of result. May be '[deleted]' if the result no longer exists."}},"required":["result_id","sandfly","status","key_data","sandfly_engine","sandfly_tags","seen_count","superseded","first_seen","last_seen"]},"LlmAnalysisResultDeleted":{"type":"object","description":"A result associated with an LLM analysis.","properties":{"result_id":{"type":"integer","format":"int64","description":"Result ID."},"sandfly":{"$ref":"#/components/schemas/DeletedData"},"status":{"$ref":"#/components/schemas/DeletedData"},"key_data":{"$ref":"#/components/schemas/DeletedData"},"sandfly_engine":{"$ref":"#/components/schemas/DeletedData"},"sandfly_tags":{"type":"array","items":{"type":"string"}},"seen_count":{"enum":[0]},"superseded":{"enum":[true]},"first_seen":{"$ref":"#/components/schemas/DeletedData"},"last_seen":{"$ref":"#/components/schemas/DeletedData"}},"required":["result_id","sandfly","status","key_data","sandfly_engine","sandfly_tags","seen_count","superseded","first_seen","last_seen"]},"LlmAnalysisHost":{"type":"object","description":"A host related to the LLM analysis.","properties":{"host_sequence_id":{"type":"integer","description":"Host sequence ID."},"target_address":{"type":"string","description":"Target address (e.g., IP or hostname) of the host. May be '[deleted]' if the host no longer exists."},"node_name":{"type":"string","description":"OS node name (hostname) of the host. May be '[deleted]' if the result no longer exists."},"os_release_pretty_name":{"type":"string","description":"OS release name."}},"required":["host_sequence_id","target_address","node_name","os_release_pretty_name"]},"LlmAnalysisHostDeleted":{"type":"object","description":"A host related to the LLM analysis.","properties":{"host_sequence_id":{"type":"integer","description":"Host sequence ID."},"target_address":{"$ref":"#/components/schemas/DeletedData"},"node_name":{"$ref":"#/components/schemas/DeletedData"},"os_release_pretty_name":{"$ref":"#/components/schemas/DeletedData"}},"required":["host_sequence_id","target_address","node_name","os_release_pretty_name"]},"LlmAnalysisSummary":{"type":"object","properties":{"id":{"type":"integer","description":"Unique identifier for the LLM analysis."},"state":{"$ref":"#/components/schemas/LlmAnalysisState"},"mode":{"$ref":"#/components/schemas/LlmAnalysisMode"},"hosts":{"type":"array","items":{"oneOf":[{"$ref":"#/components/schemas/LlmAnalysisHost"},{"$ref":"#/components/schemas/LlmAnalysisHostDeleted"}]},"description":"List of hosts involved in the analysis."},"results":{"type":"array","items":{"oneOf":[{"$ref":"#/components/schemas/LlmAnalysisResult"},{"$ref":"#/components/schemas/LlmAnalysisResultDeleted"}],"discriminator":{"propertyName":"statis","mapping":{"alert":"#/components/schemas/LlmAnalysisResult","error":"#/components/schemas/LlmAnalysisResult","pass":"#/components/schemas/LlmAnalysisResult","[deleted]":"#/components/schemas/LlmAnalysisResultDeleted"}}},"description":"List of results involved in the analysis, if any."},"userid":{"type":"string","description":"User ID (Sandfly login) of the user who initiated the analysis."},"username":{"type":"string","description":"Full name of the user who initiated the analysis."},"brief":{"type":"string","description":"Brief one-sentence summary of LLM analysis, if available. Will be an empty string if the first response is not yet available, or if no brief was found."},"created_at":{"type":"string","format":"date-time","description":"Timestamp when the analysis was created."},"modified_at":{"type":"string","format":"date-time","description":"Timestamp when the analysis was last modified."}},"required":["id","state","mode","hosts","results","userid","username","brief","created_at","modified_at"]},"LlmAnalysis":{"allOf":[{"$ref":"#/components/schemas/LlmAnalysisSummary"},{"type":"object","properties":{"chat_entries":{"type":"array","items":{"$ref":"#/components/schemas/LlmChatEntry"},"description":"Chronological list of chat entries related to the analysis."}},"required":["chat_entries"]}]},"LlmLoginInfo":{"type":"object","description":"LLM configuration summary returned during login.","required":["enabled","results_limit"],"properties":{"enabled":{"type":"boolean","description":"LLM analysis is enabled."},"results_limit":{"type":"integer","description":"Maximum number of results allowed in an LLM analysis request."}}},"NotificationSummaries":{"type":"array","description":"Array of Notification Summaries.","items":{"$ref":"#/components/schemas/NotificationSummary"}},"NotificationSummary":{"type":"object","description":"Event notification configuration summary.","properties":{"id":{"type":"integer","readOnly":true,"description":"ID of notification configuration."},"name":{"type":"string","description":"Name of notification configuration."},"event":{"type":"string","description":"Event type for which this notification will fire.","enum":["host_alert_rollup","individual_alert","notification_delivery_error"]},"delivery":{"type":"string","description":"Method used to deliver event notification.","enum":["http_post"]},"hosts_tags_include":{"type":"array","nullable":true,"description":"If present, only events that apply to the hosts that have the tag(s) will be sent by this notification.","items":{"type":"string"}},"hosts_tags_include_operator":{"type":"string","description":"If there are more than one hosts_tags_include tags, this operator controls the matching logic.","enum":["and","or"],"default":"and"},"hosts_tags_exclude":{"type":"array","nullable":true,"description":"If present, events will NOT be sent for any hosts that have these tag(s). Exclude tags have priority over include tags.","items":{"type":"string"}},"hosts_tags_exclude_operator":{"type":"string","description":"If there are more than one hosts_tags_exclude tags, this operator controls the matching logic.","enum":["and","or"],"default":"and"},"paused":{"type":"boolean","description":"Holds the active status of the notification.","default":true}},"required":["name","event","delivery","config","template","hosts_tags_include","hosts_tags_exclude"]},"Notification":{"type":"object","description":"Event notification configuration.","allOf":[{"$ref":"#/components/schemas/NotificationSummary"}],"properties":{"config":{"oneOf":[{"$ref":"#/components/schemas/NotificationPostConfig"}],"discriminator":{"propertyName":"delivery","mapping":{"http_post":"#/components/schemas/NotificationPostConfig"}}},"template":{"type":"string","description":"The Go text/template template to format the notification content."}}},"NotificationPostConfig":{"type":"object","properties":{"url":{"type":"string","description":"The URL to POST the notification to."},"content_type":{"type":"string","description":"The HTTP Content-Type header value to use in the POST request."},"ignore_cert_errors":{"type":"boolean","description":"If true, HTTP certificate errors will be ignored when connecting to the URL.","default":false}}},"NotificationIDs":{"properties":{"notification_ids":{"description":"List of notification_ids.","items":{"type":"integer"},"type":"array"}},"type":"object"},"SshKeyTypes":{"type":"string","description":"OpenSSH key type identifiers","enum":["ssh-ed25519","ssh-dss","ssh-rsa","ecdsa-sha2-nistp256","ecdsa-sha2-nistp384","ecdsa-sha2-nistp521","sk-ecdsa-sha2-nistp256@openssh.com","sk-ssh-ed25519@openssh.com","unknown"]},"SSHBulkTag":{"type":"object","required":["key_tags","key_ids"],"properties":{"key_ids":{"description":"List of key IDs to perform the bulk tagging operation on.","items":{"type":"integer"},"type":"array"},"key_tags":{"description":"List of tags to add to or remove from the keys.","$ref":"#/components/schemas/SshKeyTags"}}},"SshKeyKeyData":{"type":"object","required":["id","friendly_name","key_type","hash","sha256_fingerprint","key_value","first_seen","last_seen","key_tags","key_bits","key_parse_error"],"properties":{"id":{"type":"integer","description":"Database-assigned SSH key ID."},"friendly_name":{"type":"string","description":"Generated (but globally consistent for this key) friendly name for key."},"key_type":{"$ref":"#/components/schemas/SshKeyTypes"},"hash":{"type":"object","required":["md5","sha1","sha256","sha512"],"properties":{"md5":{"type":"string","description":"MD5 hash of the public key value."},"sha1":{"type":"string","description":"SHA1 hash of the public key value."},"sha256":{"type":"string","description":"SHA256 hash of the public key value."},"sha512":{"type":"string","description":"SHA512 hash of the public key value."}}},"sha256_fingerprint":{"type":"string","description":"Standard SHA256 fingerprint representation for this public key."},"key_value":{"type":"string","description":"The public key."},"first_seen":{"type":"string","format":"date-time","nullable":true,"description":"Time when this key was first seen on a host during a scan. If a user directly added the key to Sandfly and it hasn't yet been found on any scanned host, the value will be null."},"last_seen":{"type":"string","format":"date-time","nullable":true,"description":"Time when this key was most recently seen on a host during a scan. If a user directly added the key to Sandfly and it hasn't yet been found on any scanned host, the value will be null."},"key_tags":{"$ref":"#/components/schemas/SshKeyTags"},"key_bits":{"type":"integer","description":"Number of bits in the key."},"key_parse_error":{"type":"boolean","description":"Flag indicating that the key data was unable to be parsed as a valid SSH public key."}}},"SshKeyTags":{"type":"array","description":"SSH key tags.","items":{"anyOf":[{"$ref":"#/components/schemas/SshKeyTag"},{"$ref":"#/components/schemas/SshKeyTagReserved"}]}},"SshKeyTag":{"description":"SSH Key Tag","type":"string","not":{"$ref":"#/components/schemas/SshKeyTagReserved"}},"SshKeyHostTagSummary":{"type":"object","description":"Aggregated host tag information for this key.","required":["host_tags_common","host_tags_all","key_tags"],"properties":{"host_tags_common":{"description":"The list of host tags that appear on 100% of the hosts this key was found on.","type":"array","items":{"type":"string"}},"host_tags_all":{"description":"The complete list of host tags that appear on hosts this key was found on.","type":"array","items":{"type":"string"}},"key_tags":{"description":"The tags on the key.","type":"array","items":{"type":"string"}}}},"SshHostsAndTags":{"type":"object","description":"Set of host IDs and their host tags","additionalProperties":{"type":"array","description":"List of host tags on this host","items":{"type":"string","description":"Host tag"}}},"SshKeysAndTags":{"type":"object","description":"Set of key IDs and their key tags","additionalProperties":{"type":"array","description":"List of key tags on this key","items":{"type":"string","description":"Key tag"}}},"SshKeyTagReserved":{"description":"Tags that hold special meaning and/or have special functionality","type":"string","enum":["Banned"]},"SshKeySummary":{"type":"object","description":"SSH key summary data.","allOf":[{"$ref":"#/components/schemas/SshKeyKeyData"}],"required":["num_hosts_with_alerts","num_hosts_current","num_users_current","num_hosts_total","num_users_total","hosts_deleted","has_duplicate_keys","host_tags_all","zone_violation_hosts","permitted_zones_count"],"properties":{"num_hosts_with_alerts":{"type":"integer","description":"Number of hosts with this key that have alerts."},"num_hosts_current":{"type":"integer","description":"Number of hosts that currently have this key."},"num_users_current":{"type":"integer","description":"Number of distinct usernames that currently have this key."},"num_hosts_total":{"type":"integer","description":"Total number of hosts that have ever had this key."},"num_users_total":{"type":"integer","description":"Total number of distinct usernames that have ever had this key."},"hosts_deleted":{"type":"boolean","description":"The hosts that had this key are no longer in the Sandfly database."},"has_duplicate_keys":{"type":"boolean","description":"One or more authorized_keys files with this key have duplicate entries for this key."},"host_tags_all":{"type":"array","items":{"type":"string"},"description":"All tags that appear on any host this key is associated with."},"zone_violation_hosts":{"type":"integer","description":"Number of hosts with this key that currently have an SSH Security Zone violation."},"permitted_zones_count":{"type":"integer","description":"Number of SSH Security Zones that permit this key to appear on hosts."}}},"SshKey":{"type":"object","required":["key_use_timeline","key_users","key_hosts","host_tags_common","key_zones"],"allOf":[{"$ref":"#/components/schemas/SshKeySummary"}],"properties":{"key_use_timeline":{"type":"array","items":{"$ref":"#/components/schemas/StandardTimeRangeDataPoint"}},"key_users":{"type":"array","items":{"$ref":"#/components/schemas/SshKeyUserDataPoint"}},"key_hosts":{"type":"array","items":{"$ref":"#/components/schemas/SshHostSummary"}},"host_tags_common":{"type":"array","items":{"type":"string"},"description":"Tags that appear on every host this key is associated with."},"key_zones":{"type":"array","description":"The list of SSH security zones which permit this key to appear on hosts and zones that this key was found in.","items":{"$ref":"#/components/schemas/SSHZoneSummaryWithPermittedFlag"}}}},"SshKeyUserDataPoint":{"required":["username","hosts_with_key","has_duplicate_keys","banned_key_violation"],"description":"Information about a user's SSH keys.","type":"object","properties":{"username":{"type":"string","description":"Username."},"hosts_with_key":{"type":"integer","description":"Number of hosts on which this user has the SSH key or keys."},"key_first_seen":{"type":"string","format":"date-time","description":"First time the SSH key associated with this user was seen."},"key_last_seen":{"type":"string","format":"date-time","description":"Most recent time the SSH key associated with this user was seen."},"has_duplicate_keys":{"type":"boolean","description":"The SSH key associated with this user has duplicate entries in an authorized_keys file."},"banned_key_violation":{"type":"boolean","description":"Indicates this user has a banned key."},"zone_violation_hosts":{"type":"integer","description":"The number of hosts on which this user has a key in violation of security zone policy."}}},"SshUserSummary":{"type":"object","required":["username","keys_current","keys_total","hosts_current","hosts_total","first_seen","last_seen","has_duplicate_keys","banned_key_violation","zone_violation_hosts"],"properties":{"username":{"type":"string","description":"Username."},"keys_current":{"type":"integer","description":"Number of keys this user currently has."},"keys_total":{"type":"integer","description":"Total number of keys that have been seen for this user."},"hosts_current":{"type":"integer","description":"Number of hosts on which this user currently has keys."},"hosts_total":{"type":"integer","description":"Total number of hosts this user has had keys on."},"first_seen":{"type":"string","format":"date-time","description":"First time keys associated with this user were seen."},"last_seen":{"type":"string","format":"date-time","description":"Most recent time keys associated with this user were seen."},"has_duplicate_keys":{"type":"boolean","description":"This user has duplicate key entries in an authorized_keys file."},"banned_key_violation":{"type":"boolean","description":"Indicates this user has a banned SSH key."},"zone_violation_hosts":{"type":"integer","description":"Number of hosts on which this user has a key in violation of the security zone policies covering the host."}}},"SshUser":{"type":"object","required":["hosts_timeline","hosts","username","keys_current","keys_total","hosts_current","hosts_total","first_seen","last_seen","has_duplicate_keys","banned_key_violation","zone_violation_hosts"],"properties":{"username":{"type":"string","description":"Username."},"keys_current":{"type":"integer","description":"Number of keys this user currently has."},"keys_total":{"type":"integer","description":"Total number of keys that have been seen for this user."},"hosts_current":{"type":"integer","description":"Number of hosts on which this user currently has keys."},"hosts_total":{"type":"integer","description":"Total number of hosts this user has had keys on."},"first_seen":{"type":"string","format":"date-time","description":"First time keys associated with this user were seen."},"last_seen":{"type":"string","format":"date-time","description":"Most recent time keys associated with this user were seen."},"has_duplicate_keys":{"type":"boolean","description":"This user has duplicate key entries in an authorized_keys file."},"hosts_timeline":{"type":"array","description":"Timeline over which this user was seen with keys on hosts.","items":{"$ref":"#/components/schemas/StandardTimeRangeDataPoint"}},"hosts":{"type":"array","description":"Hosts on which this user has keys.","items":{"type":"object","allOf":[{"$ref":"#/components/schemas/SshHostSummary"}],"properties":{"key_entries":{"type":"array","items":{"$ref":"#/components/schemas/SshKeyEntry"}}}}},"banned_key_violation":{"type":"boolean","description":"Indicates this user has a banned SSH key."},"zone_violation_hosts":{"type":"integer","description":"Number of hosts on which this user has keys that are in violation of an SSH security zone."}}},"SshGraphNodeType":{"type":"string","enum":["category","host","key","user"],"description":"Type of object this graph node represents."},"SshMode":{"enum":["key","host","user"],"type":"string"},"SshGraphType":{"$ref":"#/components/schemas/SshMode"},"SshGraphNode":{"type":"object","required":["node_id","entity_id","type","name","key_first_seen","key_last_seen","has_duplicate_keys","banned_key_violation","zone_violation"],"properties":{"node_id":{"type":"string","description":"Graph node ID; only meaningful in the context of this single request."},"entity_id":{"type":"string","description":"ID of the object this graph node represents"},"type":{"$ref":"#/components/schemas/SshGraphNodeType"},"name":{"type":"string","description":"Name of object this graph node represented."},"value":{"type":"integer","nullable":true,"description":"Numeric information about this graph node's object."},"value_label":{"type":"string","nullable":true,"description":"Display label to show with this node's value."},"value_help":{"type":"string","nullable":true,"description":"Help text further explaining this node's value."},"key_first_seen":{"type":"string","format":"date-time","description":"First time an SSH key associated with this object was seen."},"key_last_seen":{"type":"string","format":"date-time","description":"Most recent time an SSH key associated with this object was seen."},"parent_id":{"type":"string","nullable":true,"description":"Parent graph node ID."},"has_duplicate_keys":{"type":"boolean","description":"The object associated with this graph node has duplicate key entries."},"banned_key_violation":{"type":"boolean","description":"Indicates that this graph node, or one of its children, has a banned SSH key that is in use."},"zone_violation":{"type":"boolean","description":"Indicates that this graph node, or one of its children, has an SSH key that is on a host in violation of an SSH security zone policy."}}},"SshHostSummary":{"type":"object","description":"Host summary record.","allOf":[{"$ref":"#/components/schemas/SshHostSummaryHostInfo"},{"$ref":"#/components/schemas/SshHostSummarySSHInfo"}]},"SshHostSummaryHostInfo":{"type":"object","description":"Host attributes to provide context about the host on SSH response objects.","required":["host_id","host_sequence_id","target_address","node_name","last_seen_ip_addr","date_first_seen","date_last_seen","os_info_arch","os_info_machine","os_info_os_release_name","os_info_os_release_pretty_name","os_info_release","tags","results_alert","results_error","results_pass","results_total"],"properties":{"node_name":{"type":"string","description":"Hostname of host.","format":"int32"},"tags":{"type":"array","description":"A list of tags for this host.","items":{"type":"string"}},"host_id":{"type":"string","description":"Unique ID of the host this summary record is for."},"host_sequence_id":{"type":"integer","description":"Host sequence ID."},"target_address":{"type":"string"},"date_first_seen":{"type":"string","description":"Date and time this host was first seen.","format":"date-time"},"date_last_seen":{"type":"string","description":"Date and time this host was last seen.","format":"date-time"},"last_seen_ip_addr":{"type":"string","description":"IP address this host was last seen on."},"os_info_arch":{"type":"string","description":"OS architecture."},"os_info_machine":{"type":"string","description":"OS machine."},"os_info_os_release_name":{"type":"string","description":"OS release name."},"os_info_os_release_pretty_name":{"type":"string","description":"Human friendly OS release name."},"os_info_release":{"type":"string","description":"OS release."},"results_alert":{"type":"integer","description":"Total alert results on this host.","minimum":0},"results_error":{"type":"integer","description":"Total error results on this host.","minimum":0},"results_pass":{"type":"integer","description":"Total pass results on this host.","minimum":0},"results_total":{"type":"integer","description":"Total results on this host.","minimum":0}}},"SshHostSummarySSHInfo":{"type":"object","description":"SSH key attributes related to a host.","required":["users_with_key","has_duplicate_keys","banned_key_violation","zone_violation_keys"],"properties":{"users_with_key":{"type":"integer","description":"Total users with this key.","minimum":0,"nullable":true},"key_first_seen":{"type":"string","format":"date-time","description":"First time a key associated with this host was seen."},"key_last_seen":{"type":"string","format":"date-time","description":"Most recent time a key associated with this host was seen."},"users_current":{"type":"integer","minimum":0,"description":"Number of users on this host that currently have an SSH key."},"users_total":{"type":"integer","minimum":0,"description":"Number of all-time users on this host that have, or in the past have had, an SSH key."},"keys_current":{"type":"integer","minimum":0,"description":"Current number of SSH keys on this host."},"keys_total":{"type":"integer","minimum":0,"description":"Total number of SSH keys this host has had."},"has_duplicate_keys":{"type":"boolean","description":"Does this key appear more then once in the key file."},"banned_key_violation":{"type":"boolean","description":"Indicates the presence of a banned SSH key on this host."},"zone_violation_keys":{"type":"integer","description":"Number of keys on this host in violation of the SSH security zone policies covering this host."}}},"SshHostSummaryUsers":{"type":"object","required":["users_timeline","users"],"properties":{"users_timeline":{"description":"Timeline of users with keys on this host.","type":"array","items":{"$ref":"#/components/schemas/StandardTimeRangeDataPoint"}},"users":{"type":"array","items":{"type":"object","required":["username","first_seen","last_seen","has_duplicate_keys","zone_violation_hosts","banned_key_violation","key_entries"],"properties":{"username":{"type":"string","description":"Username."},"first_seen":{"type":"string","format":"date-time","description":"Time this user was first seen with an SSH key."},"last_seen":{"type":"string","format":"date-time","description":"Most recent time this user was seen with an SSH key."},"has_duplicate_keys":{"type":"boolean","description":"This username has duplicate authorized_key entries for a key."},"zone_violation_hosts":{"type":"integer","description":"Indicates the number of hosts on which the user has a key in violation of SSH security zones."},"banned_key_violation":{"type":"boolean","description":"Indicates this user has a banned key."},"key_entries":{"type":"array","items":{"$ref":"#/components/schemas/SshKeyEntry"}}}}}}},"SshHost":{"type":"object","description":"Host summary record.","allOf":[{"$ref":"#/components/schemas/SshHostSummary"},{"$ref":"#/components/schemas/SshHostSummaryUsers"}]},"SshHostKeyConfig":{"properties":{"host_key":{"type":"string"},"host_key_type":{"type":"string"},"warn_only":{"type":"boolean"}},"required":["host_key_type","host_key"],"type":"object"},"SshHostWithZones":{"type":"object","description":"Host summary record with zone membership list.","allOf":[{"$ref":"#/components/schemas/SshHost"}],"required":["zones"],"properties":{"zones":{"type":"array","items":{"$ref":"#/components/schemas/SSHZoneSummary"}}}},"SshKeysAdd":{"type":"object","required":["key_tags","keys"],"properties":{"key_tags":{"type":"array","description":"Tags to add to the new keys, or tags to append to existing keys if the key already exists.","items":{"type":"string"}},"keys":{"type":"string","description":"SSH public keys to add. This may be a multi-line, newline-separated list of keys. Each line may be a full authorized_keys entry, or it may just be the key itself. Blank lines and lines beginning with # are ignored, so existing authorized_key files may be easily used."}}},"SshKeyEntry":{"type":"object","required":["active","is_duplicate","entry_num","key_file","key_file_created","key_file_modified","options","comment","banned_key_violation","zone_violation"],"allOf":[{"$ref":"#/components/schemas/SshKeyKeyData"}],"properties":{"active":{"type":"boolean","description":"This key is currently in an authorized_keys file."},"is_duplicate":{"type":"boolean","description":"This key has duplicate entries."},"entry_num":{"type":"integer","description":"Which position in the authorized_keys file this key appears in."},"key_file":{"type":"string","format":"path","description":"File path of the authorized_keys file where this key appears."},"key_file_created":{"type":"string","format":"date-time","description":"Create time of the file in which this key appears."},"key_file_modified":{"type":"string","format":"date-time","description":"Modification time of the file in which this key appears."},"options":{"type":"string","description":"Key options."},"comment":{"type":"string","description":"Key comment."},"banned_key_violation":{"type":"boolean","description":"Indicates this is a banned key."},"zone_violation":{"type":"boolean","description":"This key entry is in violation of an SSH security zone covering the host that the key is found on."}}},"SSHZoneTagPolicies":{"type":"array","items":{"$ref":"#/components/schemas/SSHZoneTagPolicy"}},"SSHZoneTagPolicy":{"type":"object","properties":{"mode":{"type":"string","enum":["include","except"],"description":"The type of tag list this is: include items with the tag(s), or exclude items with the tag(s)."},"tags":{"type":"array","items":{"type":"string"},"description":"The tags that make up this policy."}},"required":["mode","tags"]},"SSHZoneSummary":{"readOnly":true,"type":"object","allOf":[{"$ref":"#/components/schemas/SSHZoneMetadata"}],"properties":{"name":{"type":"string","description":"Name of this SSH zone."},"description":{"type":"string","description":"Description for this SSH zone."},"hosts_count":{"type":"integer","description":"Number of hosts in this zone."},"permitted_keys_count":{"type":"integer","description":"The number of keys this zone allows on hosts."},"violation_host_count":{"type":"integer","description":"The number of hosts in this zone that current have one or more keys in violation of zone policies."},"banned_keys_count":{"type":"integer","description":"The number of banned key entries found on hosts in this zone."}},"required":["name","description","hosts_count","permitted_keys_count","violation_host_count","banned_keys_count"]},"SSHZoneSummaryWithPermittedFlag":{"readOnly":true,"allOf":[{"$ref":"#/components/schemas/SSHZoneSummary"}],"properties":{"key_permitted":{"type":"boolean","description":"Indicates if this key is permitted in this zone. If a zone is listed where the key is NOT permitted, it means that this key was found on a host in the zone in violation of the zone's policy; this key is the cause of a zone violation in that zone."}}},"SSHZoneMetadata":{"readOnly":true,"type":"object","properties":{"id":{"type":"integer","description":"Database-assigned ID of this SSH zone."},"create_date":{"type":"string","format":"date-time","description":"Date this SSH zone was created."},"modification_date":{"type":"string","format":"date-time","description":"Date this SSH zone was last modified."}},"required":["id","create_date","modification_date"]},"SSHZone":{"type":"object","readOnly":true,"allOf":[{"$ref":"#/components/schemas/SSHZoneSummary"}],"properties":{"host_policies":{"$ref":"#/components/schemas/SSHZoneTagPolicies"},"key_policies":{"$ref":"#/components/schemas/SSHZoneTagPolicies"},"included_hosts":{"type":"array","description":"Hosts that are included in this SSH zone.","items":{"$ref":"#/components/schemas/SSHZoneHostSummary"}},"included_keys":{"type":"array","description":"Keys that are included in this SSH zone.","items":{"$ref":"#/components/schemas/SSHZoneKeySummary"}}},"required":["host_policies","key_policies","included_hosts","included_keys"]},"SSHZoneConfiguration":{"type":"object","properties":{"name":{"type":"string","description":"Name of this SSH zone."},"description":{"type":"string","description":"Description for this SSH zone."},"host_policies":{"$ref":"#/components/schemas/SSHZoneTagPolicies"},"key_policies":{"$ref":"#/components/schemas/SSHZoneTagPolicies"}},"required":["name","description","host_policies","key_policies"]},"SSHZoneHostSummary":{"type":"object","required":["host_id","host_sequence_id","hostname","os_info_node","active","authentication_status","date_first_seen","date_last_seen","last_seen_ip_addr","tags","violation_key_count","banned_keys_count"],"properties":{"host_id":{"type":"string","description":"Host ID"},"host_sequence_id":{"type":"integer","description":"Host sequence ID"},"hostname":{"type":"string","description":"Host target address"},"os_info_node":{"type":"string","description":"Host node name"},"active":{"type":"boolean","description":"Is host active"},"authentication_status":{"type":"string","description":"Host authentication state"},"date_first_seen":{"type":"string","format":"date-time","description":"Date host was added to Sandfly"},"date_last_seen":{"type":"string","format":"date-time","description":"Date of last successful Sandfly scan"},"last_seen_ip_addr":{"type":"string","description":"Last seen host IP address"},"tags":{"type":"array","description":"Host tags","items":{"type":"string"}},"violation_key_count":{"type":"integer","description":"The number of keys on this host that are in violation of security zone policy."},"banned_keys_count":{"type":"integer","description":"The number of banned key entries found on this host."}}},"SSHZoneKeySummary":{"type":"object","required":["ssh_public_key_id","key_friendly_name","key_type","bits","first_seen","last_seen","key_tags","num_hosts_current","num_users_current"],"properties":{"ssh_public_key_id":{"type":"integer","description":"SSH key ID"},"key_friendly_name":{"type":"string","description":"Key friendly name"},"key_type":{"type":"string","description":"Key type"},"bits":{"type":"integer","description":"Key strength"},"first_seen":{"type":"string","format":"date-time","description":"Date Sandfly first saw this key","nullable":true},"last_seen":{"type":"string","format":"date-time","description":"Date Sandfly last saw this key","nullable":true},"key_tags":{"type":"array","description":"Key tags","items":{"type":"string"}},"num_hosts_current":{"type":"integer","description":"Number of hosts currently using this key."},"num_users_current":{"type":"integer","description":"Number of users currently using this key."}}},"PaginatedData":{"properties":{"data":{"type":"object"},"more_results":{"description":"Indicates there are more pages of data for this query.","type":"boolean"}},"type":"object"},"SandflyStatus":{"type":"string","enum":["ok","sandfly_inactive","missing_results"]},"Result":{"title":"Result","description":"Data returned from a sandfly.","type":"object","allOf":[{"$ref":"#/components/schemas/ResultCommon"},{"$ref":"#/components/schemas/ResultVariants"}]},"ResultSummary":{"title":"ResultSummary","description":"Summary of data returned from a sandfly.","type":"object","required":["id","sequence_id","external_id","data.status","whitelisted","containerized","count","first_seen","last_seen","superseded","header.host_id","header.hostname","header.node_name","header.host_sequence_id","data.tags","data.name","data.engine","header.ip_addr","header.queue_name","header.run_id","data.severity","data.end_time","header.tags","data.exec_seconds","data.type","data.key_data"],"properties":{"id":{"description":"Unique identifier.","type":"string"},"sequence_id":{"description":"Unique sequence identifier.","format":"int64","type":"integer"},"external_id":{"description":"External ID.","type":"string"},"data.status":{"$ref":"#/components/schemas/ResultStatus"},"whitelisted":{"description":"Is this result whitelisted?","type":"boolean"},"containerized":{"description":"Is this result within a container?","type":"boolean"},"count":{"description":"Number of times this result has been seen.","format":"int64","type":"integer"},"first_seen":{"description":"First time this result was seen.","type":"string","format":"date-time"},"last_seen":{"description":"Last time this result was seen.","type":"string","format":"date-time"},"superseded":{"description":"Is this result superseded?","type":"boolean"},"header.host_id":{"description":"Host ID.","type":"string"},"header.hostname":{"description":"Host name.","type":"string"},"header.node_name":{"description":"Node name.","type":"string"},"header.host_sequence_id":{"description":"Host Sequence ID.","type":"integer"},"data.tags":{"$ref":"#/components/schemas/SandflyTags"},"data.name":{"description":"Name of the sandfly.","type":"string"},"data.engine":{"description":"Name of the sandfly engine.","type":"string"},"header.ip_addr":{"description":"IP address of the host.","type":"string"},"header.queue_name":{"description":"Queue name.","type":"string"},"header.run_id":{"description":"Run ID.","type":"string"},"data.severity":{"$ref":"#/components/schemas/SandflySeverity"},"data.end_time":{"description":"Time at which this result was returned from the host.","type":"string","format":"date-time"},"header.tags":{"$ref":"#/components/schemas/HostTags"},"data.exec_seconds":{"description":"Number of seconds the sandfly took to execute.","format":"int64","type":"integer"},"data.type":{"description":"Type of the sandfly.","$ref":"#/components/schemas/SandflyType"},"data.key_data":{"description":"Key data for the sandfly. This will depend on the type of sandfly.","type":"string"},"data.masked":{"description":"Should the result be masked due to license restrictions?","type":"boolean"}}},"ResultsSummaryHost":{"type":"object","properties":{"host":{"$ref":"#/components/schemas/HostSummary"},"sandflies":{"type":"array","items":{"$ref":"#/components/schemas/ResultsSummaryHostSandfly"}}},"required":["host","sandflies"]},"ResultsSummaryHostSandfly":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"tags":{"$ref":"#/components/schemas/SandflyTags"},"custom":{"type":"boolean"},"type":{"$ref":"#/components/schemas/SandflyType"},"active":{"type":"boolean"},"severity":{"$ref":"#/components/schemas/SandflySeverity"},"alerts":{"type":"integer"},"alerts_seen":{"type":"integer"},"alert_last_seen":{"type":"string","format":"date-time","nullable":true},"errors":{"type":"integer"},"errors_seen":{"type":"integer"},"error_last_seen":{"type":"string","format":"date-time","nullable":true},"passes":{"type":"integer"},"passes_seen":{"type":"integer"},"pass_last_seen":{"type":"string","format":"date-time","nullable":true}},"required":["name","description","tags","custom","type","active","severity","alerts","alerts_seen","alert_last_seen","errors","errors_seen","error_last_seen","passes","passes_seen","pass_last_seen"]},"ResultsSummarySandfly":{"type":"object","properties":{"sandfly":{"$ref":"#/components/schemas/SandflySummary"},"hosts":{"type":"array","items":{"$ref":"#/components/schemas/ResultsSummarySandflyHost"}}},"required":["hosts","sandfly"]},"ResultsSummarySandflyHost":{"title":"HostInfo","type":"object","properties":{"host_id":{"type":"string"},"host_sequence_id":{"type":"integer"},"hostname":{"type":"string"},"active":{"type":"boolean"},"credentials_id":{"type":"string"},"authentication_status":{"type":"string"},"date_first_seen":{"type":"string","format":"date-time"},"date_last_seen":{"type":"string","format":"date-time"},"first_seen_ip_addr":{"type":"string"},"last_seen_ip_addr":{"type":"string"},"os_info_arch":{"type":"string"},"os_info_machine":{"type":"string"},"os_info_node":{"type":"string"},"os_info_os_release_name":{"type":"string"},"os_info_os_release_pretty_name":{"type":"string"},"os_info_os_release_version":{"type":"string"},"os_info_os_release_version_codename":{"type":"string"},"os_info_release":{"type":"string"},"os_info_uptime_date":{"type":"string","format":"date-time"},"os_info_uptime_days":{"type":"integer"},"os_performance_cpu_fifteen_min":{"type":"integer"},"os_performance_cpu_fifteen_min_core_adjusted":{"type":"integer"},"tags":{"$ref":"#/components/schemas/HostTags"},"total_alerts":{"type":"integer"},"total_errors":{"type":"integer"},"total_passes":{"type":"integer"},"alerts":{"type":"integer"},"alerts_seen":{"type":"integer"},"alert_last_seen":{"type":"string","format":"date-time","nullable":false},"errors":{"type":"integer"},"errors_seen":{"type":"integer"},"error_last_seen":{"type":"string","format":"date-time","nullable":false},"passes":{"type":"integer"},"passes_seen":{"type":"integer"},"pass_last_seen":{"type":"string","format":"date-time","nullable":false}},"required":["host_id","host_sequence_id","hostname","active","credentials_id","authentication_status","date_first_seen","date_last_seen","first_seen_ip_addr","last_seen_ip_addr","os_info_arch","os_info_machine","os_info_node","os_info_os_release_name","os_info_os_release_pretty_name","os_info_os_release_version","os_info_os_release_version_codename","os_info_release","os_info_uptime_date","os_info_uptime_days","os_performance_cpu_fifteen_min","os_performance_cpu_fifteen_min_core_adjusted","tags","total_alerts","total_errors","total_passes","alerts","alerts_seen","alert_last_seen","errors","errors_seen","error_last_seen","passes","passes_seen","pass_last_seen"]},"ResultVariants":{"anyOf":[{"$ref":"#/components/schemas/ResultEngineAtJob"},{"$ref":"#/components/schemas/ResultEngineBtmp"},{"$ref":"#/components/schemas/ResultEngineCron"},{"$ref":"#/components/schemas/ResultEngineDir"},{"$ref":"#/components/schemas/ResultEngineFile"},{"$ref":"#/components/schemas/ResultEngineKModule"},{"$ref":"#/components/schemas/ResultEngineLastLog"},{"$ref":"#/components/schemas/ResultEngineLastLog"},{"$ref":"#/components/schemas/ResultEngineLastLog"},{"$ref":"#/components/schemas/ResultEngineOsIdentify"},{"$ref":"#/components/schemas/ResultEngineProcess"},{"$ref":"#/components/schemas/ResultEngineProcess"},{"$ref":"#/components/schemas/ResultEngineProcess"},{"$ref":"#/components/schemas/ResultEngineProcess"},{"$ref":"#/components/schemas/ResultEngineSystemdSession"},{"$ref":"#/components/schemas/ResultEngineSystemd"},{"$ref":"#/components/schemas/ResultEngineUser"},{"$ref":"#/components/schemas/ResultEngineUser"},{"$ref":"#/components/schemas/ResultEngineUser"},{"$ref":"#/components/schemas/ResultEngineUtmp"},{"$ref":"#/components/schemas/ResultEngineWtmp"}]},"ResultEngineAtJob":{"title":"ResultAtJob","required":["data"],"type":"object","properties":{"data":{"required":["results"],"type":"object","properties":{"results":{"$ref":"#/components/schemas/AtJobEngineResponse"}}}}},"ResultEngineBtmp":{"title":"ResultBtmp","required":["data"],"type":"object","properties":{"data":{"type":"object","required":["results"],"properties":{"results":{"type":"object","required":["log"],"properties":{"log":{"type":"object","required":["btmp"],"properties":{"btmp":{"$ref":"#/components/schemas/UtmpEngineResponse"}}}}}}}}},"ResultEngineCron":{"title":"ResultCron","allOf":[{"$ref":"#/components/schemas/ResultEngineFile"}],"required":["data"],"type":"object","properties":{"data":{"required":["results"],"type":"object","properties":{"results":{"$ref":"#/components/schemas/CronEngineResponse"}}}}},"ResultEngineDir":{"title":"ResultDir","required":["data"],"type":"object","properties":{"data":{"required":["results"],"type":"object","properties":{"results":{"$ref":"#/components/schemas/DirEngineResponse"}}}}},"ResultEngineFile":{"title":"ResultFile","required":["data"],"type":"object","properties":{"data":{"required":["results"],"type":"object","properties":{"results":{"$ref":"#/components/schemas/FileEngineResponse"}}}}},"ResultEngineKModule":{"title":"ResultKmodule","required":["data"],"type":"object","properties":{"data":{"required":["results"],"type":"object","properties":{"results":{"$ref":"#/components/schemas/KmodulesEngineResponse"}}}}},"ResultEngineLastLog":{"title":"ResultLastLog","required":["data"],"type":"object","properties":{"data":{"required":["results"],"type":"object","properties":{"results":{"$ref":"#/components/schemas/LastlogEngineResponse"}}}}},"ResultEngineLogTamperingLastLogHistoryMissingRecord":{"$ref":"#/components/schemas/ResultEngineLastLog"},"ResultEngineLogTamperingLastLogWtmpMissingRecord":{"$ref":"#/components/schemas/ResultEngineLastLog"},"ResultEngineOsIdentify":{"title":"ResultOsIdentify","required":["data"],"type":"object","properties":{"data":{"required":["results"],"type":"object","properties":{"results":{"$ref":"#/components/schemas/Os"}}}}},"ResultEngineProcess":{"title":"ResultProcess","required":["data"],"type":"object","properties":{"data":{"required":["results"],"type":"object","properties":{"results":{"$ref":"#/components/schemas/ProcessEngineResponse"}}}}},"ResultEngineProcessMasqueradeBinaryMismatched":{"$ref":"#/components/schemas/ResultEngineProcess"},"ResultEngineProcessMasqueradeBinaryRenamed":{"$ref":"#/components/schemas/ResultEngineProcess"},"ResultEngineProcessMasqueradeMixedCase":{"$ref":"#/components/schemas/ResultEngineProcess"},"ResultEngineSystemdSession":{"title":"ResultSystemdSession","required":["data"],"type":"object","properties":{"data":{"required":["results"],"type":"object","properties":{"results":{"$ref":"#/components/schemas/SystemdSessionEngineResponse"}}}}},"ResultEngineSystemd":{"title":"ResultSystemd","required":["data"],"type":"object","properties":{"data":{"required":["results"],"type":"object","properties":{"results":{"$ref":"#/components/schemas/SystemdEngineResponse"}}}}},"ResultEngineUserPasswordAuditor":{"$ref":"#/components/schemas/ResultEngineUser"},"ResultEngineUserPasswordHashDuplicates":{"$ref":"#/components/schemas/ResultEngineUser"},"ResultEngineUser":{"title":"ResultUser","required":["data"],"type":"object","properties":{"data":{"required":["results"],"type":"object","properties":{"results":{"$ref":"#/components/schemas/UserEngineEngineResponse"}}}}},"ResultEngineUtmp":{"title":"ResultUtmp","required":["data"],"type":"object","properties":{"data":{"type":"object","required":["results"],"properties":{"results":{"type":"object","required":["log"],"properties":{"log":{"type":"object","required":["utmp"],"properties":{"utmp":{"$ref":"#/components/schemas/UtmpEngineResponse"}}}}}}}}},"ResultEngineWtmp":{"title":"ResultWtmp","required":["data"],"type":"object","properties":{"data":{"type":"object","required":["results"],"properties":{"results":{"type":"object","required":["log"],"properties":{"log":{"type":"object","required":["wtmp"],"properties":{"wtmp":{"$ref":"#/components/schemas/UtmpEngineResponse"}}}}}}}}},"ResultEngineResponseUtmp":{"$ref":"#/components/schemas/UtmpEngineResponse"},"ResultCommon":{"title":"ResultCommon","type":"object","properties":{"id":{"type":"string"},"sequence_id":{"type":"integer"},"external_id":{"type":"string"},"count":{"type":"integer"},"first_seen":{"type":"string","format":"date-time"},"last_seen":{"type":"string","format":"date-time"},"superseded":{"type":"boolean"},"whitelisted":{"type":"boolean"},"drift_result":{"type":"boolean"},"containerized":{"type":"boolean"},"header":{"type":"object","properties":{"start_time":{"type":"string","format":"date-time"},"hostname":{"type":"string"},"ssh_port":{"type":"integer"},"queue_name":{"type":"string"},"ip_addr":{"type":"string"},"host_id":{"type":"string"},"host_sequence_id":{"type":"integer"},"end_time":{"type":"string","format":"date-time"},"credentials_id":{"type":"string"},"jump_hosts":{"$ref":"#/components/schemas/LinkedJumpHosts"},"run_id":{"type":"string"},"manual_scan":{"type":"boolean"},"tags":{"$ref":"#/components/schemas/HostTags"},"node_name":{"type":"string"}},"required":["start_time","hostname","ssh_port","queue_name","ip_addr","host_id","host_sequence_id","end_time","credentials_id","jump_hosts","run_id","manual_scan","tags","node_name","containerized"]},"data":{"type":"object","properties":{"results":{"type":"object","properties":{"explanation":{"type":"string"},"match_hashes":{"type":"object","properties":{"version":{"type":"integer"},"strict":{"type":"string"},"moderate":{"type":"string"},"permissive":{"type":"string"}}}},"required":["explanation","match_hashes"]},"exec_seconds":{"type":"integer"},"start_time":{"type":"string","format":"date-time"},"end_time":{"type":"string","format":"date-time"},"name":{"type":"string"},"status":{"$ref":"#/components/schemas/ResultStatus"},"status_msg":{"type":"string"},"severity":{"$ref":"#/components/schemas/SandflySeverity"},"tags":{"type":"array","items":{"type":"string"}},"type":{"$ref":"#/components/schemas/SandflyType"},"engine":{"$ref":"#/components/schemas/SandflyEngineType"},"key_data":{"type":"string"},"masked":{"type":"boolean"}},"required":["results","exec_seconds","start_time","end_time","name","status","status_msg","severity","tags","type","engine","key_data"]}},"required":["id","sequence_id","external_id","count","first_seen","last_seen","superseded","whitelisted","header","data"]},"ResultStatus":{"type":"string","enum":["alert","pass","error"]},"Results":{"description":"List of results.","uniqueItems":true,"items":{"$ref":"#/components/schemas/Result"},"type":"array"},"ResultSummaries":{"description":"List of result summaries.","uniqueItems":true,"items":{"$ref":"#/components/schemas/ResultSummary"},"type":"array"},"ResultsDelete":{"properties":{"filter":{"description":"Filter value from UI to pass into search.","type":"object"},"result_ids":{"description":"List of result IDs to delete.","items":{"type":"string"},"type":"array"},"sort":{"description":"Sort parameters.","items":{"type":"object"},"type":"array"},"time_since":{"description":"A correctly formatted time entry for searching time since this date.","format":"date-time","type":"string"}},"type":"object"},"ResultsSearch":{"properties":{"result_ids":{"description":"A list of result IDs.","items":{"type":"string"},"type":"array"},"filter":{"description":"Filter value from UI to pass into search.","type":"object","required":["items","logicOperator"],"properties":{"items":{"$ref":"#/components/schemas/ResultSearchFilterItem"},"logicOperator":{"$ref":"#/components/schemas/ResultSearchFilterOperator"},"quickFilterValues":{"type":"array","items":{"type":"string"}}}},"flatten":{"description":"Optional request to flatten returned data structure.","type":"boolean"},"size":{"description":"Optional number of results to return on this call and subsequent scroll requests.","format":"int32","type":"integer"},"page":{"description":"Optional number of the page to return based on the size.","format":"int32","type":"integer","default":1},"sort":{"description":"Sort parameters.","items":{"type":"object"},"type":"array"},"summary":{"description":"Optional request to return summary result data and not full dataset.","type":"boolean"},"time_since":{"description":"A correctly formatted time entry for searching time since this date.","format":"date-time","type":"string"}},"type":"object"},"ResultSearchFilterOperator":{"type":"string"},"ResultSearchFilterItem":{"type":"array","items":{"type":"object","required":["field","operator"],"properties":{"field":{"type":"string"},"operator":{"type":"string"},"value":{"oneOf":[{"type":"string"},{"type":"integer"}]},"id":{"oneOf":[{"type":"string"},{"type":"integer"}]}}}},"Sandfly":{"oneOf":[{"$ref":"#/components/schemas/SandflyCustom"},{"$ref":"#/components/schemas/SandflyFactory"}]},"SandflyBackup":{"type":"object","description":"Raw JSON export of custom sandflies."},"SandflyCommon":{"properties":{"custom":{"type":"boolean"},"author":{"type":"string"},"date_added":{"type":"string"},"description":{"description":"Sandfly description.","type":"string"},"comment":{"type":"string"},"active":{"type":"boolean"},"format":{"$ref":"#/components/schemas/SandflyFormat"},"max_cpu_load":{"description":"The amount of relative CPU intensity this sandfly needs (1 - low, 3 - high)","format":"int32","type":"integer","minimum":1,"maximum":3},"max_disk_load":{"description":"The amount of relative disk intensity this sandfly needs (1 - low, 3 - high)","format":"int32","type":"integer","minimum":1,"maximum":3},"max_timeout":{"description":"What is the longest we should wait for this sandfly to return data in seconds?","format":"int32","type":"integer","minimum":1,"maximum":3600},"name":{"description":"Sandfly name.","type":"string","not":{"enum":["backup","reload_all","response"]}},"options":{"required":["rules","engines","explanation"],"type":"object","properties":{"rules":{"type":"array","items":{"type":"string"}},"engines":{"description":"Sandfly engine used to obtain results. Currently only supports a single sandfly.","type":"array","maxLength":1,"minLength":1,"items":{"$ref":"#/components/schemas/SandflyEngineType"}},"rule_op":{"$ref":"#/components/schemas/SandflyRuleOperator"},"always_pass":{"type":"boolean","default":false},"explanation":{"type":"string"},"os_exclude":{"type":"object","description":"expr rules that may use the os.* data to exclude this sandfly due to OS/distro incompatability. If the rule set evaluates to true, this sandfly will not run on the target host.","properties":{"rule_op":{"$ref":"#/components/schemas/SandflyRuleOperator"},"rules":{"type":"array","items":{"type":"string"}}}},"response":{"type":"object","properties":{"process":{"type":"object","properties":{"kill":{"type":"boolean","description":"Whether to kill the process or not."},"suspend":{"type":"boolean","description":"Whether to suspend the process or not."}}}}},"match_hash_extras":{"type":"object","description":"Extra options to include in match hash values for results from this sandfly.","properties":{"values":{"description":"List of expr expressions that produce strings which will be appended, in the order of this array, to the selected match hash types.","type":"array","items":{"type":"string","description":"An expr expression that returns a string. This value will be appended to the hash input for the selected match hash types."}},"apply_permissive":{"type":"boolean","description":"Apply this value to the permissive match hash."},"apply_moderate":{"type":"boolean","description":"Apply this value to the moderate match hash."},"apply_strict":{"type":"boolean","description":"Apply this value to the strict (deduplication) match hash."}}},"additionalProperties":{"type":"object"}}},"severity":{"$ref":"#/components/schemas/SandflySeverity"},"tags":{"description":"Tags for this sandfly.","items":{"oneOf":[{"$ref":"#/components/schemas/SandflyTypeGeneral"},{"type":"string"}]},"type":"array"},"version":{"description":"Version of this Sandfly.","type":"string"}},"required":["name","author","description","version","format","tags","custom","type","active","severity","max_cpu_load","max_disk_load","max_timeout","date_added","options"],"type":"object"},"SandflyCustom":{"readOnly":true,"type":"object","allOf":[{"$ref":"#/components/schemas/SandflyCommon"}],"required":["type"],"properties":{"type":{"description":"What kind of sandfly is this (directory, file, user, dependency, recon)?","oneOf":[{"$ref":"#/components/schemas/SandflyTypeGeneral"}]}}},"SandflyFactory":{"readOnly":true,"type":"object","allOf":[{"$ref":"#/components/schemas/SandflyCommon"}],"required":["type"],"properties":{"type":{"description":"What kind of sandfly is this (directory, file, user, dependency, recon)?","oneOf":[{"$ref":"#/components/schemas/SandflyTypeGeneral"},{"$ref":"#/components/schemas/SandflyTypeSpecial"}]}}},"SandflyFormat":{"description":"Sandfly format.","type":"string","enum":["4.0"]},"SandflyRuleOperator":{"type":"string","enum":["and","or"]},"SandflyEngineType":{"type":"string","enum":["sandfly_engine_cloaked_direntry","sandfly_engine_dir","sandfly_engine_file","sandfly_engine_process","sandfly_engine_user","sandfly_engine_utmp","sandfly_engine_wtmp","sandfly_engine_btmp","sandfly_engine_lastlog","sandfly_engine_cron","sandfly_engine_at_jobs","sandfly_engine_log_tampering_lastlog_wtmp_missing_record","sandfly_engine_log_tampering_lastlog_history_missing_record","sandfly_engine_os_identify","sandfly_engine_process_masquerade_binary_renamed","sandfly_engine_process_masquerade_binary_mismatched","sandfly_engine_process_masquerade_mixed_case","sandfly_engine_process_binary_time_identical","sandfly_engine_user_password_hash_duplicates","sandfly_engine_user_password_auditor","sandfly_engine_error","sandfly_engine_systemd","sandfly_engine_systemd_session","sandfly_engine_kmodules"]},"SandflyList":{"properties":{"sandfly_ids":{"description":"List of sandflies (a sandfly ID is its name).","items":{"type":"string"},"type":"array"}},"type":"object"},"SandflyOptionsResponseProcess":{"description":"Sandfly process.","properties":{"kill":{"default":false,"description":"Sandfly kill.","type":"boolean"},"suspend":{"default":false,"description":"Sandfly suspend.","type":"boolean"}},"type":"object"},"SandflyResponse":{"type":"object"},"SandflySeverity":{"description":"Severity of Sandfly (0 - informational to 5 - high)","format":"int32","type":"integer","minimum":0,"maximum":5,"enum":[0,1,2,3,4,5]},"SandflySummary":{"properties":{"active":{"default":true,"description":"Is sandfly active? Inactive sandflies will be skipped in any scan.","type":"boolean"},"custom":{"description":"Is sandfly custom?","type":"boolean"},"date_added":{"description":"Sandfly date added.","format":"date-time","type":"string"},"description":{"description":"A short description of what the sandfly does.","type":"string"},"format":{"description":"Sandfly format.","type":"string"},"max_cpu_load":{"description":"Sandfly max CPU load.","maximum":1,"minimum":0,"type":"integer"},"max_disk_load":{"description":"Sandfly max disk load.","type":"integer"},"max_timeout":{"description":"Sandfly max timeout in seconds. Max is 1800","maximum":1800,"minimum":0,"type":"integer"},"name":{"description":"Unique sandfly name. Used as ID. Lower case and underscores (_) only in the values.","type":"string"},"options":{"description":"Sandfly options.","required":["response"],"properties":{"response":{"description":"Sandfly response.","type":"object","properties":{"process":{"$ref":"#/components/schemas/SandflyOptionsResponseProcess"}}}},"type":"object"},"os_compat":{"description":"Sandfly OS compatibility.","properties":{"linux":{"description":"Sandfly Linux compatibility.","items":{"type":"object"},"type":"array"}},"type":"object"},"results_alert":{"description":"Total alerts for this sandfly.","minimum":0,"type":"integer"},"results_error":{"description":"Total errors for this sandfly.","minimum":0,"type":"integer"},"results_passes":{"description":"Total passes for this sandfly.","minimum":0,"type":"integer"},"results_total":{"description":"Total results for this sandfly.","minimum":0,"type":"integer"},"severity":{"$ref":"#/components/schemas/SandflySeverity"},"tags":{"description":"Sandfly tags include type and applicable Mitre tactics and techniques.","items":{"type":"string"},"type":"array"},"type":{"description":"Sandfly type.","$ref":"#/components/schemas/SandflyType"},"version":{"description":"Version of the sandfly in date-time format.","example":"2021-03-11T12:14:09.000Z","type":"string"}},"required":["name","description","version","format","tags","custom","type","active","severity","max_cpu_load","max_disk_load","max_timeout","os_compat","date_added","options","results_alert","results_error","results_passes","results_total"],"type":"object"},"SandflyBriefSummary":{"type":"object","required":["name","description","type","custom","active","tags"],"properties":{"name":{"description":"The name of the sandfly.","type":"string"},"description":{"description":"A description of the sandfly.","type":"string"},"type":{"description":"The type of the sandfly.","$ref":"#/components/schemas/SandflyType"},"custom":{"description":"Indicates if the sandfly is a custom type.","type":"boolean"},"active":{"description":"Indicates if the sandfly is active.","type":"boolean"},"tags":{"description":"A list of tags associated with the sandfly.","type":"array","items":{"type":"string"}}}},"SandflyTags":{"items":{"type":"string"},"type":"array"},"SandflyType":{"allOf":[{"$ref":"#/components/schemas/SandflyTypeGeneral"},{"$ref":"#/components/schemas/SandflyTypeSpecial"},{"$ref":"#/components/schemas/SandflyTypeSystem"}],"description":"What kind of sandfly is this (directory, file, user, dependency, recon)?"},"SandflyTypeGeneral":{"description":"What kind of sandfly is this (directory, file, user, dependency, recon)?","type":"string","enum":["user","process","policy","file","directory","log","recon","incident"]},"SandflyTypeSpecial":{"description":"What kind of sandfly is this (directory, file, user, dependency, recon)?","type":"string","enum":["template"]},"SandflyTypeSystem":{"description":"What kind of sandfly is this (directory, file, user, dependency, recon)?","type":"string","enum":["error"]},"SavedView":{"description":"Saved view.","properties":{"name":{"description":"Name of the saved view.","type":"string"},"namespace":{"description":"Namespace of the table that the view is applied to.","type":"string"},"view":{"description":"JSON string of the view. For internal use by the Sandfly UI only.","x-internal-note":"String data represents the GridInitialState object. See https://mui.com/x/react-data-grid/state/","format":"JSON","type":"string"}},"required":["name","namespace","view"],"type":"object"},"ScanAdhoc":{"properties":{"credentials":{"description":"Credentials object to add at same time as adding these hosts.","items":{"type":"object"},"type":"object"},"hosts":{"description":"Hosts object of hosts to add","items":{"type":"object"},"type":"object"},"jump_hosts":{"description":"List of jump_host objects to use for adding this host.","items":{"type":"object"},"type":"array"},"priority":{"description":"Optional priority to use for scan between -20 high priority and 19 low priority - Default is 0.","format":"int32","type":"integer"},"queue_name":{"description":"scanning node queue name to use to for scan request.","type":"string"},"sandfly_list":{"description":"A list of sandflies to use in the scan.","items":{"type":"string"},"type":"array"},"ssh_host_keys":{"additionalProperties":{"$ref":"#/components/schemas/SshHostKeyConfig"},"description":"Expected SSH host public keys of the hosts to add. If a host key isn't provided for a host, any key will be accepted.","type":"object"},"tags":{"description":"A list of tags to use in the scan.","items":{"type":"string"},"type":"array"},"verify_host_key":{"description":"If true, the SSH key of the host will be recorded during the Host Add operation, then on future scans Sandfly will not authenticate to the host if the host key changes.","type":"boolean"}},"type":"object"},"ScanManual":{"properties":{"host_ids":{"description":"List of host_ids to scan.","items":{"type":"string"},"type":"array"},"host_sequence_ids":{"description":"List of host sequence_ids to scan.","items":{"type":"integer"},"type":"array"},"priority":{"description":"Optional priority to use for scan between -20 high priority and 19 low priority - Default is 0.","format":"int32","type":"integer"},"sandfly_list":{"description":"A list of sandflies to use in the scan.","items":{"type":"string"},"type":"array"}},"type":"object"},"ScanPerformanceReport":{"type":"object","required":["start_time","end_time","scan_summary","hourly_scan_summary","host_scan_summary","tag_alerts"],"properties":{"start_time":{"type":"string","format":"date-time","description":"Start time of this report data period."},"end_time":{"type":"string","format":"date-time","description":"End time of this report data period."},"scan_summary":{"type":"array","description":"Aggregate counts of scan activity.","items":{"type":"object","required":["unique_hosts_scanned"],"properties":{"unique_hosts_scanned":{"type":"integer","description":"Number of unique hosts scanned."}},"allOf":[{"$ref":"#/components/schemas/ScanSummary"}]}},"hourly_scan_summary":{"type":"array","description":"Hourly summary of scan activity.","items":{"type":"object","required":["unique_hosts_scanned","time_bucket"],"properties":{"time_bucket":{"type":"string","format":"date-time","description":"The hour to which this data applies."},"unique_hosts_scanned":{"type":"integer","description":"Number of unique hosts scanned during this time period."}},"allOf":[{"$ref":"#/components/schemas/ScanSummary"}]}},"host_scan_summary":{"type":"array","items":{"type":"object","required":["host_id","target_address","node_name","host_sequence_id"],"properties":{"host_id":{"type":"string","description":"Host ID."},"host_sequence_id":{"type":"integer","description":"Host sequence ID. Will be null if the host has been deleted."},"target_address":{"type":"string","description":"Target address of host."},"node_name":{"type":"string","description":"OS-report hostname."}},"allOf":[{"$ref":"#/components/schemas/ScanSummary"}]}},"tag_alerts":{"type":"array","description":"Alert result counts by sandfly tag.","items":{"type":"object","required":["tag","alerts","category"],"properties":{"tag":{"type":"string","description":"Sandfly tag name."},"alerts":{"type":"integer","description":"Number of alert results for this tag."},"category":{"$ref":"#/components/schemas/ResultTagCategory"}}}}}},"ScanSummary":{"type":"object","required":["total_scans_completed","total_scans_failed","unique_hosts_scanned","total_sandflies_executed","total_alerts","total_errors","total_passes"],"properties":{"total_scans_completed":{"type":"integer","description":"Number of scans successfully completed."},"total_scans_failed":{"type":"integer","description":"Number of scans that experienced scan errors."},"unique_hosts_scanned":{"type":"integer","description":"Number of hosts scanned."},"total_sandflies_executed":{"type":"integer","description":"Number of individual sandflies executed across hosts."},"total_alerts":{"type":"integer","description":"Number of alert results."},"total_errors":{"type":"integer","description":"Number of error results."},"total_passes":{"type":"integer","description":"Number of pass results."}}},"ScheduleType":{"description":"The type of schedule: scan or discover. gather and drift are reserved for system-managed schedules used by auto-drift profiles and cannot be directly created by users.","type":"string","enum":["scan","discover","gather","drift"]},"ScheduleCommon":{"type":"object","required":["hosts","sandflies","all_hosts_immediately"],"properties":{"all_hosts_immediately":{"description":"If true, immediately start scan on all hosts covered by this schedule. If false, scans will be spread out across hosts over the scan schedule interval.","type":"boolean"},"hosts":{"description":"Only present when retrieving individual schedule detail. If specific hosts are included by ID in this schedule, then summary hosts details are listed here.","readOnly":true,"type":"array","items":{"$ref":"#/components/schemas/HostBriefInfo"}},"sandflies":{"description":"Only present when retrieving individual schedule detail. If specific sandflies are included by ID in this schedule, then summary sandfly details are listed here.","readOnly":true,"type":"array","items":{"$ref":"#/components/schemas/SandflyBriefSummary"}}}},"ScheduleMeta":{"required":["id","number_of_runs","date_first_run","date_last_run","date_next_run","paused","system_managed"],"properties":{"id":{"type":"string","description":"Alias to name.","deprecated":true},"date_first_run":{"description":"Time this schedule was first run.","format":"date-time","type":"string"},"date_last_run":{"description":"Time this schedule was last run.","format":"date-time","type":"string"},"date_next_run":{"description":"Time this schedule will next run.","format":"date-time","type":"string"},"number_of_runs":{"description":"How many times this schedule has run.","type":"integer"},"paused":{"description":"Is schedule paused?","type":"boolean"},"system_managed":{"description":"This schedule is managed by the system (e.g. for an autodrift profile) and cannot be edited or deleted directly. It can be paused/unpaused and manually run.","type":"boolean"}},"type":"object"},"ScheduleTypeScan":{"type":"object","allOf":[{"$ref":"#/components/schemas/ScheduleConfigScan"},{"$ref":"#/components/schemas/ScheduleCommon"},{"$ref":"#/components/schemas/ScheduleAddCommon"},{"$ref":"#/components/schemas/ScheduleMeta"}],"required":["covered_hosts","candidate_sandflies"],"properties":{"covered_hosts":{"description":"Only present when retrieving individual schedule details. Lists details of all hosts covered by this schedule.","readOnly":true,"type":"array","items":{"$ref":"#/components/schemas/HostSummaryRollup"}},"candidate_sandflies":{"description":"Only present when retrieving individual schedule details. Lists details of all sandflies that can be used during scans by this schedule.","readOnly":true,"type":"array","items":{"$ref":"#/components/schemas/SandflySummary"}}}},"ScheduleTypeDrift":{"type":"object","allOf":[{"$ref":"#/components/schemas/ScheduleTypeScan"}],"required":["result_profile_id"],"properties":{"result_profile_id":{"description":"If this is a schedule related to a result profile, this will be the ID of the associated result profile. Otherwise, this field will not be present.","type":"integer"}}},"ScheduleTypeGather":{"type":"object","allOf":[{"$ref":"#/components/schemas/ScheduleTypeScan"}],"required":["gather_finish","result_profile_id"],"properties":{"gather_finish":{"readOnly":true,"description":"The approximate time this gather schedule will end and the associated result profile will switch to enforcing mode.","type":"string","format":"date-time"},"result_profile_id":{"description":"If this is a schedule related to a result profile, this will be the ID of the associated result profile. Otherwise, this field will not be present.","type":"integer"}}},"ScheduleTypeDiscover":{"type":"object","allOf":[{"$ref":"#/components/schemas/ScheduleConfigDiscoverIplist"},{"$ref":"#/components/schemas/ScheduleConfigDiscoverNetblock"},{"$ref":"#/components/schemas/ScheduleAddCommon"},{"$ref":"#/components/schemas/ScheduleCommon"},{"$ref":"#/components/schemas/ScheduleMeta"}]},"ScheduleSummary":{"discriminator":{"propertyName":"schedule_type","mapping":{"scan":"#/components/schemas/ScheduleSummaryScan","discover":"#/components/schemas/ScheduleSummaryDiscover","gather":"#/components/schemas/ScheduleSummaryGather","drift":"#/components/schemas/ScheduleSummaryDrift"}},"oneOf":[{"$ref":"#/components/schemas/ScheduleSummaryScan"},{"$ref":"#/components/schemas/ScheduleSummaryDiscover"},{"$ref":"#/components/schemas/ScheduleSummaryGather"},{"$ref":"#/components/schemas/ScheduleSummaryDrift"}]},"ScheduleSummaryScan":{"allOf":[{"$ref":"#/components/schemas/ScheduleConfigDiscover"},{"$ref":"#/components/schemas/ScheduleConfigScan"},{"$ref":"#/components/schemas/HostConnectionCommon"},{"$ref":"#/components/schemas/LinkedCredential"},{"$ref":"#/components/schemas/ScheduleAddCommon"},{"$ref":"#/components/schemas/ScheduleMeta"},{"$ref":"#/components/schemas/HostConnectionRange"},{"$ref":"#/components/schemas/HostConnectionList"}]},"ScheduleSummaryDrift":{"allOf":[{"$ref":"#/components/schemas/ScheduleConfigDiscover"},{"$ref":"#/components/schemas/ScheduleConfigScan"},{"$ref":"#/components/schemas/HostConnectionCommon"},{"$ref":"#/components/schemas/LinkedCredential"},{"$ref":"#/components/schemas/ScheduleAddCommon"},{"$ref":"#/components/schemas/ScheduleMeta"},{"$ref":"#/components/schemas/HostConnectionRange"},{"$ref":"#/components/schemas/HostConnectionList"}],"type":"object","required":["result_profile_id"],"properties":{"result_profile_id":{"description":"If this is a schedule related to a result profile, this will be the ID of the associated result profile. Otherwise, this field will not be present.","type":"integer"}}},"ScheduleSummaryDiscover":{"allOf":[{"$ref":"#/components/schemas/ScheduleConfigDiscover"},{"$ref":"#/components/schemas/ScheduleConfigScan"},{"$ref":"#/components/schemas/HostConnectionCommon"},{"$ref":"#/components/schemas/LinkedCredential"},{"$ref":"#/components/schemas/ScheduleAddCommon"},{"$ref":"#/components/schemas/ScheduleMeta"},{"$ref":"#/components/schemas/HostConnectionRange"},{"$ref":"#/components/schemas/HostConnectionList"}],"type":"object","required":["all_hosts_immediately"],"properties":{"all_hosts_immediately":{"description":"If true, immediately start scan on all hosts covered by this schedule. If false, scans will be spread out across hosts over the scan schedule interval.","type":"boolean"}}},"ScheduleSummaryGather":{"allOf":[{"$ref":"#/components/schemas/ScheduleConfigDiscover"},{"$ref":"#/components/schemas/ScheduleConfigScan"},{"$ref":"#/components/schemas/HostConnectionCommon"},{"$ref":"#/components/schemas/LinkedCredential"},{"$ref":"#/components/schemas/ScheduleAddCommon"},{"$ref":"#/components/schemas/ScheduleMeta"},{"$ref":"#/components/schemas/HostConnectionRange"},{"$ref":"#/components/schemas/HostConnectionList"}],"type":"object","required":["all_hosts_immediately"],"properties":{"all_hosts_immediately":{"description":"If true, immediately start scan on all hosts covered by this schedule. If false, scans will be spread out across hosts over the scan schedule interval.","type":"boolean"},"gather_finish":{"description":"The approximate time this gather schedule will end and the associated result profile will switch to enforcing mode.","type":"string","format":"date-time"},"result_profile_id":{"description":"If this is a schedule related to a result profile, this will be the ID of the associated result profile. Otherwise, this field will not be present.","type":"integer"}}},"Schedule":{"discriminator":{"propertyName":"schedule_type","mapping":{"scan":"#/components/schemas/ScheduleTypeScan","discover":"#/components/schemas/ScheduleTypeDiscover","gather":"#/components/schemas/ScheduleTypeGather","drift":"#/components/schemas/ScheduleTypeDrift"}},"oneOf":[{"$ref":"#/components/schemas/ScheduleTypeScan"},{"$ref":"#/components/schemas/ScheduleTypeDiscover"},{"$ref":"#/components/schemas/ScheduleTypeGather"},{"$ref":"#/components/schemas/ScheduleTypeDrift"}],"type":"object"},"ScheduleAdd":{"type":"object","discriminator":{"propertyName":"schedule_type","mapping":{"scan":"#/components/schemas/ScheduleConfigScan","discover":"#/components/schemas/ScheduleConfigDiscover","gather":"#/components/schemas/ScheduleConfigScan"}},"oneOf":[{"$ref":"#/components/schemas/ScheduleConfigScan"},{"$ref":"#/components/schemas/ScheduleConfigDiscover"}]},"ScheduleAddCommon":{"required":["name","schedule_type"],"type":"object","properties":{"schedule_type":{"$ref":"#/components/schemas/ScheduleType"},"name":{"description":"A readable name for this scheduled scan.","type":"string"}}},"ScheduleConfigCommon":{"required":["minutes_timer_high","minutes_timer_low","restrict_begin_hour","restrict_end_hour"],"type":"object","properties":{"description":{"description":"Schedule description.","type":"string"},"minutes_timer_high":{"description":"Upper limit minutes to wait between scans.","format":"int32","type":"integer"},"minutes_timer_low":{"description":"Lower limit of minutes to wait between scans.","format":"int32","type":"integer"},"offline_cleanup_hours":{"description":"(scan schedule) If set to a positive value, hosts that are in the 'offline' state for longer than this number of hours will be deleted from Sandfly if this schedule attempts to connect to them but fails.","format":"int32","type":"integer"},"paused":{"description":"Boolean flag to set if this scheduled scan is paused or not.","type":"boolean"},"restrict_begin_hour":{"description":"nil or -1 to disable, or a number between 0-24 to indicate the beginning hour (UTC) of the window of time during which this schedule will not run.","format":"int32","type":"integer"},"restrict_end_hour":{"description":"nil or -1 to disable, or a number between 0-24 to indicate the end hour (UTC) of the window of time during which this schedule will not run.","format":"int32","type":"integer"}}},"ScheduleConfigDiscover":{"discriminator":{"propertyName":"ip_type","mapping":{"ip_list":"#/components/schemas/ScheduleConfigDiscoverIplist","ip_range":"#/components/schemas/ScheduleConfigDiscoverNetblock"}},"oneOf":[{"$ref":"#/components/schemas/ScheduleConfigDiscoverIplist"},{"$ref":"#/components/schemas/ScheduleConfigDiscoverNetblock"}]},"ScheduleConfigDiscoverCommon":{"required":["ip_type","discovered_host_tags"],"properties":{"ip_type":{"$ref":"#/components/schemas/HostConnectionType"},"ssh_port":{"default":22,"description":"SSH port to use for scanning.","format":"int32","type":"integer"},"ssh_host_keys":{"additionalProperties":{"$ref":"#/components/schemas/SshHostKeyConfig"},"description":"Expected SSH host public keys of the hosts to add. If a host key isn't provided for a host, any key will be accepted.","type":"object"},"discovered_host_tags":{"description":"(discover schedule) List of tags to set on hosts added by this discover schedule.","$ref":"#/components/schemas/HostTags"},"jump_hosts":{"description":"(discover schedule) List of jump host IDs to connect through when attempting to add hosts during the discover schedule run.","$ref":"#/components/schemas/LinkedJumpHosts"},"queue_name":{"description":"(discover schedule) Name of queue to use when attempting to add hosts during the discover schedule run.","type":"string","default":"main","example":"main"},"verify_host_key":{"default":false,"description":"Verify host key when connecting to a host.","type":"boolean"},"override_directory":{"description":"Directory to run scan from instead of the node configuration values. An empty string means no override. For the behavior of an empty string in the node config file (where an empty string means use the home directory), enter\"~\" here.","type":"string","default":""}},"type":"object"},"ScheduleConfigDiscoverIplist":{"allOf":[{"$ref":"#/components/schemas/ScheduleAddCommon"},{"$ref":"#/components/schemas/ScheduleConfigCommon"},{"$ref":"#/components/schemas/HostConnectionList"},{"$ref":"#/components/schemas/ScheduleConfigDiscoverCommon"},{"$ref":"#/components/schemas/LinkedCredential"}]},"ScheduleConfigDiscoverNetblock":{"allOf":[{"$ref":"#/components/schemas/ScheduleAddCommon"},{"$ref":"#/components/schemas/ScheduleConfigCommon"},{"$ref":"#/components/schemas/HostConnectionRange"},{"$ref":"#/components/schemas/ScheduleConfigDiscoverCommon"},{"$ref":"#/components/schemas/LinkedCredential"}]},"ScheduleConfigScan":{"required":["sandfly_selection_percent","sandfly_type","tags","tags_exclude","tags_exclude_operator","tags_operator","priority","all_hosts_immediately"],"allOf":[{"$ref":"#/components/schemas/ScheduleConfigCommon"},{"$ref":"#/components/schemas/ScheduleAddCommon"}],"properties":{"all_hosts_immediately":{"description":"If true, immediately start scan on all hosts covered by this schedule. If false, scans will be spread out across hosts over the scan schedule interval.","type":"boolean"},"priority":{"description":"(scan schedule) Nice compatible priority of scan on target hosts.","format":"int32","type":"integer"},"sandfly_selection_percent":{"description":"(scan schedule) A number between 5-100 that is a random percentage to select from the sandfly list to run.","format":"int32","type":"integer"},"sandfly_type":{"description":"(scan schedule) List of sandfly types to include in this scan.","items":{"$ref":"#/components/schemas/SandflyTypeGeneral"},"type":"array"},"sandfly_tags":{"description":"(scan schedule) List of sandfly tags to include in this scan. If sandfly_types is also populated, these sandfly tags will act as a filter on the sandflies selected by type. If no sandfly_type list is present, then all active sandflies with the requested tags will be candidates for this scan.","type":"array","items":{"type":"string"}},"sandfly_tags_operator":{"description":"(scan schedule) How to interpret the sandfly_tags field: 'and' if all tags must be present on the sandfly to qualify for this scan, or 'or' if any tag qualifies the sandfly.","$ref":"#/components/schemas/ScanTagOperators"},"sandfly_tags_exclude":{"description":"(scan schedule) List of sandfly tags to exclude in this scan. These take precendent over inclusion based on the 'sandfly_type' and 'sandfly_tag' fields.","type":"array","items":{"type":"string"}},"sandfly_tags_exclude_operator":{"description":"(scan schedule) How to interpret the sandfly_tags_exclude field: 'and' if all tags must be present on the sandfly to exclude for this scan, or 'or' if any tag excludes the sandfly.","$ref":"#/components/schemas/ScanTagOperators"},"sandfly_ids":{"description":"(scan schedule) Names (IDs) of specific sandflies to always include in this scan. These sandflies will be included even if they are inactive, and this list is not filtered by the include/exclude type or tag criteria configured for this scan. Furthermore, these sandflies are guaranteed to always run and are not part of the sandfly_selection_percent amount.","type":"array","items":{"type":"string","description":"Sandfly name."}},"tags":{"description":"(scan schedule) Host tags to include in this scan.","items":{"type":"string"},"type":"array"},"tags_exclude":{"description":"(scan schedule) Host tags to exclude from this scan. These take precedent over inclusion based on the 'tags' field.","items":{"type":"string"},"type":"array"},"tags_exclude_operator":{"description":"(scan schedule) How to interpret the tags_exclude field: 'and' if all tags must be present on the host to it from this scan, or 'or' if any tag excludes the host.","$ref":"#/components/schemas/ScanTagOperators"},"tags_operator":{"description":"(scan schedule) How to interpret the tags field: 'and' if all tags must be present on the host to qualify for this scan, or 'or' if any tag qualifies the host.","$ref":"#/components/schemas/ScanTagOperators"}},"type":"object"},"ScanTagOperators":{"type":"string","enum":["or","and"]},"ScheduleIds":{"properties":{"schedule_ids":{"description":"List of schedule_ids.","items":{"type":"string"},"type":"array"}},"type":"object"},"ScheduleUpdate":{"discriminator":{"propertyName":"schedule_type","mapping":{"scan":"#/components/schemas/ScheduleConfigScan","discover":"#/components/schemas/ScheduleConfigDiscover"}},"type":"object","oneOf":[{"$ref":"#/components/schemas/ScheduleConfigScan"},{"$ref":"#/components/schemas/ScheduleConfigDiscover"}]},"ScrollingResponse":{"properties":{"more_results":{"description":"Indicates if there are more results to be returned.","type":"boolean"},"total":{"description":"Total number of records in this page.","format":"int32","type":"integer"}},"required":["total","more_results"],"type":"object"},"TotalledResponse":{"properties":{"total":{"description":"Total number of records found.","format":"int32","type":"integer"}},"required":["total"],"type":"object"},"ServerConfiguration":{"allOf":[{"$ref":"#/components/schemas/ServerConfigCommon"},{"$ref":"#/components/schemas/ServerConfigGeneral"},{"$ref":"#/components/schemas/ServerConfigSessionTimeouts"},{"$ref":"#/components/schemas/ServerConfigScanningBinary"},{"$ref":"#/components/schemas/ServerConfigSectionElastic"},{"$ref":"#/components/schemas/ServerConfigSectionLLM"},{"$ref":"#/components/schemas/ServerConfigSectionPostgres"},{"$ref":"#/components/schemas/ServerConfigSectionSentinel"},{"$ref":"#/components/schemas/ServerConfigSectionSSO"},{"$ref":"#/components/schemas/ServerConfigSectionTLS"},{"$ref":"#/components/schemas/ServerConfigSectionAdvanced"}],"type":"object"},"ServerConfigurationUpdate":{"allOf":[{"$ref":"#/components/schemas/ServerConfigCommon"},{"$ref":"#/components/schemas/ServerConfigUpdateSections"}]},"ServerConfigUpdateSections":{"type":"object","anyOf":[{"$ref":"#/components/schemas/ServerConfigGeneral"},{"$ref":"#/components/schemas/ServerConfigSessionTimeouts"},{"$ref":"#/components/schemas/ServerConfigScanningBinary"},{"$ref":"#/components/schemas/ServerConfigSectionElastic"},{"$ref":"#/components/schemas/ServerConfigSectionLLM"},{"$ref":"#/components/schemas/ServerConfigSectionPostgres"},{"$ref":"#/components/schemas/ServerConfigSectionSentinel"},{"$ref":"#/components/schemas/ServerConfigSectionSSO"},{"$ref":"#/components/schemas/ServerConfigSectionTLS"},{"$ref":"#/components/schemas/ServerConfigSectionAdvancedEdit"}]},"ServerConfigSectionElastic":{"type":"object","required":["elastic_replication"],"properties":{"elastic_replication":{"$ref":"#/components/schemas/ServerConfigElastic"}}},"ServerConfigSectionLLM":{"type":"object","required":["llm_analysis"],"properties":{"llm_analysis":{"$ref":"#/components/schemas/ServerConfigLLM"}}},"ServerConfigSectionPostgres":{"type":"object","required":["postgres_replication"],"properties":{"postgres_replication":{"$ref":"#/components/schemas/ServerConfigPostgres"}}},"ServerConfigSectionSentinel":{"type":"object","required":["sentinel_replication"],"properties":{"sentinel_replication":{"$ref":"#/components/schemas/ServerConfigSentinel"}}},"ServerConfigSectionSSO":{"type":"object","required":["sso"],"properties":{"sso":{"$ref":"#/components/schemas/ServerConfigSSO"}}},"ServerConfigSectionAdvanced":{"type":"object","required":["advanced"],"properties":{"advanced":{"$ref":"#/components/schemas/ServerConfigAdvanced"}}},"ServerConfigSectionAdvancedEdit":{"type":"object","required":["advanced"],"properties":{"advanced":{"$ref":"#/components/schemas/ServerConfigAdvancedEdit"}}},"ServerConfigSectionTLS":{"type":"object","required":["tls"],"properties":{"tls":{"$ref":"#/components/schemas/ServerConfigTLS"}}},"ServerConfigTLS":{"type":"object","description":"TLS certificate management configuration.","required":["mode","acme_email","acme_directory","user_tls_active"],"properties":{"mode":{"type":"string","enum":["self_signed","acme","none"],"description":"TLS certificate management mode. 'self_signed' generates certificates automatically, 'acme' uses Let's Encrypt or another ACME provider, 'none' runs plain HTTP only (for use behind a TLS-terminating proxy). User-provided certificate files (via SF_TLS_CERT_PATH / SF_TLS_KEY_PATH env vars) are detected automatically and override the configured mode."},"acme_email":{"type":"string","description":"Email address for ACME account registration."},"acme_directory":{"type":"string","description":"ACME provider directory URL. Defaults to Let's Encrypt production."},"user_tls_active":{"type":"boolean","readOnly":true,"description":"Indicates that user-provided TLS certificate files were detected and are being used, overriding the configured mode. This field is read-only and determined at server startup."}}},"ServerConfigCommon":{"required":["config_revision"],"type":"object","properties":{"config_revision":{"format":"int64","type":"integer","description":"Configuration revision number. Must be echoed back to the server. Provides optimistic concurrency control to prevent two users from altering configuration simultaneously."}}},"ServerConfigGeneral":{"type":"object","required":["data_retention_days","pass_retention_days","shared_url_keep_days","maintenance_hour"],"properties":{"data_retention_days":{"format":"int64","type":"integer","description":"Number of days to keep alert results and other data.","default":30,"minimum":1,"maximum":31},"pass_retention_days":{"format":"int64","type":"integer","description":"Number of days to keep pass results.","default":3,"minimum":1,"maximum":31},"shared_url_keep_days":{"format":"int64","type":"integer","description":"Number of days to keep \"share\" URL links generated in the UI.","default":90,"minimum":1,"maximum":9999},"maintenance_hour":{"format":"int64","type":"integer","description":"Hour of the day, on the 24-hour UTC clock, to perform daily system maintenance tasks.","default":0,"minimum":0,"maximum":24},"server_hostname":{"type":"string","description":"The hostname of the Sandfly server, used for SAML ACS URLs, notification links, and other features that need to reference the server's public URL. Once set, this value cannot be changed back to empty."},"server_log_level":{"type":"string","enum":["debug","info"],"description":"Server log verbosity level. Changes take effect immediately unless the SF_LOG_LEVEL environment variable is set, in which case the environment variable takes precedence for the lifetime of the server.","default":"info"}}},"ServerConfigSessionTimeouts":{"type":"object","required":["access_token_minutes","refresh_token_minutes","ui_session_timeout_minutes","ui_session_expiration_minutes"],"properties":{"access_token_minutes":{"format":"int64","type":"integer","description":"Length of time (in minutes) that API access tokens are valid.","default":30,"minimum":5,"maximum":1440},"refresh_token_minutes":{"format":"int64","type":"integer","description":"Length of time (in minutes) that API refresh tokens are valid.","default":1440,"minimum":5,"maximum":44640},"ui_session_timeout_minutes":{"format":"int64","type":"integer","description":"Length of time (in minutes) a UI session can be idle before requiring re-authentication.","default":60,"minimum":5,"maximum":1440},"ui_session_expiration_minutes":{"format":"int64","type":"integer","description":"Maximum time (in minutes) from initial login that a UI session can remain valid, regardless of activity.","default":1440,"minimum":5,"maximum":44640}}},"ServerConfigScanningBinary":{"type":"object","required":["agent_names","agent_reverse_dns_lookup","home_dir_base_paths"],"properties":{"agent_names":{"format":"string","type":"string","description":"Comma-separated list of names to use for the Sandfly binary that is sent to target hosts.","default":"sandfly"},"agent_reverse_dns_lookup":{"type":"boolean","description":"Configure node to perform a Reverse DNS lookup on IP addresses"},"home_dir_base_paths":{"type":"string","description":"Comma-separated list of directories to search for inferred user home directories during scans.","default":"/home"}}},"ServerConfigLLM":{"type":"object","required":["enabled","provider","model","available_models","url","ca_cert","results_limit"],"properties":{"enabled":{"type":"boolean","description":"Indicates of LLM analysis integration is enabled or not."},"provider":{"type":"string","description":"LLM API service to use.","enum":["Claude","custom","DigitalOcean","Gemini","OpenAI","xAI"]},"password":{"type":"string","nullable":true,"description":"API key for the LLM provider. Will be stored encrypted in the Sandfly database and not returned in getconfig calls. Leave as null when updating configuration to not replace the existing saved password."},"model":{"type":"string","description":"Model name to use."},"available_models":{"type":"array","items":{"type":"string"},"readOnly":true,"description":"After saving the configuration with enabled=true, the server will make an API call to the selected provider to get the list of available models. The next time the config is retrieved, this array will have the updated list of available models."},"url":{"type":"string","description":"URL of the custom API. Only allowed to be present when provider = custom"},"ca_cert":{"type":"string","description":"Optional trusted CA certificate, in PEM format, to use with the custom API. Ignored when provider is not custom"},"results_limit":{"type":"integer","description":"Maximum number of results a user is allowed to select for a single analysis."}}},"ServerConfigElastic":{"required":["enabled","url","ca_cert","username"],"description":"ElasticSearch replication settings.","type":"object","properties":{"ca_cert":{"format":"string","type":"string","description":"Trusted CA certificate when connecting to HTTPS Elastic endpoint, in PEM format."},"enabled":{"type":"boolean","description":"Whether or not ElasticSearch replication is enabled."},"password":{"format":"string","type":"string","nullable":true,"description":"Login password for ElasticSearch. Will be stored encrypted in the Sandfly database and not returned in getconfig API calls. When updating configuration, leave null to not replace existing saved password."},"url":{"format":"string","type":"string","description":"ElasticSearch HTTP/HTTPS URL."},"username":{"format":"string","type":"string","description":"ElasticSearch login username."}}},"ServerConfigPostgres":{"type":"object","required":["enabled","username","database","host","extra_options"],"description":"PostgreSQL replication settings.","properties":{"enabled":{"type":"boolean","description":"Indicates if PostgreSQL replication is enabled or not."},"database":{"format":"string","type":"string","description":"Database name on the target PostgreSQL server."},"extra_options":{"format":"string","type":"string","description":"Extra options to include in the connection string to PostgreSQL. Must be in the 'option=value option2=value2 ...' format."},"host":{"format":"string","type":"string","description":"PostgreSQL hostname or IP address."},"password":{"format":"string","type":"string","nullable":true,"description":"PostrgeSQL login password. Will be stored encrypted in the Sandfly database and not returned in getconfig calls. Leave as null when updating configuration to not replace the existing saved password."},"username":{"format":"string","type":"string","description":"PostgreSQL login username."}}},"ServerConfigSentinel":{"type":"object","required":["enabled","ssh_enabled","host_enabled","tenant_id","client_id","ingest_url","dcr_id","stream_name","ssh_stream_name","host_stream_name","alerts_only","auth_method","auth_certificate"],"description":"Microsoft Sentinel replication settings.","properties":{"enabled":{"type":"boolean","description":"Indicates if Sentinel replication is enabled or not."},"ssh_enabled":{"type":"boolean","description":"Indicates if Sentinel SSH Key replication is enabled or not."},"host_enabled":{"type":"boolean","description":"Indicates if Sentinel Hosts replication is enabled or not."},"tenant_id":{"format":"string","type":"string","description":"Microsoft Azure Tenant ID GUID."},"client_id":{"format":"string","type":"string","description":"Microsoft Azure Application Client ID GUID."},"ingest_url":{"format":"string","type":"string","description":"Sentinel Data collection endpoint logs ingestion base URL."},"dcr_id":{"format":"string","type":"string","description":"Sentinel Data collection rule immutable ID."},"stream_name":{"format":"string","type":"string","description":"Sentinel Data collection rule Results custom table stream name."},"ssh_stream_name":{"format":"string","type":"string","description":"Sentinel Data collection rule SSH Key custom table stream name."},"host_stream_name":{"format":"string","type":"string","description":"Sentinel Data collection rule Hosts custom table stream name."},"alerts_only":{"type":"boolean","description":"Indicates type of results to send to Sentinel. True sends only alert and error results, false sends all results."},"auth_method":{"type":"string","description":"Whether to use a client secret or certificate credentials for authentication.","enum":["client_secret","certificate_credentials"]},"auth_certificate":{"type":"string","description":"Only used when auth_method is certificate_credentials. x509 certificate, in PEM format, that matches a certificate in the Azure app registration for Sandfly to authenticate with Azure. Azure requires that the certificate use RSA keys."},"password":{"format":"string","type":"string","nullable":true,"description":"When auth_method is client_secret, this is the Client Secret value to log in to Azure with. When auth_method is certificate_credentials, this is an unencrypted private key in PEM format associated with auth_certificate. In both cases, will be stored encrypted in the Sandfly database and not returned in getconfig calls. Leave as null when updating configuration to not replace the existing saved secret value."}}},"ServerConfigSSO":{"type":"object","description":"SSO configuration options.","required":["saml_enabled","idp_entity_id","idp_certificate","idp_sso_binding","request_signature_method","sp_entity_id","sp_certificate","sp_private_key"],"properties":{"idp_certificate":{"format":"string","type":"string","description":"IDP certificate (IDP X509 Certificate provided in the IDP's SAML metadata)."},"idp_entity_id":{"format":"string","type":"string","description":"IDP entity ID (entityID attribute on the EntityDescriptor element of the IDP's SAML metadata)."},"idp_sso_binding":{"format":"string","type":"string","description":"IDP SSO binding URL."},"request_signature_method":{"$ref":"#/components/schemas/RequestSignatureMethod"},"sp_certificate":{"format":"string","type":"string","description":"If request signing is used, this Sandfly system's certificate."},"sp_entity_id":{"format":"string","type":"string","description":"This Sandfly system's client entity ID."},"sp_private_key":{"format":"string","type":"string","description":"If request signing is used, this Sandfly system's private key."},"saml_enabled":{"type":"boolean","description":"Is SAML SSO enabled for this Sandfly instance."}}},"ServerConfigAdvanced":{"type":"object","description":"Advanced performance tuning configuration.","required":["db_pool_size","db_pool_size_nodes","result_workers","disable_nightly_maintenance","disable_strict_tls_policy","sso_redirect_prefix"],"properties":{"db_pool_size":{"type":"integer","format":"int64","minimum":20,"maximum":100,"description":"Database connection pool size for general operations.","default":20},"db_pool_size_nodes":{"type":"integer","format":"int64","minimum":20,"maximum":100,"description":"Database connection pool size dedicated to node result ingestion.","default":30},"result_workers":{"type":"integer","format":"int64","minimum":5,"maximum":100,"description":"Number of concurrent workers for processing scan results.","default":20},"disable_nightly_maintenance":{"type":"boolean","description":"Disable nightly database maintenance tasks. When true, relies on PostgreSQL autovacuum for maintenance.","default":false},"disable_strict_tls_policy":{"type":"boolean","description":"Disable strict TLS policy for the server. When true, uses Go's default TLS configuration. When false (default), enforces TLS 1.2+ with a limited set of strong cipher suites. Changes require a server restart to take effect.","default":false},"sso_redirect_prefix":{"type":"string","description":"Optional URL prefix for SSO redirect after successful SAML authentication. If set, the SSO redirect will use this prefix instead of the root path."}}},"ServerConfigAdvancedEdit":{"type":"object","description":"Advanced performance tuning configuration. Changes require a server restart to take effect.","properties":{"db_pool_size":{"type":"integer","format":"int64","nullable":true,"minimum":20,"maximum":100,"description":"Database connection pool size for general operations.","default":20},"db_pool_size_nodes":{"type":"integer","format":"int64","nullable":true,"minimum":20,"maximum":100,"description":"Database connection pool size dedicated to node result ingestion.","default":30},"result_workers":{"type":"integer","format":"int64","nullable":true,"minimum":5,"maximum":100,"description":"Number of concurrent workers for processing scan results.","default":20},"disable_nightly_maintenance":{"type":"boolean","nullable":true,"description":"Disable nightly database maintenance tasks. When true, relies on PostgreSQL autovacuum for maintenance.","default":false},"disable_strict_tls_policy":{"type":"boolean","nullable":true,"description":"Disable strict TLS policy for the server. When true, uses Go's default TLS configuration. When false (default), enforces TLS 1.2+ with a limited set of strong cipher suites. Changes require a server restart to take effect.","default":false},"sso_redirect_prefix":{"type":"string","nullable":true,"description":"Optional URL prefix for SSO redirect after successful SAML authentication. If set, the SSO redirect will use this prefix instead of the root path."}}},"RequestSignatureMethod":{"type":"string","enum":["none","sha1","sha256","sha512"],"description":"Request signing method. Typically 'none'."},"StandardResponse":{"allOf":[{"$ref":"#/components/schemas/StandardResponseStatus"}],"properties":{"data":{"description":"Data that can go along with the status.","type":"string"}},"required":["data"],"type":"object"},"StandardResponseStatus":{"properties":{"detail":{"description":"Extended explanation of status.","type":"string"},"formattedDetail":{"description":"Optional additional details about the status (typically an error) that, if present and not an empty string, should be displayed as pre-formatted, monospaced text.","type":"string"},"status":{"description":"HTTP status code.","format":"int32","maximum":599,"minimum":100,"type":"integer"},"title":{"description":"Short description of status.","type":"string"}},"required":["status","title","detail"],"type":"object"},"StatusNodes":{"required":["queues","tasks"],"properties":{"queues":{"description":"List of queues available.","items":{"required":["name","total"],"properties":{"name":{"description":"Name of queue.","type":"string"},"total":{"description":"Total number of nodes servicing this queue.","type":"integer"}},"type":"object"},"type":"array"},"tasks":{"description":"List of tasks in waiting.","required":["queues","total_tasks"],"properties":{"queues":{"description":"List of queues available.","items":{"$ref":"#/components/schemas/StatusQueue"},"type":"array"},"total_tasks":{"description":"Total number of tasks.","type":"integer"}},"type":"object"}},"type":"object"},"StatusQueue":{"required":["name","tasks","total"],"properties":{"name":{"description":"Name of queue available.","type":"string"},"tasks":{"description":"List of tasks in queue.","items":{"$ref":"#/components/schemas/StatusTask"},"type":"array"},"total":{"description":"Total number of hosts in queue.","type":"integer"}},"type":"object"},"StatusSchedule":{"type":"object","description":"Information about a schedule that is currently running and adding hosts to the scan queue.","required":["id","name","start_time","finish_time","total_hosts","remaining_hosts"],"properties":{"id":{"type":"string","description":"ID of the active schedule."},"name":{"type":"string","description":"Name of the active schedule."},"start_time":{"type":"string","format":"date-time","description":"Time this schedule ran began."},"finish_time":{"type":"string","description":"Time this schedule run will finish."},"total_hosts":{"type":"integer","description":"Number of hosts in this schedule run."},"remaining_hosts":{"type":"integer","description":"Number of hosts remaining to be added to the scan queue."}}},"StatusSystem":{"type":"object","required":["hosts","results"],"properties":{"hosts":{"required":["total","total_active","total_inactive"],"properties":{"total":{"type":"integer"},"total_active":{"type":"integer"},"total_inactive":{"type":"integer"}}},"results":{"required":["hourly"],"properties":{"hourly":{"required":["alert","pass","error","all"],"properties":{"alert":{"$ref":"#/components/schemas/StandardTimeBasedGraphData"},"pass":{"$ref":"#/components/schemas/StandardTimeBasedGraphData"},"error":{"$ref":"#/components/schemas/StandardTimeBasedGraphData"},"all":{"$ref":"#/components/schemas/StandardTimeBasedGraphData"}}}}}}},"StatusByNodes":{"required":["nodes","schedules","nightly_maintenance_running","nightly_maintenance_start","ingest_queue_depth"],"properties":{"nodes":{"$ref":"#/components/schemas/StatusNodes"},"schedules":{"type":"array","items":{"$ref":"#/components/schemas/StatusSchedule"}},"nightly_maintenance_running":{"type":"boolean","description":"The nightly maintenance is running."},"nightly_maintenance_start":{"type":"string","format":"date-time","description":"If maintenance is running, the time is started. Null if not running.","nullable":true},"ingest_queue_depth":{"type":"integer","description":"The number of finished scans that are waiting in the server result ingestion queue to be imported into the database."}},"type":"object"},"StatusByTags":{"required":["Collection","Command And Control","Credential Access","Defense Evasion","Directory","Discovery","Execution","Exfiltration","File","Impact","Initial Access","Lateral Movement","Log","Persistence","Policy","Privilege Escalation","Process","Recon","User"],"properties":{"Collection":{"$ref":"#/components/schemas/TimeBasedTotalGraphData"},"Command And Control":{"$ref":"#/components/schemas/TimeBasedTotalGraphData"},"Credential Access":{"$ref":"#/components/schemas/TimeBasedTotalGraphData"},"Defense Evasion":{"$ref":"#/components/schemas/TimeBasedTotalGraphData"},"Directory":{"$ref":"#/components/schemas/TimeBasedTotalGraphData"},"Discovery":{"$ref":"#/components/schemas/TimeBasedTotalGraphData"},"Execution":{"$ref":"#/components/schemas/TimeBasedTotalGraphData"},"Exfiltration":{"$ref":"#/components/schemas/TimeBasedTotalGraphData"},"File":{"$ref":"#/components/schemas/TimeBasedTotalGraphData"},"Impact":{"$ref":"#/components/schemas/TimeBasedTotalGraphData"},"Initial Access":{"$ref":"#/components/schemas/TimeBasedTotalGraphData"},"Lateral Movement":{"$ref":"#/components/schemas/TimeBasedTotalGraphData"},"Log":{"$ref":"#/components/schemas/TimeBasedTotalGraphData"},"Persistence":{"$ref":"#/components/schemas/TimeBasedTotalGraphData"},"Policy":{"$ref":"#/components/schemas/TimeBasedTotalGraphData"},"Privilege Escalation":{"$ref":"#/components/schemas/TimeBasedTotalGraphData"},"Process":{"$ref":"#/components/schemas/TimeBasedTotalGraphData"},"Recon":{"$ref":"#/components/schemas/TimeBasedTotalGraphData"},"User":{"$ref":"#/components/schemas/TimeBasedTotalGraphData"}},"type":"object"},"StatusTask":{"properties":{"host_id":{"description":"ID of the host this task is for.","type":"string"},"hostname":{"description":"Name of host this task is for.","type":"string"},"queue":{"description":"Name of queue this task is in.","type":"string"},"run_id":{"description":"ID of the run this task is part of.","type":"string"},"source":{"description":"Source of host this task is for.","type":"string"},"start_time":{"description":"Time this task started.","type":"string"},"target_address":{"description":"Address of host this task is for.","type":"string"},"task_type":{"description":"Type of task.","enum":["add_host","scan"],"type":"string"},"assigned":{"description":"Has this task been assigned to a node?","type":"boolean"}},"type":"object"},"SyslogAdd":{"required":["name"],"allOf":[{"$ref":"#/components/schemas/SyslogUpdate"}],"properties":{"name":{"description":"A readable name for this syslog entry.","type":"string"}},"type":"object"},"SyslogUpdate":{"required":["hostname","udp_port","pass_facility","alert_facility","audit_facility","error_facility","transport","use_tls","ignore_certs","ca_cert_b64"],"properties":{"hostname":{"description":"hostname or IP address used with this syslog entry.","type":"string","format":"uri"},"pass_facility":{"description":"Integer Syslog Facility code for Pass Results","type":"integer","default":-1,"minimum":-1,"maximum":23},"alert_facility":{"description":"Integer Syslog Facility code for Alert Results","type":"integer","default":-1,"minimum":-1,"maximum":23},"audit_facility":{"description":"Integer Syslog Facility code for Audit Logs","type":"integer","default":-1,"minimum":-1,"maximum":23},"error_facility":{"description":"Integer Syslog Facility code for Scan Error Logs","type":"integer","default":-1,"minimum":-1,"maximum":23},"udp_port":{"description":"Port number to use to send syslog data (despite 'udp' in the property name, this is also used for TCP connections).","format":"int32","type":"integer","default":514},"transport":{"$ref":"#/components/schemas/SyslogTransport"},"use_tls":{"description":"When using TCP transport, use TLS. This property has no effect if transport is 'udp'.","type":"boolean","default":false},"ignore_certs":{"description":"When using TLS, set this property to true to disable certificate validation. This property has no effect unless transport=tcp and use_tls=true.","type":"boolean","default":false},"ca_cert_b64":{"description":"Optional base64-encoded PEM-format certificate to append to the system certificate pool to use for syslog TLS server certificate validation. This property has no effect unless transport=tcp, use_tls=true, and ignore_certs=false.","type":"string"}},"type":"object"},"SyslogAlert":{"type":"object","required":["id","name","hostname","udp_port","pass_facility","alert_facility","audit_facility","error_facility","transport","use_tls","ignore_certs","ca_cert_b64"],"properties":{"id":{"description":"Alias for name.","type":"string","deprecated":false},"name":{"description":"A unique, readable name for this syslog entry.","type":"string"},"hostname":{"description":"hostname or IP address used with this syslog entry.","type":"string","format":"uri"},"udp_port":{"description":"UDP port number to use to send syslog data (despite 'udp' in the property name, this is also used for TCP connections).","type":"integer","default":514},"pass_facility":{"description":"Integer Syslog Facility code for Pass Results","type":"integer","default":-1},"alert_facility":{"description":"Integer Syslog Facility code for Alert Results","type":"integer","default":-1},"audit_facility":{"description":"Integer Syslog Facility code for Audit Logs","type":"integer","default":-1},"error_facility":{"description":"Integer Syslog Facility code for Scan Error Logs","type":"integer","default":-1},"transport":{"$ref":"#/components/schemas/SyslogTransport"},"use_tls":{"description":"When using TCP transport, use TLS. This property has no effect if transport is 'udp'.","type":"boolean","default":false},"ignore_certs":{"description":"When using TLS, set this property to true to disable certificate validation. This property has no effect unless transport=tcp and use_tls=true.","type":"boolean","default":false},"ca_cert_b64":{"description":"Optional base64-encoded PEM-format certificate to append to the system certificate pool to use for syslog TLS server certificate validation. This property has no effect unless transport=tcp, use_tls=true, and ignore_certs=false.","type":"string"}}},"SyslogTransport":{"description":"syslog transport to use - TCP or UDP.","type":"string","default":"udp","enum":["udp","tcp"]},"SyslogAlerts":{"properties":{"data":{"description":"Syslog entries","items":{"type":"object"},"type":"array"},"total":{"description":"Total number of records found.","format":"int32","type":"integer"}},"type":"object"},"SystemError":{"type":"object"},"SystemHosts":{"description":"Host object containing what was discovered about a host as it was added to the system inventory.","properties":{"active":{"description":"Is this host active (valid credentials and login)?","type":"boolean"},"authentication_status":{"description":"What is the state of the authentication? ok, failed, error","type":"string"},"credentials_id":{"description":"credentials_id to use for logging into this host.","type":"string"},"data":{"description":"Raw data of system information collected.","nullable":true,"properties":{},"type":"object"},"date_first_seen":{"description":"Date first saw this host.","format":"date-time","nullable":true,"type":"string"},"date_last_seen":{"description":"Last time we saw this host.","format":"date-time","nullable":true,"type":"string"},"first_seen_ip_addr":{"description":"First IP address we saw for this host.","nullable":true,"type":"string"},"host_id":{"description":"A unique ID for this host (ssh key fingerprint), or the host_name if we saw no SSH.","type":"string"},"host_name":{"description":"The hostname or IP of the host.","type":"string"},"last_seen_ip_addr":{"description":"Last IP address we saw for this host.","nullable":true,"type":"string"},"os":{"description":"Operating system data collected.","nullable":true,"properties":{},"type":"object"},"run_id":{"description":"Unique Run ID used to get this information.","type":"string"},"ssh_key_fingerprint":{"description":"SSH fingerprint of remote host.","nullable":true,"type":"string"},"ssh_port":{"description":"SSH port used for this host.","format":"int32","type":"integer"},"tags":{"description":"A list of tags for this host.","items":{"type":"string"},"type":"array"},"version":{"description":"Version type for this record.","format":"int32","type":"integer"}},"type":"object"},"SystemResults":{"type":"object"},"TagSummary":{"description":"An collection of tags with totals.","items":{"type":"object","required":["tag","total"],"properties":{"tag":{"type":"string","description":"Unique display name for tag."},"total":{"type":"integer","description":"Total number of tags."}}},"type":"array"},"TagsStatus":{"type":"string","enum":["Collection","Command And Control","Credential Access","Defense Evasion","Directory","Discovery","Execution","Exfiltration","File","Impact","Initial Access","Lateral Movement","Log","Persistence","Policy","Privilege Escalation","Process","Recon","User"]},"ResultTagCategory":{"type":"string","enum":["tactic","technique","sandfly_type","custom"],"description":"Tag category."},"StandardTimeBasedGraphData":{"type":"object","required":["total","data"],"properties":{"total":{"type":"integer"},"data":{"type":"array","items":{"type":"object","required":["time","value"],"properties":{"time":{"type":"string"},"value":{"type":"integer"}}}}}},"TimeBasedTotalGraphData":{"type":"object","required":["total","data"],"properties":{"total":{"type":"integer"},"data":{"type":"array","items":{"type":"object","required":["time","total"],"properties":{"time":{"type":"string"},"total":{"type":"integer"}}}}}},"StandardTimeRangeDataPoint":{"type":"object","required":["begin","end","count"],"description":"Time interval with a value associated.","properties":{"begin":{"type":"string","format":"date-time","description":"Begin date of this time interval."},"end":{"type":"string","format":"date-time","description":"End date of this time interval."},"count":{"type":"integer","description":"Number of data points during this time interval."}}},"TagsSandflies":{"description":"An array of sandfly tag objects with totals.","items":{"type":"object","required":["tag","total"],"properties":{"tag":{"type":"string","description":"Unique display name for tag."},"total":{"type":"integer","description":"Total number of sandflies with this tag."}}},"type":"array"},"TaskQueues":{"description":"List of task queues.","type":"object","required":["queues"],"properties":{"queues":{"type":"array","items":{"type":"object","required":["name","total"],"properties":{"name":{"type":"string","description":"Task queue name."},"total":{"type":"integer","description":"Number of nodes servicing this queue."}}}}}},"ThreatFeed":{"type":"object","allOf":[{"$ref":"#/components/schemas/ThreatFeedEdit"}],"properties":{"id":{"type":"integer","description":"Database-assigned unique identifier for the threat feed.","readOnly":true},"state":{"type":"string","description":"Current state of the threat feed.","enum":["disabled","pending","ok","error"],"readOnly":true},"last_update":{"type":"string","format":"date-time","nullable":true,"description":"Timestamp of the last update, if the threat feed has ever been loaded.","readOnly":true},"last_update_message":{"type":"string","description":"Message from the last update.","readOnly":true}},"required":["id","state"]},"ThreatFeedEdit":{"type":"object","properties":{"name":{"type":"string","description":"Name of the threat feed."},"description":{"type":"string","description":"Description of the threat feed."},"active":{"type":"boolean","description":"Indicates whether the threat feed is active."},"url":{"type":"string","format":"uri","description":"URL of the threat feed."},"ca_cert_base64":{"type":"string","description":"Optional base64-encoded PEM-format CA certificate for the feed URL if using HTTPS and a custom CA is used."},"lookup_url_template":{"type":"string","description":"Template URL for lookup queries. If a non-empty string, this URL will be presented to users to look up more information about the threat on alert results. The string \"$HASH\" in the URL template will be replaced by the hash that matched."},"interval_minutes":{"type":"integer","description":"Interval in minutes to reload the feed from the source URL."}},"required":["name","description","active","url","ca_cert_base64","lookup_url_template","interval_minutes"]},"User":{"required":["created_date","email","full_name","last_login_date","last_login_ip","logins","logins_failed","logins_failed_count","password","preferences","roles","sso","username"],"properties":{"created_date":{"description":"Date this user was created","format":"date-time","type":"string"},"email":{"description":"Email address for the user.","type":"string","format":"email"},"full_name":{"description":"Full name of user.","type":"string"},"last_login_date":{"description":"Last login date/time for this user.","format":"date-time","nullable":true,"type":"string"},"last_login_ip":{"description":"Last login IP address we saw this user.","format":"string","type":"string"},"logins":{"description":"An comma delimited array of the dates and locations this user has ever logged in from.","items":{"type":"string"},"type":"array"},"logins_failed":{"description":"An comma delimited array of the dates and locations this user has failed logged in from.","items":{"type":"string"},"type":"array"},"logins_failed_count":{"description":"A counter of the number of failed logins from the last successful login. Used to detect brute forcers.","format":"int64","type":"integer"},"password":{"description":"User's password (used for setting during creation; not returned)","type":"string"},"preferences":{"description":"Preferences for user.","type":"string"},"roles":{"description":"Roles this user has access to.","items":{"anyOf":[{"$ref":"#/components/schemas/UserRoles"},{"$ref":"#/components/schemas/MachineRoles"}]},"type":"array"},"sso":{"description":"False for a local Sandfly user, true for an SSO user. Cannot change once user is created.","type":"boolean"},"username":{"description":"Username","type":"string","not":{"enum":["system"]}}},"type":"object"},"SystemUser":{"readOnly":true,"required":["created_date","email","full_name","last_login_date","last_login_ip","logins","logins_failed","logins_failed_count","password","preferences","roles","sso","username"],"properties":{"created_date":{"description":"Date this user was created","format":"date-time","type":"string"},"email":{"description":"Email address for the user.","type":"string","format":"email"},"full_name":{"description":"Full name of user.","type":"string"},"last_login_date":{"description":"Last login date/time for this user.","format":"date-time","nullable":true,"type":"string"},"last_login_ip":{"description":"Last login IP address we saw this user.","format":"string","type":"string"},"logins":{"description":"An comma delimited array of the dates and locations this user has ever logged in from.","items":{"type":"string"},"type":"array"},"logins_failed":{"description":"An comma delimited array of the dates and locations this user has failed logged in from.","items":{"type":"string"},"type":"array"},"logins_failed_count":{"description":"A counter of the number of failed logins from the last successful login. Used to detect brute forcers.","format":"int64","type":"integer"},"password":{"description":"User's password (used for setting during creation; not returned)","type":"string"},"preferences":{"description":"Preferences for user.","type":"string"},"roles":{"description":"Roles this user has access to.","items":{"allOf":[{"$ref":"#/components/schemas/SystemRoles"}]},"type":"array"},"sso":{"description":"False for a local Sandfly user, true for an SSO user. Cannot change once user is created.","type":"boolean"},"username":{"description":"Username","type":"string","enum":["system"]}},"type":"object"},"UserRoles":{"type":"string","enum":["admin","user"]},"NotificationType":{"type":"string","enum":["syslog","email","webhook"]},"MachineRoles":{"type":"string","enum":["api_result_read","api_scan"]},"SystemRoles":{"type":"string","enum":["system"]},"UserAdd":{"required":["username","roles"],"properties":{"email":{"description":"Optional email address for the user.","nullable":true,"type":"string","format":"email"},"full_name":{"description":"Optional full name of user.","nullable":true,"type":"string"},"password":{"description":"Password","type":"string","nullable":true},"preferences":{"description":"Optional preferences for user.","nullable":true,"type":"string"},"sso":{"type":"boolean","default":false,"nullable":true,"description":"Is user for SSO use."},"roles":{"description":"Roles this user can access.","items":{"anyOf":[{"$ref":"#/components/schemas/UserRoles"},{"$ref":"#/components/schemas/MachineRoles"}]},"type":"array"}},"type":"object"},"UserPassword":{"required":["password"],"properties":{"password":{"description":"new password string","format":"password","type":"string"},"old_password":{"description":"current password string; required when a user is changing their own password","format":"password","type":"string"}},"type":"object"},"UserUpdate":{"properties":{"email":{"description":"Optional email address for the user.","type":"string","format":"email"},"full_name":{"description":"Optional full name of user.","type":"string"},"password":{"description":"Password","type":"string"},"preferences":{"description":"Optional preferences for user.","type":"string"},"roles":{"description":"Roles this user can access.","items":{"type":"string"},"type":"array"}},"type":"object"},"Version":{"properties":{"build_date":{"description":"build date","type":"string"},"copyright":{"description":"copyright string","type":"string"},"node_public_key":{"description":"ed25519 public key of the nodes, according to the server's configuration file","type":"string"},"server_public_key":{"description":"ed25519 public key of this server","type":"string"},"version":{"description":"version string","type":"string"},"website":{"description":"website string","type":"string"}},"type":"object"},"WhitelistRuleSummary":{"type":"object","required":["id","sandfly","active","all_hosts","host_ids","exclude_sandfly","rule_op","rules","comment","hosts_covered"],"properties":{"id":{"type":"integer","description":"The ID of the whitelist rule."},"sandfly":{"type":"string","description":"Sandfly associated with this rule."},"active":{"type":"boolean","description":"If true, the whitelist rule is enabled. If false, the whitelist will not be applied to results."},"all_hosts":{"type":"boolean","description":"Whether the whitelist rule applies to all hosts or not."},"host_ids":{"type":"array","items":{"type":"string","description":"The IDs of the hosts that will have this whitelist rule applied."}},"host_tags":{"description":"Host that match any of these tags will have this whitelist rule applied.","$ref":"#/components/schemas/HostTags"},"exclude_sandfly":{"type":"boolean","description":"If true, this sandfly will not run on configured hosts and disregard any rules."},"rule_op":{"$ref":"#/components/schemas/WhitelistRuleOperator"},"rules":{"type":"array","items":{"type":"string","description":"The rules that qualify a match with a result from this sandfly.","format":"Expr","example":"process.name == 'oldproc' && process.date.created_minutes > 1440"}},"comment":{"type":"string","description":"A comment about this whitelist rule."},"hosts_covered":{"type":"integer","description":"Number of hosts in total covered by rule."}}},"WhitelistRule":{"type":"object","required":["host_info"],"allOf":[{"$ref":"#/components/schemas/WhitelistRuleSummary"}],"properties":{"host_info":{"type":"object","description":"Dictionary of hosts by ID","additionalProperties":{"$ref":"#/components/schemas/HostBriefInfo"}}}},"WhitelistRuleOperator":{"type":"string","enum":["and","or"]},"WhitelistRulesDelete":{"type":"object","required":["whitelist_ids"],"properties":{"whitelist_ids":{"type":"array","description":"Array of whitelist IDs for deletion","items":{"type":"integer","description":"Whitelist IDs"}}}},"WhitelistRuleConfig":{"description":"","type":"object","required":["sandfly"],"properties":{"sandfly":{"type":"string","description":"Name of the sandfly this rule relates to."},"all_hosts":{"type":"boolean","description":"Does this rule apply to all hosts. If true, host_ids and host_tags will be ignored.","default":false},"host_ids":{"type":"array","description":"A list of host IDs that will have this rule applied.","items":{"type":"string"},"default":[]},"host_tags":{"type":"array","description":"A list of host tags. If a host matches any tag, it will have this rule applied.","items":{"type":"string"},"default":[]},"rule_op":{"$ref":"#/components/schemas/WhitelistRuleOperator","default":"and"},"rules":{"type":"array","description":"At least one rule is required if this isn't a sandfly exclusion whitelist.","items":{"type":"string","description":"The rules that qualify a match with a result from this sandfly.","format":"Expr","example":"process.name == 'oldproc' && process.date.created_minutes > 1440"},"default":[]},"exclude_sandfly":{"type":"boolean","description":"If true, this sandfly will not run on configured hosts and disregard any rules.","default":false},"active":{"type":"boolean","description":"If true, the whitelist rule is enabled. If false, the whitelist will not be applied to results.","default":true},"comment":{"type":"string","description":"A descriptive comment about this whitelist rule.","default":""}}},"HostBriefInfo":{"type":"object","required":["id","host_sequence_id","hostname","node_name","date_last_seen","last_seen_ip_addr","active"],"properties":{"id":{"type":"string","description":"The ID of the host."},"host_sequence_id":{"type":"integer","description":"Sequence ID of the host."},"hostname":{"type":"string","description":"The hostname of the host."},"node_name":{"type":"string","description":"The node name of the host."},"date_last_seen":{"type":"string","description":"The date the host was last seen."},"last_seen_ip_addr":{"type":"string","description":"The last seen IP address of the host."},"active":{"type":"boolean","description":"Whether the host is active or not."}}},"WhitelistRuleIds":{"properties":{"whitelist_ids":{"description":"List of whitelist_ids.","items":{"type":"integer"},"type":"array"}},"type":"object"},"ProfileType":{"type":"string","readOnly":true,"enum":["legacy_profile","autodrift_profile"],"description":"Legacy or autodrift profile."},"ProfileMeta":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/ProfileType"},"id":{"type":"integer","readOnly":true,"description":"Unique ID assigned by the server for this result profile."},"state":{"$ref":"#/components/schemas/ProfileState"},"paused":{"type":"boolean","default":false,"description":"Indicates if this profile is paused. When paused, no drift alerts will be generated on the associated hosts, nor will results be whitelisted."},"scan_schedule":{"type":"boolean","readOnly":true,"description":"Indicates if this is a drift profile that is configured to have an associated drift scan schedule."},"create_date":{"type":"string","readOnly":true,"description":"Date this result profile was created."},"hosts_covered_whitelist":{"type":"integer","description":"The number of distinct hosts, either directly or via tags, that this result profile applies to in 'whitelist' mode."},"hosts_covered_drift":{"type":"integer","description":"The number of distinct hosts, either directly or via tags, that this result profile applies to in 'drift' mode."},"total_sandflies":{"type":"integer","description":"The number of distinct sandflies that this result profile includes results for."}},"required":["id","state","paused","create_date","type"]},"ProfileState":{"type":"string","readOnly":true,"description":"Whether this profile is in gather or enforce mode.","enum":["gather","enforce"]},"ProfileCommon":{"type":"object","properties":{"name":{"type":"string","description":"Display name of this result profile."},"description":{"type":"string","description":"Description of this result profile."}},"required":["name"]},"HostLink":{"oneOf":[{"type":"object","required":["host_id"],"properties":{"host_id":{"type":"string","description":"Host ID. If host_sequence_id is populated, this cannot be populated."}}},{"type":"object","required":["host_sequence_id"],"properties":{"host_sequence_id":{"type":"integer","description":"Host sequence_id. If host_id is populated, this cannot be populated."}}}]},"ProfileAppendRequest":{"oneOf":[{"$ref":"#/components/schemas/ProfileAppendHostsResults"},{"$ref":"#/components/schemas/ProfileAppendResults"},{"$ref":"#/components/schemas/ProfileAppendHostsSandflies"}]},"ProfileAppendHostsResults":{"type":"object","required":["hosts","user_note"],"properties":{"hosts":{"description":"List of Host IDs to take a results snapshot of for this result profile.","type":"array","items":{"$ref":"#/components/schemas/HostLink"}},"user_note":{"description":"User-provided descriptive note explaining the results that are being added.","type":"string"}}},"ProfileAppendResults":{"type":"object","required":["result_ids","user_note"],"properties":{"result_ids":{"description":"List of individual result IDs to take a snapshot of for this result profile.","type":"array","items":{"type":"integer"}},"user_note":{"description":"User-provided descriptive note explaining the results that are being added.","type":"string"}}},"ProfileAppendHostsSandflies":{"type":"object","required":["host_sandflies","user_note"],"properties":{"host_sandflies":{"description":"Sandflies on a specific host to take a snapshot of for this result profiles.","type":"object","allOf":[{"$ref":"#/components/schemas/HostLink"}],"required":["sandflies"],"properties":{"sandflies":{"type":"array","items":{"type":"string"},"description":"Sandflies from which to add results."}}},"user_note":{"description":"User-provided descriptive note explaining the results that are being added.","type":"string"}}},"ProfileCreateRequest":{"description":"Result profile details.","allOf":[{"$ref":"#/components/schemas/ProfileCommon"},{"$ref":"#/components/schemas/ProfileAppendRequest"}],"properties":{"associations":{"$ref":"#/components/schemas/ProfileAssociations"}}},"ProfileAutoDriftOptions":{"type":"object","description":"Options that are only relevant for auto-drift result profiles.","required":["scope","model_hosts","covered_hosts","gather_options","schedule_options"],"properties":{"scope":{"$ref":"#/components/schemas/ProfileAutoScope"},"model_hosts":{"description":"The hosts to use as the model (i.e. template) hosts for expected results.","$ref":"#/components/schemas/ProfileAutoHosts"},"covered_hosts":{"description":"The hosts that this profile should detect drift on (and optionally whitelist) after the results from the model host(s) are gathered.","$ref":"#/components/schemas/ProfileAutoHosts"},"gather_options":{"description":"When present, this profile will enter gather mode and run gather schedules as configured. If null, no gather schedule will be created and the profile will immediately enter enforcing mode.","nullable":true,"$ref":"#/components/schemas/ProfileGatherOptions"},"schedule_options":{"description":"When present, the new profile will automatically have a scan schedule associated with it that scans the covered hosts with the selected sandflies for drift detection. If null, no scan schedule will be created.","nullable":true,"$ref":"#/components/schemas/ProfileScheduleOptions"}}},"ProfileAutoHosts":{"type":"object","description":"Hosts, included by tag or specific host IDs, to use as the model or covered hosts in an auto-drift result profile.","required":["host_sequence_ids","host_tags","apply_host_tags"],"properties":{"host_sequence_ids":{"type":"array","items":{"type":"integer"},"description":"A list of host sequence IDs."},"host_tags":{"type":"array","items":{"type":"string"},"description":"A list of host tags."},"apply_host_tags":{"type":"array","items":{"type":"string"},"description":"Tags in this array will be applied (added to) the listed host IDs. This allows users to select some hosts and add new tags to them at the same time instead of needing to separately tag hosts first. When tags are present in this list, the individual hosts will be removed from the final profile associations and be included by tag instead."}}},"ProfileAutoDriftTemplate":{"type":"object","properties":{"name":{"type":"string","description":"The name of the template."},"description":{"type":"string","description":"A description of the template's purpose."},"sandflies":{"type":"array","description":"A list of sandflies associated with the template.","items":{"type":"string"}},"ignore_containers":{"type":"boolean","description":"Ignore container results for the profile."},"strictness":{"$ref":"#/components/schemas/ProfileHashType"},"whitelist":{"type":"boolean","description":"In addition to drift, should the resulting profile whitelist alerts found on the model hosts."}},"required":["name","description","ignore_containers","sandflies","strictness","whitelist"]},"ProfileAutoScope":{"type":"object","description":"Scope definition for autodrift profiles.","required":["sandflies","strictness","whitelist","ignore_containers"],"properties":{"sandflies":{"type":"array","items":{"type":"string"},"description":"The list of sandflies to use for drift detection."},"strictness":{"$ref":"#/components/schemas/ProfileHashType"},"whitelist":{"type":"boolean","default":false,"description":"If true, any alert results on the model host(s) will be whitelisted on the covered host(s) by the profile."},"ignore_containers":{"description":"When true, container results will not be affected by this profile.","type":"boolean","default":false}}},"ProfileGatherOptions":{"type":"object","description":"Options to control the result gathering schedule for an auto-drift profile.","properties":{"gather_hours":{"type":"integer","description":"How many hours to run scans to gather results for this auto-drift profile before automatically switching to 'enforcing' mode and generating drift alerts on the covered host(s). Typical values may be 24 or 48 hours."},"scan_minutes":{"type":"integer","description":"How often, in minutes, to run scans against the model host(s) during the gather period. All of the specified sandflies will be run against the host at this interval. Typical values may be 20, 30, 60, etc. minutes."},"full_scan":{"type":"boolean","default":false,"description":"If true, the gather scans on the model hosts will run *all* active sandflies for every scan, not only the requested drift detection recon sandflies. If whitelist is true, this may be desired to whitelist as many expected alerts as possible if any alert on the model host(s) should be considered to be false positives by virtue of the model host(s) being known to be clean, correct model systems."}},"required":["gather_hours","scan_minutes","whitelist","full_scan"]},"ProfileScheduleOptions":{"type":"object","description":"Options to control the scan schedule that is created to scan the covered hosts of a drift profile.","properties":{"minutes_timer_high":{"description":"Upper limit minutes to wait between scans.","format":"int32","type":"integer"},"minutes_timer_low":{"description":"Lower limit of minutes to wait between scans.","format":"int32","type":"integer"},"restrict_begin_hour":{"description":"nil or -1 to disable, or a number between 0-24 to indicate the beginning hour (UTC) of the window of time during which this schedule will not run.","format":"int32","type":"integer"},"restrict_end_hour":{"description":"nil or -1 to disable, or a number between 0-24 to indicate the end hour (UTC) of the window of time during which this schedule will not run.","format":"int32","type":"integer"},"priority":{"description":"Nice-compatible priority of scan on target hosts.","format":"int32","type":"integer"},"all_hosts_immediately":{"description":"If true, immediately start scan on all hosts covered by this schedule. If false, scans will be spread out across hosts over the scan schedule interval.","type":"boolean"}},"required":["minutes_timer_low","minutes_timer_high","restrict_begin_hour","restrict_end_hour","priority","all_hosts_immediately"]},"ProfileSandflyResults":{"type":"object","description":"Details of results for a sandfly on a result profile.","required":["sandfly","results"],"properties":{"sandfly":{"type":"string","description":"Sandfly name."},"results":{"type":"array","description":"Results associated with the sandfly in the profile.","items":{"type":"object","description":"Result associated with the sandfly in the profile.","required":["type","hash_type","hash","key_data","result_profile_result_id"],"properties":{"type":{"type":"string","enum":["whitelist","drift"],"description":"Type of profile matching this result may be used for."},"hash_type":{"description":"Enforcement level this result supports.","$ref":"#/components/schemas/ProfileHashType"},"hash":{"type":"string","description":"Match hash for this result. May be an empty string for a \"no results\" entry in the drift profile on this sandfly."},"key_data":{"type":"string","description":"Key data element from the result."},"result_profile_result_id":{"type":"integer","description":"Result profile result JSON ID."}}}}}},"ProfileSummary":{"type":"object","description":"","allOf":[{"$ref":"#/components/schemas/ProfileCommon"},{"$ref":"#/components/schemas/ProfileMeta"}]},"Profile":{"type":"object","discriminator":{"propertyName":"type","mapping":{"legacy_profile":"#/components/schemas/ProfileLegacy","autodrift_profile":"#/components/schemas/ProfileAutoDrift"}},"oneOf":[{"$ref":"#/components/schemas/ProfileLegacy"},{"$ref":"#/components/schemas/ProfileAutoDrift"}]},"ProfileDetails":{"type":"object","required":["associations","host_info","history","sandflies"],"properties":{"associations":{"$ref":"#/components/schemas/ProfileAssociations"},"host_info":{"type":"array","items":{"$ref":"#/components/schemas/ProfileHostSummary"}},"history":{"type":"array","items":{"$ref":"#/components/schemas/ProfileHistory"}},"sandflies":{"description":"The sandflies for which this result profiles has results for.","type":"array","items":{"$ref":"#/components/schemas/ProfileSandflySummary"}}}},"ProfileUpdateRequest":{"description":"Result profile details.","type":"object","allOf":[{"$ref":"#/components/schemas/ProfileCommon"}],"properties":{"associations":{"$ref":"#/components/schemas/ProfileAssociations"}}},"ProfileLegacy":{"type":"object","deprecated":true,"allOf":[{"$ref":"#/components/schemas/ProfileCommon"},{"$ref":"#/components/schemas/ProfileMeta"},{"$ref":"#/components/schemas/ProfileDetails"}]},"ProfileAutoDrift":{"type":"object","allOf":[{"$ref":"#/components/schemas/ProfileCommon"},{"$ref":"#/components/schemas/ProfileMeta"},{"$ref":"#/components/schemas/ProfileDetails"}],"required":["auto_drift_options"],"properties":{"auto_drift_options":{"description":"Only present if the profile is an auto-drift profile.","allOf":[{"$ref":"#/components/schemas/ProfileAutoDriftOptions"},{"$ref":"#/components/schemas/ProfileAutoDriftStats"}]}}},"ProfileAutoDriftStats":{"type":"object","description":"Server-provided statistics/data for an auto-drift profile.","required":["gather_start_time","schedule_id"],"properties":{"gather_start_time":{"type":"string","format":"date-time","nullable":true,"description":"The time gathering for this auto-drift profile last began (e.g. at initial creation time, or if a later edit re-enters gathering mode, the most recent occurrence). Null if there is no gather schedule."},"schedule_id":{"type":"string","nullable":true,"description":"If there is currently a system-managed schedule (gather or scan) associated with this auto-drift profile, this is the name (ID) of the schedule. If there is no schedule, will be null."}}},"ProfileForHost":{"type":"object","allOf":[{"$ref":"#/components/schemas/ProfileSummary"}],"required":["mode","hash_type"],"properties":{"mode":{"$ref":"#/components/schemas/ProfileMode"},"hash_type":{"$ref":"#/components/schemas/ProfileHashType"}}},"ProfileHostSummary":{"type":"object","properties":{"id":{"description":"The host ID of this host.","type":"string"},"host_sequence_id":{"description":"Sequence host ID of this host.","type":"integer"},"hostname":{"description":"The hostname (target address) of this host.","type":"string"},"node_name":{"description":"The OS node name of this host.","type":"string"},"date_last_seen":{"description":"The date this host was last successfully connected to.","type":"string","format":"date-time"},"last_seen_ip_addr":{"description":"The IP address this host was last seen at.","type":"string"},"mode":{"$ref":"#/components/schemas/ProfileMode"},"hash_type":{"$ref":"#/components/schemas/ProfileHashType"},"ignore_containers":{"$ref":"#/components/schemas/ProfileIgnoreContainers"}}},"ProfileSandflySummary":{"type":"object","properties":{"name":{"type":"string","description":"Name of the sandfly."},"description":{"type":"string","description":"Description of the sandfly."},"whitelist_results":{"type":"boolean","description":"Indicates if the profile has results for whitelisting this sandfly."},"whitelist_results_count":{"type":"integer","description":"Number of whitelisting results for this profile."},"drift_results":{"type":"boolean","description":"Indicates if the profile has results to use for drift detection on this sandfly."},"drift_results_count":{"type":"integer","description":"Number of drift detection results for this profile."},"type":{"type":"string","description":"Sandfly type."},"custom":{"type":"boolean","description":"Indicates if this is a custom sandfly."},"active":{"type":"boolean","description":"Indicates if the sandfly is active."},"tags":{"type":"array","items":{"type":"string"},"description":"List of tags associated with the sandfly."}},"required":["name","description","whitelist_results","whitelist_results_count","drift_results","drift_results_count","type","custom","active","tags"]},"ProfileIgnoreContainers":{"description":"When true, container results will not be affected by this profile.","type":"boolean","default":false},"ProfileMode":{"description":"Whether this result profile association will suppress alerts (whitelist), create alerts (drift), or both on the associated hosts.","type":"string","enum":["whitelist","drift","both"]},"ProfileHashType":{"description":"The type of hash, permissive or restrictive, to use to apply this result profile to the associated host(s)","type":"string","enum":["permissive","restrictive"]},"ProfileAssociations":{"description":"Individual hosts and tags to which to apply this result profile.","type":"object","required":["hosts","tags"],"properties":{"hosts":{"type":"array","items":{"$ref":"#/components/schemas/ProfileAssociationHost"}},"tags":{"type":"array","items":{"$ref":"#/components/schemas/ProfileAssociationTag"}}}},"ProfileAssociationHost":{"description":"Host IDs to apply this result profile to.","type":"object","required":["host_id","mode","hash_type","ignore_containers"],"properties":{"host_id":{"type":"string"},"mode":{"$ref":"#/components/schemas/ProfileMode"},"hash_type":{"$ref":"#/components/schemas/ProfileHashType"},"ignore_containers":{"$ref":"#/components/schemas/ProfileIgnoreContainers"}}},"ProfileAssociationTag":{"description":"Host tags to apply this result profile to.","type":"object","required":["tag","mode","hash_type","ignore_containers"],"properties":{"tag":{"type":"string"},"mode":{"$ref":"#/components/schemas/ProfileMode"},"hash_type":{"$ref":"#/components/schemas/ProfileHashType"},"ignore_containers":{"$ref":"#/components/schemas/ProfileIgnoreContainers"}}},"ProfileHistory":{"description":"Log of each time this result profile had results added to it.","type":"object","properties":{"time":{"description":"Timestamp of when the history event occurred.","type":"string"},"username":{"description":"The username of the person who performed this event.","type":"string"},"event":{"description":"Server-generated description of the event.","type":"string"},"user_note":{"description":"Notes the user provided when performing the action.","type":"string"}}},"ProfilesIDList":{"type":"object","required":["result_profile_ids"],"properties":{"result_profile_ids":{"type":"array","description":"Array of result profile IDs","items":{"type":"integer","description":"Result profile ID"}}}},"HostResultTimeline":{"description":"Timeline of result alert/pass status for a host.","type":"object","required":["host_id","host_sequence_id","hostname"],"properties":{"host_id":{"type":"string","description":"The unique identifier of the host"},"host_sequence_id":{"type":"integer","description":"Host sequence ID"},"hostname":{"type":"string","description":"The hostname or IP address of the host"},"os_info_node":{"type":"string","description":"OS host node name"},"date_last_seen":{"type":"string","format":"date-time","description":"The date and time when the host was last seen"},"last_seen_ip_addr":{"type":"string","description":"The IP address at which the host was last seen"},"tags":{"type":"array","items":{"type":"string"},"description":"Host tags"},"result_timeline":{"type":"array","items":{"$ref":"#/components/schemas/ResultTimelineEntry"},"description":"Timeline of results for the host"}}},"ResultTimelineEntry":{"type":"object","required":["begin","end","status"],"properties":{"begin":{"type":"string","format":"date-time","description":"The start time of the timeline entry"},"end":{"type":"string","format":"date-time","description":"The end time of the timeline entry"},"status":{"type":"string","enum":["pass","alert","error"],"description":"The status of the results during the time period"}}},"HardwareTelemetry":{"properties":{"cpu":{"properties":{"address_sizes":{"items":{"title":"Host.data.os.hardware.cpu.address_sizes.[]","type":"string"},"title":"Host.data.os.hardware.cpu.address_sizes","type":"array"},"apicid":{"title":"Host.data.os.hardware.cpu.apicid","type":"number"},"architecture":{"title":"Host.data.os.hardware.cpu.architecture","type":"number"},"bogo_mips":{"title":"Host.data.os.hardware.cpu.bogo_mips","type":"number"},"bugs":{"items":{"title":"Host.data.os.hardware.cpu.bugs.[]","type":"string"},"title":"Host.data.os.hardware.cpu.bugs","type":"array"},"cache_alignment":{"title":"Host.data.os.hardware.cpu.cache_alignment","type":"number"},"cache_size":{"title":"Host.data.os.hardware.cpu.cache_size","type":"number"},"cl_flush_size":{"title":"Host.data.os.hardware.cpu.cl_flush_size","type":"number"},"core_id":{"title":"Host.data.os.hardware.cpu.core_id","type":"number"},"cores":{"title":"Host.data.os.hardware.cpu.cores","type":"number"},"family":{"title":"Host.data.os.hardware.cpu.family","type":"number"},"flags":{"items":{"title":"Host.data.os.hardware.cpu.flags.[]","type":"string"},"title":"Host.data.os.hardware.cpu.flags","type":"array"},"fpu":{"title":"Host.data.os.hardware.cpu.fpu","type":"boolean"},"fpu_exception":{"title":"Host.data.os.hardware.cpu.fpu_exception","type":"boolean"},"id_level":{"title":"Host.data.os.hardware.cpu.id_level","type":"number"},"implementer":{"title":"Host.data.os.hardware.cpu.implementer","type":"string"},"initial_apicid":{"title":"Host.data.os.hardware.cpu.initial_apicid","type":"number"},"mhz":{"title":"Host.data.os.hardware.cpu.mhz","type":"number"},"microcode":{"title":"Host.data.os.hardware.cpu.microcode","type":"string"},"model":{"title":"Host.data.os.hardware.cpu.model","type":"number"},"model_name":{"title":"Host.data.os.hardware.cpu.model_name","type":"string"},"part":{"title":"Host.data.os.hardware.cpu.part","type":"string"},"physical_id":{"title":"Host.data.os.hardware.cpu.physical_id","type":"number"},"power_management":{"title":"Host.data.os.hardware.cpu.power_management","type":"string"},"processor":{"title":"Host.data.os.hardware.cpu.processor","type":"number"},"revision":{"title":"Host.data.os.hardware.cpu.revision","type":"number"},"siblings":{"title":"Host.data.os.hardware.cpu.siblings","type":"number"},"stepping":{"title":"Host.data.os.hardware.cpu.stepping","type":"number"},"variant":{"title":"Host.data.os.hardware.cpu.variant","type":"string"},"vendor_id":{"title":"Host.data.os.hardware.cpu.vendor_id","type":"string"},"wp":{"title":"Host.data.os.hardware.cpu.wp","type":"boolean"}},"required":["address_sizes","apicid","architecture","bogo_mips","bugs","cache_alignment","cache_size","cl_flush_size","core_id","cores","family","flags","fpu","fpu_exception","id_level","implementer","initial_apicid","mhz","microcode","model","model_name","part","physical_id","power_management","processor","revision","siblings","stepping","variant","vendor_id","wp"],"additionalProperties":false,"title":"Host.data.os.hardware.cpu","type":"object"},"dmi":{"properties":{"bios_date":{"title":"Host.data.os.hardware.dmi.bios_date","type":"string"},"bios_vendor":{"title":"Host.data.os.hardware.dmi.bios_vendor","type":"string"},"bios_version":{"title":"Host.data.os.hardware.dmi.bios_version","type":"string"},"chassis_asset_tag":{"title":"Host.data.os.hardware.dmi.chassis_asset_tag","type":"string"},"chassis_serial":{"title":"Host.data.os.hardware.dmi.chassis_serial","type":"string"},"chassis_type":{"title":"Host.data.os.hardware.dmi.chassis_type","type":"string"},"chassis_vendor":{"title":"Host.data.os.hardware.dmi.chassis_vendor","type":"string"},"chassis_version":{"title":"Host.data.os.hardware.dmi.chassis_version","type":"string"},"modalias":{"title":"Host.data.os.hardware.dmi.modalias","type":"string"},"product_family":{"title":"Host.data.os.hardware.dmi.product_family","type":"string"},"product_name":{"title":"Host.data.os.hardware.dmi.product_name","type":"string"},"product_serial":{"title":"Host.data.os.hardware.dmi.product_serial","type":"string"},"product_uuid":{"title":"Host.data.os.hardware.dmi.product_uuid","type":"string"},"product_version":{"title":"Host.data.os.hardware.dmi.product_version","type":"string"},"sys_vendor":{"title":"Host.data.os.hardware.dmi.sys_vendor","type":"string"}},"required":["bios_date","bios_vendor","bios_version","chassis_asset_tag","chassis_serial","chassis_type","chassis_vendor","chassis_version","modalias","product_family","product_name","product_serial","product_uuid","product_version","sys_vendor"],"additionalProperties":false,"title":"Host.data.os.hardware.dmi","type":"object"},"network":{"properties":{"interfaces":{"items":{"properties":{"broadcast":{"title":"Host.data.os.hardware.network.interfaces.[].broadcast","type":"boolean"},"hardware_mac":{"title":"Host.data.os.hardware.network.interfaces.[].hardware_mac","type":"string"},"ip_address":{"nullable":true,"items":{"title":"Host.data.os.hardware.network.interfaces.[].ip_address.[]","type":"string"},"title":"Host.data.os.hardware.network.interfaces.[].ip_address","type":"array"},"loopback":{"title":"Host.data.os.hardware.network.interfaces.[].loopback","type":"boolean"},"multicast":{"title":"Host.data.os.hardware.network.interfaces.[].multicast","type":"boolean"},"name":{"title":"Host.data.os.hardware.network.interfaces.[].name","type":"string"},"point_to_point":{"title":"Host.data.os.hardware.network.interfaces.[].point_to_point","type":"boolean"},"running":{"title":"Host.data.os.hardware.network.interfaces.[].running","type":"boolean"},"stats":{"properties":{"received_bytes":{"title":"Host.data.os.hardware.network.interfaces.[].stats.received_bytes","type":"number"},"received_compressed":{"title":"Host.data.os.hardware.network.interfaces.[].stats.received_compressed","type":"number"},"received_drops":{"title":"Host.data.os.hardware.network.interfaces.[].stats.received_drops","type":"number"},"received_errors":{"title":"Host.data.os.hardware.network.interfaces.[].stats.received_errors","type":"number"},"received_fifo_errors":{"title":"Host.data.os.hardware.network.interfaces.[].stats.received_fifo_errors","type":"number"},"received_frame_errors":{"title":"Host.data.os.hardware.network.interfaces.[].stats.received_frame_errors","type":"number"},"received_multicast":{"title":"Host.data.os.hardware.network.interfaces.[].stats.received_multicast","type":"number"},"received_packets":{"title":"Host.data.os.hardware.network.interfaces.[].stats.received_packets","type":"number"},"transmitted_bytes":{"title":"Host.data.os.hardware.network.interfaces.[].stats.transmitted_bytes","type":"number"},"transmitted_carrier_errors":{"title":"Host.data.os.hardware.network.interfaces.[].stats.transmitted_carrier_errors","type":"number"},"transmitted_collisions":{"title":"Host.data.os.hardware.network.interfaces.[].stats.transmitted_collisions","type":"number"},"transmitted_compressed":{"title":"Host.data.os.hardware.network.interfaces.[].stats.transmitted_compressed","type":"number"},"transmitted_drops":{"title":"Host.data.os.hardware.network.interfaces.[].stats.transmitted_drops","type":"number"},"transmitted_errors":{"title":"Host.data.os.hardware.network.interfaces.[].stats.transmitted_errors","type":"number"},"transmitted_fifo_errors":{"title":"Host.data.os.hardware.network.interfaces.[].stats.transmitted_fifo_errors","type":"number"},"transmitted_packets":{"title":"Host.data.os.hardware.network.interfaces.[].stats.transmitted_packets","type":"number"}},"required":["received_bytes","received_compressed","received_drops","received_errors","received_fifo_errors","received_frame_errors","received_multicast","received_packets","transmitted_bytes","transmitted_carrier_errors","transmitted_collisions","transmitted_compressed","transmitted_drops","transmitted_errors","transmitted_fifo_errors","transmitted_packets"],"additionalProperties":false,"title":"Host.data.os.hardware.network.interfaces.[].stats","type":"object"},"up":{"title":"Host.data.os.hardware.network.interfaces.[].up","type":"boolean"},"wireless":{"title":"Host.data.os.hardware.network.interfaces.[].wireless","type":"boolean"}},"required":["broadcast","hardware_mac","ip_address","loopback","multicast","name","point_to_point","running","stats","up","wireless"],"additionalProperties":false,"title":"Host.data.os.hardware.network.interfaces.[]","type":"object"},"title":"Host.data.os.hardware.network.interfaces","type":"array"}},"required":["interfaces"],"additionalProperties":false,"title":"Host.data.os.hardware.network","type":"object"}},"required":["cpu","dmi","network"],"additionalProperties":false,"title":"Host.data.os.hardware","type":"object"},"OsInfoTelemetry":{"properties":{"arch":{"title":"Host.data.os.info.arch","type":"string"},"boot_cmdline":{"title":"Host.data.os.info.boot_cmdline","type":"string"},"kernel_tainted_state":{"items":{"type":"string","title":"Host.data.os.info.kernel_tainted_state.[]"},"title":"Host.data.os.info.kernel_tainted_state","type":"array"},"machine":{"title":"Host.data.os.info.machine","type":"string"},"machine_id":{"title":"Host.data.os.info.machine_id","type":"string"},"mounts":{"items":{"properties":{"device":{"title":"Mount.device","type":"string"},"dummy":{"title":"Mount.dummy","type":"string"},"fs_type":{"title":"Mount.fs_type","type":"string"},"mount_point":{"title":"Mount.mount_point","type":"string"},"options":{"title":"Mount.options","type":"string"},"size":{"title":"Mount.size","type":"integer"},"free":{"title":"Mount.free","type":"integer"},"avail":{"title":"Mount.avail","type":"integer"},"used":{"title":"Mount.used","type":"integer"},"used_percent":{"title":"Mount.used_percent","type":"integer"},"note":{"title":"Mount.note","type":"string"}},"required":["device","dummy","fs_type","mount_point","options","size","free","avail","used","used_percent","note"],"additionalProperties":false,"title":"Mount","type":"object"},"title":"Host.data.os.info.mounts","type":"array"},"node":{"title":"Host.data.os.info.node","type":"string"},"os_release":{"properties":{"bug_report_url":{"title":"OsRelease.bug_report_url","type":"string"},"build_id":{"title":"OsRelease.build_id","type":"string"},"cpe_name":{"title":"OsRelease.cpe_name","type":"string"},"documentation_url":{"title":"OsRelease.documentation_url","type":"string"},"home_url":{"title":"OsRelease.home_url","type":"string"},"id":{"title":"OsRelease.id","type":"string"},"id_like":{"title":"OsRelease.id_like","type":"string"},"logo":{"title":"OsRelease.logo","type":"string"},"name":{"title":"OsRelease.name","type":"string"},"pretty_name":{"title":"OsRelease.pretty_name","type":"string"},"privacy_policy_url":{"title":"OsRelease.privacy_policy_url","type":"string"},"support_url":{"title":"OsRelease.support_url","type":"string"},"variant":{"title":"OsRelease.variant","type":"string"},"variant_id":{"title":"OsRelease.variant_id","type":"string"},"version":{"title":"OsRelease.version","type":"string"},"version_codename":{"title":"OsRelease.version_codename","type":"string"},"version_id":{"title":"OsRelease.version_id","type":"string"}},"required":["bug_report_url","build_id","cpe_name","documentation_url","home_url","id","id_like","logo","name","pretty_name","privacy_policy_url","support_url","variant","variant_id","version","version_codename","version_id"],"additionalProperties":false,"title":"OsRelease","type":"object"},"platform":{"title":"Host.data.os.info.platform","type":"string"},"product_serial":{"title":"Host.data.os.info.product_serial","type":"string"},"release":{"title":"Host.data.os.info.release","type":"string"},"selinux_context":{"title":"Host.data.os.info.selinux_context","type":"string"},"selinux_status":{"type":"object","properties":{"enabled":{"type":"boolean"},"enabled_mls":{"type":"boolean"},"enforce_mode_boot":{"type":"string"},"enforce_mode_current":{"type":"string"}},"required":["enabled","enabled_mls","enforce_mode_boot","enforce_mode_current"]},"system":{"title":"Host.data.os.info.system","type":"string"},"uname":{"items":{"title":"Host.data.os.info.uname.[]","type":"string"},"title":"Host.data.os.info.uname","type":"array"},"uptime_date":{"title":"Host.data.os.info.uptime_date","type":"string"},"uptime_days":{"title":"Host.data.os.info.uptime_days","type":"number"},"uuid":{"title":"Host.data.os.info.uuid","type":"string"},"version":{"title":"Host.data.os.info.version","type":"string"}},"required":["arch","kernel_tainted_state","machine","machine_id","mounts","node","os_release","platform","product_serial","release","selinux_context","selinux_status","system","uname","uptime_date","uptime_days","uuid","version"],"additionalProperties":false,"title":"Host.data.os.info","type":"object"},"CpuTelemetry":{"properties":{"fifteen_min":{"title":"Cpu.fifteen_min","type":"number"},"fifteen_min_core_adjusted":{"title":"Cpu.fifteen_min_core_adjusted","type":"number"},"five_min":{"title":"Cpu.five_min","type":"number"},"five_min_core_adjusted":{"title":"Cpu.five_min_core_adjusted","type":"number"},"one_min":{"title":"Cpu.one_min","type":"number"},"one_min_core_adjusted":{"title":"Cpu.one_min_core_adjusted","type":"number"},"raw":{"type":"object"}},"required":["fifteen_min","fifteen_min_core_adjusted","five_min","five_min_core_adjusted","one_min","one_min_core_adjusted","raw"],"additionalProperties":false,"title":"Cpu","type":"object"},"MemoryTelemetry":{"properties":{"available":{"title":"Memory.available","type":"number"},"free":{"title":"Memory.free","type":"number"},"buffers":{"title":"Memory.buffers","type":"number"},"cached":{"title":"Memory.cached","type":"number"},"swap_free":{"title":"Memory.swap_free","type":"number"},"swap_total":{"title":"Memory.swap_total","type":"number"},"total":{"title":"Memory.total","type":"number"}},"required":["available","free","buffers","cached","swap_free","swap_total","total"],"additionalProperties":false,"title":"Memory","type":"object"},"PerformanceTelemetry":{"properties":{"cpu":{"$ref":"#/components/schemas/CpuTelemetry","title":"Host.data.os.performance.cpu"},"memory":{"$ref":"#/components/schemas/MemoryTelemetry","title":"Host.data.os.performance.memory"}},"required":["cpu","memory"],"additionalProperties":false,"title":"Host.data.os.performance","type":"object"},"Os":{"properties":{"hardware":{"$ref":"#/components/schemas/HardwareTelemetry","title":"Os.hardware"},"info":{"$ref":"#/components/schemas/OsInfoTelemetry","title":"Os.info"},"performance":{"$ref":"#/components/schemas/PerformanceTelemetry","title":"Os.performance"},"time":{"type":"object","required":["system_clock_time","system_clock_time_unix","sandfly_node_time","sandfly_node_time_unix"],"properties":{"system_clock_time":{"type":"string","format":"date-time","description":"The time on the host when the scan started."},"system_clock_time_unix":{"type":"integer","format":"int64","description":"The time on the host when the scan started, in Unix time format."},"sandfly_node_time":{"type":"string","format":"date-time","description":"The time on the sandfly node when the scan started."},"sandfly_node_time_unix":{"type":"integer","format":"int64","description":"The time on the sandfly node when the scan started, in Unix time format."}}}},"required":["hardware","info","performance","time"],"additionalProperties":false,"title":"Os","type":"object","nullable":true},"AtJobEngineResponse":{"title":"ResultAtJob","type":"object","properties":{"atjob":{"type":"object","required":["name","path","queue","number","date","username","command"],"properties":{"name":{"type":"string"},"path":{"type":"string"},"queue":{"type":"string"},"number":{"type":"string"},"date":{"required":["created","created_minutes","execution"],"type":"object","properties":{"created":{"type":"string","format":"date-time"},"created_minutes":{"type":"integer"},"execution":{"type":"string","format":"date-time"}}},"username":{"type":"string"},"command":{"type":"array","items":{"type":"string"}}}}},"required":["atjob"]},"UtmpEngineResponse":{"type":"object","required":["entry_number","type","type_name","pid","device","id","username","hostname","exit_status","session","date","ip_address","reserved"],"properties":{"entry_number":{"type":"integer"},"type":{"type":"integer"},"type_name":{"type":"string"},"pid":{"type":"integer"},"device":{"type":"string"},"id":{"type":"string"},"username":{"type":"string"},"hostname":{"type":"string"},"exit_status":{"type":"object","required":["termination","exit"],"properties":{"termination":{"type":"integer"},"exit":{"type":"integer"}}},"session":{"type":"integer"},"date":{"type":"object","required":["created","created_previous_entry","created_minutes"],"properties":{"created":{"type":"string","format":"date-time"},"created_previous_entry":{"type":"string","format":"date-time"},"created_minutes":{"type":"integer"}}},"ip_address":{"type":"string"},"reserved":{"type":"string"}}},"FileEngineResponse":{"type":"object","required":["file"],"properties":{"file":{"type":"object","required":["date","inode","device","rdevice","nlink","mode","uid","username","gid","groupname","selinux_context","size","size_byte_count","size_mismatch","blksize","blocks","path","path_root","path_link","true_path","name","extension","flags","entropy","hash","magic_num","data","container","mount"],"properties":{"date":{"type":"object","required":["created","created_minutes","modified","modified_minutes","accessed","accessed_minutes"],"properties":{"created":{"type":"string"},"created_minutes":{"type":"integer"},"modified":{"type":"string"},"modified_minutes":{"type":"integer"},"accessed":{"type":"string"},"accessed_minutes":{"type":"integer"}}},"inode":{"type":"integer"},"device":{"type":"integer"},"rdevice":{"type":"integer"},"nlink":{"type":"integer"},"mode":{"type":"string"},"uid":{"type":"integer"},"username":{"type":"string"},"gid":{"type":"integer"},"groupname":{"type":"string"},"selinux_context":{"type":"string"},"capabilities":{"type":"object","description":"libcap capabilties stored in the file's security.capability xattr.","properties":{"permitted":{"description":"Decoded list of permitted capabilities","type":"array","items":{"type":"string"}},"inheritable":{"description":"Decoded list of inheritable capabilities","type":"array","items":{"type":"string"}},"effective":{"description":"Decoded list of effective capabilities","type":"array","items":{"type":"string"}}}},"size":{"type":"integer"},"size_byte_count":{"type":"integer"},"size_mismatch":{"type":"boolean"},"blksize":{"type":"integer"},"blocks":{"type":"integer"},"path":{"type":"string"},"path_root":{"type":"string"},"path_link":{"type":"string"},"true_path":{"type":"string"},"name":{"type":"string"},"extension":{"type":"string"},"flags":{"type":"object","required":["directory","regular","link","suid","suid_root","sgid","sgid_root","socket","device","char_device","named_pipe","sticky","immutable","hidden","deleted","containerized"],"properties":{"directory":{"type":"boolean"},"regular":{"type":"boolean"},"link":{"type":"boolean"},"suid":{"type":"boolean"},"suid_root":{"type":"boolean"},"sgid":{"type":"boolean"},"sgid_root":{"type":"boolean"},"socket":{"type":"boolean"},"device":{"type":"boolean"},"char_device":{"type":"boolean"},"named_pipe":{"type":"boolean"},"sticky":{"type":"boolean"},"immutable":{"type":"boolean"},"hidden":{"type":"boolean"},"deleted":{"type":"boolean"},"containerized":{"type":"boolean"}}},"entropy":{"type":"number"},"hash":{"type":"object","required":["md5","sha1","sha256","sha512"],"properties":{"md5":{"type":"string"},"sha1":{"type":"string"},"sha256":{"type":"string"},"sha512":{"type":"string"}}},"magic_num":{"type":"object","required":["hex","text","type","class","expected_extensions"],"properties":{"hex":{"type":"string"},"text":{"type":"string"},"type":{"type":"string"},"class":{"type":"string"},"public_key":{"type":"string","description":"If the file is an unencrypted private key, the result may contain the corresponding public key value in this property. If the public key can't be computed, this property will not exists."},"expected_extensions":{"type":"array","items":{"type":"string"}}}},"data":{"type":"string","nullable":true},"container":{"type":"object","properties":{"id":{"type":"string"},"id_short":{"type":"string"},"rootdir":{"type":"string"}},"required":["id","id_short","rootdir"]},"mount":{"type":"object","required":["mountpoint","device","fs_type"],"properties":{"mountpoint":{"type":"string"},"device":{"type":"string"},"fs_type":{"type":"string"}}}}}}},"CronEngineResponse":{"type":"object","required":["file","cron"],"properties":{"cron":{"type":"object","required":["minute","hour","day","month","day_of_week","username","command","path","entry"],"properties":{"minute":{"type":"string"},"hour":{"type":"string"},"day":{"type":"string"},"month":{"type":"string"},"day_of_week":{"type":"string"},"username":{"type":"string"},"command":{"type":"string"},"path":{"type":"string"},"entry":{"type":"string"},"non_utf8_data":{"type":"string","description":"Indicates that this is a dummy placeholder entry from a crontab file that has a text string which is not valid UTF-8 encoded text. This property will only be present if true."}}}}},"DirEngineResponse":{"type":"object","required":["directory"],"properties":{"directory":{"type":"object","required":["path","path_root","path_link","true_path","name","extension","date","inode","device","rdevice","nlink","count","count_mismatch","mode","uid","username","gid","groupname","selinux_context","size","flags","container","mount"],"properties":{"path":{"type":"string"},"path_root":{"type":"string"},"path_link":{"type":"string"},"true_path":{"type":"string"},"name":{"type":"string"},"extension":{"type":"string"},"date":{"type":"object","required":["created","created_minutes","modified","modified_minutes","accessed","accessed_minutes"],"properties":{"created":{"type":"string"},"created_minutes":{"type":"integer"},"modified":{"type":"string"},"modified_minutes":{"type":"integer"},"accessed":{"type":"string"},"accessed_minutes":{"type":"integer"}}},"inode":{"type":"integer"},"device":{"type":"integer"},"rdevice":{"type":"integer"},"nlink":{"type":"integer"},"count":{"type":"integer"},"count_mismatch":{"type":"boolean"},"mode":{"type":"string"},"uid":{"type":"integer"},"username":{"type":"string"},"gid":{"type":"integer"},"groupname":{"type":"string"},"size":{"type":"integer"},"selinux_context":{"type":"string"},"flags":{"type":"object","required":["link","sticky","hidden","deleted","containerized"],"properties":{"link":{"type":"boolean"},"sticky":{"type":"boolean"},"hidden":{"type":"boolean"},"deleted":{"type":"boolean"},"containerized":{"type":"boolean"}}},"container":{"type":"object","properties":{"id":{"type":"string"},"id_short":{"type":"string"},"rootdir":{"type":"string"}},"required":["id","id_short","rootdir"]},"mount":{"type":"object","required":["mountpoint","device","fs_type"],"properties":{"mountpoint":{"type":"string"},"device":{"type":"string"},"fs_type":{"type":"string"}}}}}}},"KmodulesEngineResponse":{"type":"object","required":["kernel_module"],"properties":{"kernel_module":{"type":"object","required":["name","memory_size","instance_count","state","memory_offset","taints","taints_list","kernel_taint_missing","hidden","vmalloc_artifact","missing_file","dependencies","module_file_path","file"],"properties":{"name":{"type":"string"},"memory_size":{"type":"integer"},"instance_count":{"type":"integer"},"state":{"type":"string"},"memory_offset":{"type":"string"},"taints":{"type":"array","items":{"type":"object","properties":{"taint":{"type":"string"},"taint_reason":{"type":"string"}}}},"taints_list":{"type":"string"},"kernel_taint_missing":{"type":"boolean"},"hidden":{"type":"boolean"},"vmalloc_artifact":{"type":"boolean","description":"Indicates that this kernel module is a name that we saw in /proc/vmallocinfo but we don't see the module name in the loaded modules list."},"missing_file":{"type":"boolean"},"dependencies":{"type":"array","items":{"type":"string"}},"module_file_path":{"type":"string"},"file":{"type":"object","required":["date","inode","device","rdevice","nlink","mode","uid","username","gid","groupname","size","size_byte_count","size_mismatch","blksize","blocks","path","path_root","path_link","name","extension","flags","entropy","hash","magic_num","data"],"properties":{"date":{"type":"object","required":["created","created_minutes","modified","modified_minutes","accessed","accessed_minutes"],"properties":{"created":{"type":"string"},"created_minutes":{"type":"integer"},"modified":{"type":"string"},"modified_minutes":{"type":"integer"},"accessed":{"type":"string"},"accessed_minutes":{"type":"integer"}}},"inode":{"type":"integer"},"device":{"type":"integer"},"rdevice":{"type":"integer"},"nlink":{"type":"integer"},"mode":{"type":"string"},"uid":{"type":"integer"},"username":{"type":"string"},"gid":{"type":"integer"},"groupname":{"type":"string"},"size":{"type":"integer"},"size_byte_count":{"type":"integer"},"size_mismatch":{"type":"boolean"},"blksize":{"type":"integer"},"blocks":{"type":"integer"},"path":{"type":"string"},"path_root":{"type":"string"},"path_link":{"type":"string"},"name":{"type":"string"},"extension":{"type":"string"},"flags":{"type":"object","required":["directory","regular","link","suid","suid_root","sgid","sgid_root","socket","device","char_device","named_pipe","sticky","immutable","hidden","deleted"],"properties":{"directory":{"type":"boolean"},"regular":{"type":"boolean"},"link":{"type":"boolean"},"suid":{"type":"boolean"},"suid_root":{"type":"boolean"},"sgid":{"type":"boolean"},"sgid_root":{"type":"boolean"},"socket":{"type":"boolean"},"device":{"type":"boolean"},"char_device":{"type":"boolean"},"named_pipe":{"type":"boolean"},"sticky":{"type":"boolean"},"immutable":{"type":"boolean"},"hidden":{"type":"boolean"},"deleted":{"type":"boolean"}}},"entropy":{"type":"number"},"hash":{"type":"object","required":["md5","sha1","sha256","sha512"],"properties":{"md5":{"type":"string"},"sha1":{"type":"string"},"sha256":{"type":"string"},"sha512":{"type":"string"}}},"magic_num":{"type":"object","required":["hex","text","type","class","expected_extensions"],"properties":{"hex":{"type":"string"},"text":{"type":"string"},"type":{"type":"string"},"class":{"type":"string"},"expected_extensions":{"type":"array","items":{}}}},"data":{"type":"string","nullable":true}}}}}}},"LastlogEngineResponse":{"type":"object","required":["log"],"properties":{"log":{"type":"object","required":["lastlog"],"properties":{"lastlog":{"type":"object","required":["username","uid","date","terminal","hostname"],"properties":{"username":{"type":"string"},"uid":{"type":"integer"},"date":{"type":"object","required":["created","created_minutes"],"properties":{"created":{"type":"string"},"created_minutes":{"type":"integer"}}},"terminal":{"type":"string"},"hostname":{"type":"string"}}}}}}},"ProcessEngineResponse":{"type":"object","required":["process"],"properties":{"process":{"type":"object","required":["name","extension","cmdline","command","date","pid","ppid","pgid","uid","username","gid","groupname","path","true_path","cwd","entropy","state","system_uptime","selinux_context","flags","file_descriptors","environ","map","stack","cgroup","container","network_ports","hash","file","stat","status"],"properties":{"name":{"type":"string"},"extension":{"type":"string"},"cmdline":{"type":"string"},"cmdargs":{"type":"array","items":{"type":"string"}},"command":{"type":"string"},"date":{"type":"object","properties":{"created":{"type":"string","format":"date-time"},"created_minutes":{"type":"integer"}},"required":["created","created_minutes"]},"pid":{"type":"integer"},"ppid":{"type":"integer"},"pgid":{"type":"integer"},"uid":{"type":"integer"},"username":{"type":"string"},"gid":{"type":"integer"},"groupname":{"type":"string"},"login_uid":{"type":"integer"},"login_uid_username":{"type":"string"},"session_id":{"type":"integer"},"path":{"type":"string"},"true_path":{"type":"string"},"cwd":{"type":"string"},"entropy":{"type":"number"},"state":{"type":"string"},"system_uptime":{"type":"string","format":"date-time"},"selinux_context":{"type":"string"},"flags":{"type":"object","properties":{"deleted":{"type":"boolean"},"immutable":{"type":"boolean"},"containerized":{"type":"boolean"},"hidden":{"type":"boolean"}},"required":["deleted","immutable","containerized","hidden"]},"file_descriptors":{"type":"array","items":{"type":"object","properties":{"number":{"type":"integer"},"path":{"type":"string"},"type":{"type":"string"},"class":{"type":"string"},"class_data_socket_packet":{"type":"object","properties":{"type":{"type":"integer"},"type_text":{"type":"string"},"protocol":{"type":"string"},"protocol_text":{"type":"string"},"inode":{"type":"integer"},"uid":{"type":"integer"},"interface":{"type":"integer"}}},"class_data_socket_unix":{"type":"object","properties":{"type":{"type":"integer"},"type_text":{"type":"string"},"protocol":{"type":"string"},"protocol_text":{"type":"string"},"inode":{"type":"integer"},"flags":{"type":"string"},"state":{"type":"integer"},"state_text":{"type":"string"},"path":{"type":"string"},"abstract":{"type":"boolean"}}},"hidden":{"type":"boolean"}},"required":["number","path","type","class","hidden"]}},"environ":{"type":"array","items":{"type":"string"}},"map":{"type":"array","items":{"type":"string"}},"stack":{"type":"array","items":{"type":"string"}},"cgroup":{"type":"array","items":{"type":"object","properties":{"hierarchy_id":{"type":"string"},"controller_list":{"type":"string"},"path":{"type":"string"}},"required":["hierarchy_id","controller_list","path"]}},"container":{"type":"object","properties":{"id":{"type":"string"},"id_short":{"type":"string"},"rootdir":{"type":"string"}},"required":["id","id_short","rootdir"]},"network_ports":{"type":"object"},"hash":{"type":"object","properties":{"md5":{"type":"string"},"sha1":{"type":"string"},"sha256":{"type":"string"},"sha512":{"type":"string"}}},"file":{"type":"object","properties":{"date":{"type":"object","properties":{"created":{"type":"string","format":"date-time"},"created_minutes":{"type":"integer"},"modified":{"type":"string","format":"date-time"},"modified_minutes":{"type":"integer"},"accessed":{"type":"string","format":"date-time"},"accessed_minutes":{"type":"integer"}},"required":["created","created_minutes","modified","modified_minutes","accessed","accessed_minutes"]},"inode":{"type":"integer"},"device":{"type":"integer"},"rdevice":{"type":"integer"},"nlink":{"type":"integer"},"mode":{"type":"string"},"uid":{"type":"integer"},"username":{"type":"string"},"gid":{"type":"integer"},"groupname":{"type":"string"},"size":{"type":"integer"},"size_byte_count":{"type":"integer"},"size_mismatch":{"type":"boolean"},"blksize":{"type":"integer"},"blocks":{"type":"integer"},"path":{"type":"string"},"path_root":{"type":"string"},"path_link":{"type":"string"},"name":{"type":"string"},"extension":{"type":"string"},"flags":{"type":"object","properties":{"directory":{"type":"boolean"},"regular":{"type":"boolean"},"link":{"type":"boolean"},"suid":{"type":"boolean"},"suid_root":{"type":"boolean"},"sgid":{"type":"boolean"},"sgid_root":{"type":"boolean"},"socket":{"type":"boolean"},"device":{"type":"boolean"},"char_device":{"type":"boolean"},"named_pipe":{"type":"boolean"},"sticky":{"type":"boolean"},"immutable":{"type":"boolean"},"hidden":{"type":"boolean"},"deleted":{"type":"boolean"}},"required":["directory","regular","link","suid","suid_root","sgid","sgid_root","socket","device","char_device","named_pipe","sticky","immutable","hidden","deleted"]},"entropy":{"type":"number"},"mount":{"type":"object","required":["mountpoint","device","fs_type"],"properties":{"mountpoint":{"type":"string"},"device":{"type":"string"},"fs_type":{"type":"string"}}},"hash":{"type":"object","properties":{"md5":{"type":"string"},"sha1":{"type":"string"},"sha256":{"type":"string"},"sha512":{"type":"string"}}},"magic_num":{"type":"object","properties":{"hex":{"type":"string"},"text":{"type":"string"},"type":{"type":"string"},"class":{"type":"string"},"expected_extensions":{"type":"array","items":{"type":"string"}}},"required":["hex","text","type","class","expected_extensions"]}}},"stat":{"type":"object","properties":{"pid":{"type":"integer"},"comm":{"type":"string"},"state":{"type":"string"},"ppid":{"type":"integer"},"pgrp":{"type":"integer"},"session":{"type":"integer"},"tty_nr":{"type":"integer"},"tpgid":{"type":"integer"},"flags":{"type":"integer"},"minflt":{"type":"integer"},"cminflt":{"type":"integer"},"majflt":{"type":"integer"},"cmajflt":{"type":"integer"},"utime":{"type":"integer"},"stime":{"type":"integer"},"cutime":{"type":"integer"},"cstime":{"type":"integer"},"priority":{"type":"integer"},"nice":{"type":"integer"},"num_threads":{"type":"integer"},"itrealvalue":{"type":"integer"},"starttime":{"type":"integer"},"vsize":{"type":"integer"},"rss":{"type":"integer"},"rsslim":{"type":"integer"},"startcode":{"type":"integer"},"endcode":{"type":"integer"},"startstack":{"type":"integer"},"kstkesp":{"type":"integer"},"kstkeip":{"type":"integer"},"signal":{"type":"integer"},"locked":{"type":"integer"},"sigignore":{"type":"integer"},"sigcatch":{"type":"integer"},"wchan":{"type":"integer"},"nswap":{"type":"integer"},"cnswap":{"type":"integer"},"exit_signal":{"type":"integer"},"processor":{"type":"integer"},"rt_priority":{"type":"integer"},"policy":{"type":"integer"},"delayacct_blkio_ticks":{"type":"integer"},"guest_time":{"type":"integer"},"cguest_time":{"type":"integer"},"start_data":{"type":"integer"},"end_data":{"type":"integer"},"start_brk":{"type":"integer"},"arg_start":{"type":"integer"},"arg_end":{"type":"integer"},"env_start":{"type":"integer"},"env_end":{"type":"integer"},"exit_code":{"type":"integer"},"empty":{"type":"boolean"}},"required":["pid","comm","state","ppid","pgrp","session","tty_nr","tpgid","flags","minflt","cminflt","majflt","cmajflt","utime","stime","cutime","cstime","priority","nice","num_threads","itrealvalue","starttime","vsize","rss","rsslim","startcode","endcode","startstack","kstkesp","kstkeip","signal","locked","sigignore","sigcatch","wchan","nswap","cnswap","exit_signal","processor","rt_priority","policy","delayacct_blkio_ticks","guest_time","cguest_time","start_data","end_data","start_brk","arg_start","arg_end","env_start","env_end","exit_code","empty"]},"status":{"type":"object","properties":{"name":{"type":"string"},"umask":{"type":"string"},"state":{"type":"string"},"tgid":{"type":"integer"},"ngid":{"type":"integer"},"pid":{"type":"integer"},"ppid":{"type":"integer"},"tracer_pid":{"type":"integer"},"uid":{"type":"integer"},"uid_effective":{"type":"integer"},"uid_saved_set":{"type":"integer"},"uid_file_system":{"type":"integer"},"gid":{"type":"integer"},"gid_effective":{"type":"integer"},"gid_saved_set":{"type":"integer"},"gid_filesystem":{"type":"integer"},"fdsize":{"type":"integer"},"groupids":{"type":"array","items":{"type":"integer"}},"groupnames":{"type":"array","items":{"type":"string"}},"ns_tgid":{"type":"integer"},"ns_pid":{"type":"integer"},"ns_pgid":{"type":"integer"},"ns_sid":{"type":"integer"},"vm_peak":{"type":"integer"},"vm_size":{"type":"integer"},"vm_lck":{"type":"integer"},"vm_pin":{"type":"integer"},"vm_hwm":{"type":"integer"},"vm_rss":{"type":"integer"},"rss_anon":{"type":"integer"},"rss_file":{"type":"integer"},"rss_shmem":{"type":"integer"},"vm_data":{"type":"integer"},"vm_stk":{"type":"integer"},"vm_exe":{"type":"integer"},"vm_lib":{"type":"integer"},"vm_pte":{"type":"integer"},"vm_swap":{"type":"integer"},"hugetlb_pages":{"type":"integer"},"core_dumping":{"type":"boolean"},"thp_enabled":{"type":"boolean"},"threads":{"type":"integer"},"sig_q":{"type":"string"},"sig_pnd":{"type":"string"},"shd_pnd":{"type":"string"},"sig_blk":{"type":"string"},"sig_ign":{"type":"string"},"sig_cgt":{"type":"string"},"cap_inh":{"type":"string"},"cap_prm":{"type":"string"},"cap_eff":{"type":"string"},"cap_bnd":{"type":"string"},"cap_amb":{"type":"string"},"seccomp":{"type":"integer"},"seccomp_filters":{"type":"integer"},"speculation_store_bypass":{"type":"string"},"cpus_allowed":{"type":"string"},"cpus_allowed_list":{"type":"string"},"mems_allowed":{"type":"string"},"mems_allowed_list":{"type":"string"},"voluntary_ctxt_switches":{"type":"integer"},"nonvoluntary_ctxt_switches":{"type":"integer"},"flags":{"type":"object","additionalProperties":{"type":"boolean"}},"empty":{"type":"boolean"}}},"capabilities":{"type":"object","properties":{"permitted":{"description":"Decoded list of permitted capabilities","type":"array","items":{"type":"string"}},"inheritable":{"description":"Decoded list of inheritable capabilities","type":"array","items":{"type":"string"}},"effective":{"description":"Decoded list of effective capabilities","type":"array","items":{"type":"string"}}}}}}}},"SystemdSessionEngineResponse":{"type":"object","required":["systemd_user"],"properties":{"systemd_user":{"type":"object","required":["uid","gid","username","runtime_path","start_time","linger"],"properties":{"uid":{"type":"integer"},"gid":{"type":"integer"},"username":{"type":"string"},"runtime_path":{"type":"string"},"start_time":{"type":"string"},"linger":{"type":"boolean"}}}}},"SystemdEngineResponse":{"type":"object","required":["systemd"],"properties":{"systemd":{"type":"object","required":["context","type","name","description","load_state","active_state","sub_state","object_path","service_info"],"properties":{"context":{"type":"object","required":["scope","uid"],"properties":{"scope":{"type":"string"},"uid":{"type":"integer"}}},"type":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"load_state":{"type":"string"},"active_state":{"type":"string"},"sub_state":{"type":"string"},"object_path":{"type":"string"},"service_info":{"type":"object","required":["exec_start","exec_summary","exec_summary_with_args","environment","main_exec_start_time","main_exec_exit_time","main_pid","control_pid","status_text","uid","gid"],"properties":{"exec_start":{"type":"object","required":["binary_path","arguments","pid","last_exit_code","file"],"properties":{"binary_path":{"type":"string"},"arguments":{"type":"array","items":{"type":"string"}},"pid":{"type":"integer"},"last_exit_code":{"type":"integer"},"file":{"type":"object","required":["date","inode","device","rdevice","nlink","mode","uid","username","gid","groupname","size","size_byte_count","size_mismatch","blksize","blocks","path","path_root","path_link","name","extension","flags","entropy","hash","magic_num","data"],"properties":{"date":{"type":"object","required":["created","created_minutes","modified","modified_minutes","accessed","accessed_minutes"],"properties":{"created":{"type":"string"},"created_minutes":{"type":"integer"},"modified":{"type":"string"},"modified_minutes":{"type":"integer"},"accessed":{"type":"string"},"accessed_minutes":{"type":"integer"}}},"inode":{"type":"integer"},"device":{"type":"integer"},"rdevice":{"type":"integer"},"nlink":{"type":"integer"},"mode":{"type":"string"},"uid":{"type":"integer"},"username":{"type":"string"},"gid":{"type":"integer"},"groupname":{"type":"string"},"size":{"type":"integer"},"size_byte_count":{"type":"integer"},"size_mismatch":{"type":"boolean"},"blksize":{"type":"integer"},"blocks":{"type":"integer"},"path":{"type":"string"},"path_root":{"type":"string"},"path_link":{"type":"string"},"name":{"type":"string"},"extension":{"type":"string"},"flags":{"type":"object","required":["directory","regular","link","suid","suid_root","sgid","sgid_root","socket","device","char_device","named_pipe","sticky","immutable","hidden","deleted"],"properties":{"directory":{"type":"boolean"},"regular":{"type":"boolean"},"link":{"type":"boolean"},"suid":{"type":"boolean"},"suid_root":{"type":"boolean"},"sgid":{"type":"boolean"},"sgid_root":{"type":"boolean"},"socket":{"type":"boolean"},"device":{"type":"boolean"},"char_device":{"type":"boolean"},"named_pipe":{"type":"boolean"},"sticky":{"type":"boolean"},"immutable":{"type":"boolean"},"hidden":{"type":"boolean"},"deleted":{"type":"boolean"}}},"entropy":{"type":"number"},"hash":{"type":"object","required":["md5","sha1","sha256","sha512"],"properties":{"md5":{"type":"string"},"sha1":{"type":"string"},"sha256":{"type":"string"},"sha512":{"type":"string"}}},"magic_num":{"type":"object","required":["hex","text","type","class","expected_extensions"],"properties":{"hex":{"type":"string"},"text":{"type":"string"},"type":{"type":"string"},"class":{"type":"string"},"expected_extensions":{"type":"array","items":{"type":"string"}}}},"data":{"type":"string","nullable":true}}}}},"exec_start_pre":{"type":"string","nullable":true},"exec_start_post":{"type":"string","nullable":true},"exec_reload":{"type":"string","nullable":true},"exec_stop":{"type":"string","nullable":true},"exec_stop_post":{"type":"string","nullable":true},"exec_summary":{"type":"array","items":{"type":"string"}},"exec_summary_with_args":{"type":"array","items":{"type":"string"}},"environment":{"type":"array","items":{"type":"string"}},"main_exec_start_time":{"type":"string"},"main_exec_exit_time":{"type":"string"},"main_pid":{"type":"object","required":["pid","process"],"properties":{"pid":{"type":"integer"},"process":{"type":"string","nullable":true}}},"control_pid":{"type":"object","required":["pid","process"],"properties":{"pid":{"type":"integer"},"process":{"type":"string","nullable":true}}},"status_text":{"type":"string"},"uid":{"type":"integer"},"gid":{"type":"integer"}}}}}}},"UserEngineEngineResponse":{"type":"object","required":["user"],"properties":{"user":{"type":"object","required":["username","groupname","group_membership","shell","uid","gid","gecos","home_dir","password","ssh","inferred"],"properties":{"username":{"type":"string"},"groupname":{"type":"string"},"group_membership":{"type":"string","nullable":true},"shell":{"type":"string"},"uid":{"type":"integer"},"gid":{"type":"integer"},"gecos":{"type":"string"},"home_dir":{"type":"string"},"password":{"type":"object","required":["locked","disabled","empty","present","type","days_since_last_changed","age_min","age_max","warning_period","inactivity_period","days_since_expired","reserved","shadow_entry_missing","shadow_parsing_error"],"properties":{"locked":{"type":"boolean"},"disabled":{"type":"boolean"},"empty":{"type":"boolean"},"present":{"type":"boolean"},"type":{"type":"string"},"days_since_last_changed":{"type":"integer"},"age_min":{"type":"integer"},"age_max":{"type":"integer"},"warning_period":{"type":"integer"},"inactivity_period":{"type":"integer"},"days_since_expired":{"type":"integer"},"reserved":{"type":"string"},"shadow_entry_missing":{"type":"boolean"},"shadow_parsing_error":{"type":"string"}}},"ssh":{"type":"object","required":["authorized_keys","known_hosts","ssh_data_status"],"properties":{"authorized_keys":{"type":"object","required":["present","duplicate_found","total"],"properties":{"present":{"type":"boolean"},"duplicate_found":{"type":"boolean"},"total":{"type":"integer"},"data":{"type":"string","nullable":true},"file":{"type":"string","nullable":true}}},"known_hosts":{"type":"object","required":["present","total"],"properties":{"present":{"type":"boolean"},"total":{"type":"integer"},"data":{"type":"string","nullable":true},"file":{"type":"string","nullable":true}}},"ssh_data_status":{"type":"string"}}},"inferred":{"type":"boolean","description":"Indicates if the existence of this user is inferred from a directory present under /home, but not found in the /etc/passwd file (e.g. if the user authenticated via LDAP integration and has a local home directory)."}}}}}},"securitySchemes":{"bearerAuth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}}}