Security

Security Overview

Last updated: 22 March 2026  ·  For IT Security Teams & Decision Makers

TL;DR for IT Security: ThresholdIQ uses a two-layer architecture. Your data files (Excel, CSV, JSON, XML) are processed 100% client-side in the browser — file contents are never transmitted to any server. Account management (authentication, subscription, usage tracking) is handled by a Cloudflare Worker API with HMAC-signed session tokens, rate limiting, and encrypted transport. The only personal data stored server-side is your email address and subscription status.
DATA EXFILTRATION RISK: LOW

1. Architecture overview

ThresholdIQ has two distinct layers with a clear security boundary between them:

Client-side (browser) — data processing

ComponentImplementation
File readingFileReader API (browser-native, no uploads to any server)
Data parsingPapaParse (CSV), SheetJS (Excel), JSON.parse — all self-hosted
ML detection9 detection methods running in Web Workers (background threads in browser)
VisualizationChart.js (client-side rendering)
PDF exportjsPDF + autoTable (client-side PDF generation, downloads locally)
Local storageOptional — stores session token and preferences on device only, requires consent

Server-side (Cloudflare Worker) — account management

ComponentImplementation
API serverCloudflare Worker (edge compute, no persistent server)
Data storeCloudflare Workers KV (key-value store for account records)
AuthenticationEmail-based magic-link OTP (no passwords stored)
PaymentsStripe Checkout + Billing Portal (card data handled entirely by Stripe)
Email deliveryZoho Mail API (OTP codes and alert notifications)

2. What gets transmitted (and what doesn't)

Never transmitted to any server

Transmitted to ThresholdIQ API (Cloudflare Worker)

Key point: The security boundary is clear — your data files stay in the browser, your account info (email + subscription) lives on the server. These two layers do not share data.

Verification: IT Security can confirm zero file data transmission by monitoring the Network tab (F12) during file upload and detection runs. You will see only static asset requests and API calls to /api/check-status and /api/track-run — no file content payloads.

3. Authentication security

ThresholdIQ uses passwordless email-based authentication with the following controls:

ControlImplementation
OTP generation6-digit code from crypto.getRandomValues() (cryptographically secure random)
OTP expiry10 minutes (auto-deleted from KV after expiry)
OTP attempt limit3 incorrect attempts — code is invalidated, user must request a new one
Session tokensHMAC-SHA256 signed (customerId.timestamp.signature), verified on every API request
Session expiry7 days (stateless — not stored server-side, validated via signature)
No passwordsNo password database exists. Authentication is tied to email access only.

4. Rate limiting

All sensitive endpoints are rate-limited per IP address to prevent brute-force and abuse:

EndpointLimitWindow
OTP request (/api/auth/email)10 requests15 minutes
OTP verification (/api/auth/verify-otp)10 attempts15 minutes
Checkout (/api/create-checkout)5 attempts1 hour
AI chatbot (/api/chat)20 messages1 hour
Alert emails (/api/send-alert-email)10 emails1 hour
Config (/api/config)30 requests1 minute

Rate limit counters are stored in Cloudflare KV with automatic TTL expiry. No persistent IP address logs are kept.

5. Origin validation and API security

6. Server-side data storage

Account data is stored in Cloudflare Workers KV. Here is the complete list of what is stored:

DataStorage locationRetention
Email addressKV (plaintext + SHA-256 hash index)Until account deletion
Customer ID (UUID)KVUntil account deletion
Subscription tier and statusKVUntil account deletion
Stripe customer ID and subscription IDKV (IDs only — no card data)Until subscription ends
Usage counters (runs this month)KVMonthly reset
OTP codesKV10 minutes (auto-deleted)
Rate limit countersKV15 min – 1 hour (auto-deleted)

What is NOT stored server-side: No passwords, no credit card numbers, no file contents, no detection results, no column names, no threshold configurations, no raw data of any kind.

7. Third-party services

ServicePurposeData shared
Cloudflare (Workers, KV, Pages)Hosting, API, data storageAccount data, email, IP addresses
StripePayment processingEmail address. Card data collected directly by Stripe — never touches our servers.
Zoho MailTransactional email deliveryRecipient email, email content (OTP codes, alert notifications)
Cloudflare Workers AIIn-app help chatbotChat messages (not stored after processing)
Google AnalyticsAnonymised usage analyticsPage views, session data (anonymised IP)
Microsoft ClarityUsability heatmapsAnonymised session recordings (no PII)

8. Client-side libraries

All JavaScript libraries are self-hosted within thresholdiq.app. No external CDN requests are required for core functionality.

LibraryLicencePurpose
Chart.jsMITTimeline and distribution charts
PapaParseMITCSV file parsing
SheetJSApache 2.0Excel file parsing
jsPDF + autoTableMITClient-side PDF report generation
simple-statisticsISCStatistical computations for ML detection
isolation-forestMITMultivariate outlier detection

9. Security risk assessment

Risk categoryRisk levelMitigation
Data exfiltration (file contents) NONE File data never leaves the browser. Verifiable via Network tab.
Account data breach LOW Only email + subscription IDs stored. No passwords, no card data. Cloudflare KV encrypted at rest.
Session hijacking LOW HMAC-SHA256 tokens, 7-day expiry, HTTPS-only transport, origin validation.
Brute-force login LOW 3-attempt OTP lockout + IP rate limiting (10 requests / 15 min).
Man-in-the-middle LOW TLS 1.3, HSTS preload, strict CSP headers.
Webhook spoofing LOW Stripe signatures verified with HMAC-SHA256 + timing-safe comparison + 5-min replay window.
Malicious code injection LOW Content-Security-Policy restricts script sources. All libraries self-hosted.

10. Compliance

GDPR compliance

Data sovereignty

Uploaded file data never leaves the user's browser, inherently satisfying data residency requirements. Account data (email, subscription status) is stored on Cloudflare's global edge network and may be replicated across regions. Payment processing is handled by Stripe (US-based). See our Privacy Policy for full details on international transfers.

11. For IT security teams

Recommended access controls

Verification methods

Contact for security questions

Email: support@thresholdiq.app

For responsible disclosure of security vulnerabilities, please email the same address with subject line "Security Disclosure".