Platform

Security overview

This page summarizes the security model used in ScanLedger. For the full policy, see /security. To report a vulnerability, email [email protected].

Encryption

  • At rest: AES-256 for documents, datasets, and backups.
  • In transit: TLS 1.3 on every endpoint.
  • Sensitive fields: OAuth tokens and webhook secrets are encrypted with per-field keys derived from GOOGLE_TOKEN_ENCRYPTION_KEY and SECRET_KEY.

Authentication

  • Passwords hashed with bcrypt.
  • Sessions via httpOnly JWT cookies (secure in production).
  • Optional Google OAuth sign-in.
  • Token versioning — bumps invalidate all existing tokens on privilege change.
  • Redis-backed token blacklist — immediate revocation on logout or role change.

Rate limiting

  • General API: 100 requests/minute per user.
  • Auth endpoints: 5 requests/minute to prevent brute force.
  • Free-tier scans: 5/day.

AI data handling

Document content and chat prompts are sent to our AI providers (OpenAI GPT-4 Vision by default; Google Gemini 2.5 Flash as alternative) over TLS for the duration of each request. Both providers are covered by data-processing agreements that prohibit use of your content for model training.

Payments

We never store full card numbers. Paystack (NGN) and Stripe (USD/CAD/GBP/EUR) are both PCI DSS Level 1 certified. We store only the transaction reference and the last four digits of the card for display purposes.

Data retention

  • Free-tier: 7-day active window; older data is archived.
  • Paid plans: unlimited active retention.
  • Account deletion: all data is purged within 30 days, except where retention is required by law.

Backups

Daily automated backups, geographically distributed, with point-in-time recovery. Backup integrity is validated on a rolling schedule.

Responsible disclosure

Found something? Email [email protected]. We acknowledge within 24 hours, keep you informed while we fix it, and credit you publicly if you want. Please give us 90 days before public disclosure.

Read more