Skip to main content
Driftstack DRIFTSTACK

Data residency

This page covers where your data physically lives, what counts as "customer data" for residency purposes, and how the region account preference shapes routing.

The short answer

What counts as customer data

CategoryStored whereNotes
Account row (email, tier, slug, region pref, MFA secret) Postgres (Neon, EU) MFA secret AES-256 encrypted with MFA_ENCRYPTION_KEY
API keys (hashed) Postgres (Neon, EU) scrypt logN=15; plaintext never stored
Sessions metadata Postgres (Neon, EU) Lifecycle rows + events; no payload
Profile metadata Postgres (Neon, EU) Name, archetype, description only
Profile state blob (cookies, localStorage) WebKit driver layer, EU host Per-profile encrypted file on disk
Session recordings (WebM) R2 (Cloudflare, EU + US replication) Object-level S3-SSE; presigned URLs 1h TTL
Audit log entries Postgres (Neon, EU) Append-only; tier-dependent retention
Webhook deliveries Postgres (Neon, EU) Payload + response excerpt; 7-day retention
Stripe customer / payment data Stripe (US) We never see card numbers. Stripe customer_id is the linkage.
NowPayments order metadata NowPayments (EU, Estonia) We see payment_id + status only; on-chain data stays on-chain.
Cache (Redis) Upstash (EU) Auth cache, rate-limit counters, MFA-challenge tokens — all short-lived (≤5 min TTL).
Sentry error events Sentry EU (ingest.de.sentry.io) Code-level errors with redacted body fields. PII filter strips emails before send.
Email delivery (transactional) Postmark (EU sending region) Recipient address + template payload only. See /trust/sub-processors for the transfer-mechanism breakdown.

What never leaves the EU

What does leave the EU

The region account preference

Set on the account via PATCH /v1/account/me:

PATCH /v1/account/me
Authorization: Bearer ds_live_…
{ "region": "eu" }

Accepted values: us, eu, apac, or null (unset).

Today: the field is informational. We surface it on the account-me response and use it as a tag in our observability stack so we can prioritise where to add PoPs.

Roadmap: once additional PoPs exist (planned for US + APAC in 2026), API routing will land sessions for region: us accounts on US infrastructure, and region: apac on APAC. The account row will still live in the EU primary; sessions + recordings will live in the preferred region.

GDPR / DSAR / right-to-erasure

Customer accounts can be deleted on request. We hold a 30-day grace period for accidental delete recovery, after which the account row + all linked resources (sessions, profiles, recordings, audit log, webhook deliveries) are purged. Stripe + NowPayments customer references are removed from our side; their own retention policies govern what they keep beyond that.

Data subject access requests: [email protected].

Subprocessor list

Up-to-date subprocessor list with regions, purpose, and DPA links: /legal/sub-processors.

Support

Residency / compliance questions: [email protected].