Skip to content

Data Handling

This page details how FileSafety handles your files from upload to deletion, what data is stored, and the encryption methods used at every stage.

Every file uploaded to FileSafety follows a strict lifecycle with immediate deletion after scanning:

T+0s File uploaded to encrypted file storage (AES-256)
T+1-5s File queued for scanning
T+5-20s Malware detection and content analysis run
T+15-30s Scan results written to the database
T+15-30s Webhook delivered to your endpoint
T+15-30s File immediately deleted from storage
T+24h Failsafe lifecycle policy removes any remaining files
TimeEventData state
UploadFile stored in encrypted file storageEncrypted at rest (AES-256), encrypted in transit (TLS 1.3)
+1-5 secondsScan message queuedFile remains in encrypted storage
+5-20 secondsMalware detection and content analysis runFile processed in isolated compute
+15-30 secondsScan completeResults stored in database; webhook delivered; file deleted
+24 hoursFailsafeS3 lifecycle policy as safety net for any files not already deleted

Files are deleted immediately after scanning completes. The 24-hour S3 lifecycle policy serves as a failsafe to guarantee no files persist beyond that window.

All files are encrypted at rest using AES-256 server-side encryption. Encryption is applied automatically when the file is written to storage — there is no unencrypted window.

DataEncryption
Uploaded filesAES-256
Scan resultsAES-256

All data in transit is encrypted with TLS 1.3:

PathProtocol
Client to API endpointTLS 1.3
Client to presigned URL uploadTLS 1.3
Internal service communicationTLS via private endpoints
Webhook delivery to your endpointHTTPS (TLS)

Older TLS versions (1.0, 1.1, 1.2) are not accepted for API requests.

During the scan (deleted immediately after)

Section titled “During the scan (deleted immediately after)”
DataStorageRetention
File binary contentEncrypted file storageDeleted immediately after scan (24h failsafe)
DataStorageRetention
Scan IDDatabase30 days
Verdict (clean/infected/nsfw/mixed/failed)Database30 days
Virus scan result (engine, clean flag, signature)Database30 days
NSFW scan result (clean flag, categories, confidence)Database30 days
File cryptographic hashDatabase30 days
Scan completion timestampDatabase30 days
User-provided metadataDatabase30 days
DataStored?
File content (after scan)No — deleted immediately after scanning
File nameNo
IP addresses of uploadersNo
File content in application logsNo
Raw NSFW analysis outputNo — only the verdict, categories, and confidence are stored

FileSafety does not log file content at any stage of processing. Application logs contain:

  • Scan IDs
  • Status transitions
  • Error messages (without file content)
  • Timing information

File bytes are never written to stdout or any logging pipeline.

The metadata field you provide when submitting a scan is stored alongside the scan results in the database. This data:

  • Is encrypted at rest
  • Is returned in scan poll responses and webhook payloads
  • Is retained for 30 days with the scan record
  • Is limited to 4 KB maximum
  • Is under your control — you decide what to include

Do not include sensitive information (passwords, tokens, PII) in the metadata field. While it is encrypted at rest, it is returned in API responses and webhook payloads.

When using the presigned URL flow:

  • The presigned URL is scoped to a single object in encrypted file storage
  • The URL expires after 15 minutes
  • Only the PUT method is allowed — the URL cannot be used to read or list other objects
  • The URL is signed with temporary credentials, not long-lived keys

API keys are hashed using a cryptographic hash before being stored for request authentication. The plaintext key is:

  • Generated server-side and returned to you once at creation time
  • Temporarily stored only for one-time reveal flows (then cleared)
  • Not recoverable — if lost, you must regenerate

Files are deleted immediately after scanning completes. A 24-hour S3 lifecycle policy remains as a failsafe to ensure no files persist beyond that window. This is automatic and cannot be extended or shortened.

Contact support to request deletion of specific scan records. This removes the verdict, hash, and metadata associated with a scan.

When you delete your account, a 30-day grace period begins during which you can reactivate your account. After the grace period:

  • All scan records are permanently removed from the database
  • Any remaining files are deleted from storage
  • Your API key hash is removed
  • Billing data is retained by Stripe per their data retention policies