Docs

File DA-035 View as Markdown

Security

What stops abuse, of us and of your numbers.

ThreatDefence
Floods of fake beaconsPer-IP, per-key and per-hostname rate limits; adaptive proof-of-work; quarantine
Forged or replayed beaconsServer-owned session weight (always 1), plausibility checks, one stored session per id however often it is replayed, optional attested tickets
Account farmingPOST /v1/accounts needs proof-of-work or Turnstile; 5 per IP an hour, 3 per email a day
Magic-link abuseSingle-use, 15 min, hashed at rest; the same answer whether or not the email exists
Stolen secret keyRotate in HQ (old key lives 24 h) or revoke now; keys are hashed at rest
Cross-tenant readsEvery query is scoped to a site you're a member of; data routes 403 until verified

Rate limits

RouteLimit
Login3 per email per 15 min, 10 per IP an hour
Magic-link verify20 per IP a minute; a token locks after 5 bad tries
Accounts5 per IP an hour, 3 per email a day
Collect60 per IP a minute, 10k per key a minute, 1k per keyless hostname a minute
Check30 per IP a minute
Data routes120 per session a minute
Install check30 per IP a minute

Every limit returns 429 with Retry-After. IPs are hashed with a daily salt, never stored raw.

Trust and quarantine

Each beacon gets trust 0 to 1 from origin match, plausibility, IP reputation, proof-of-work and tickets. Below 0.4 it's stored as unverified traffic: visible in HQ, kept out of stats, priors, relabel and webhooks.

Proof of work

When a spike is detected the API publishes DA-PoW: v=1;d=<bits>;nonce=<n> (response header and edge hint). The SDK solves SHA-256 over sid|host|nonce|solution in a worker; a missing answer quarantines, never drops. Default difficulty: 0.

Attested tickets (optional)

Your edge adapter adds Server-Timing: da;desc="t=<ticket>", an HMAC derived from your secret key. The beacon echoes it; a valid ticket means high trust. See Declared cover for edge hints.