DSGVO & Datenschutz
Datenschutz-by-Design
qr3.app ist von Grund auf DSGVO-konform gebaut:
- IP-Pseudonymisierung — IP-Adressen werden im Edge-Worker sofort zu zweckgetrennten HMAC-SHA-256-UTC-Tagespseudonymen umgewandelt. Die Original-IP wird nie gespeichert; das Pseudonym bleibt ein personenbezogenes Datum.
- Retention-Policies — Scan-Daten werden automatisch nach Plan-abhängiger Frist gelöscht (Free: 7 Tage, Pro: 90 Tage, Business: 1 Jahr).
- Datenminimierung — Es werden nur die für den Betrieb notwendigen Daten erfasst.
Privacy-API
Datenzusammenfassung (Art. 15 DSGVO)
GET /v1/account/privacy — Gibt eine Übersicht aller gespeicherten Daten zurück.
curl https://qr3.app/v1/account/privacy \ -H "Authorization: Bearer qr3_sk_..."Response:
{ "data": { "workspace_id": "ws_xxx", "stored_data": { "qr_codes": { "count": 42, "oldest_at": "2026-03-01T..." }, "scan_records": { "count": 15000, "oldest_at": "2026-03-01T..." }, "api_keys": { "count": 2 }, "webhooks": { "count": 1 } }, "your_rights": { "access": "GET /v1/account/export", "erasure": "DELETE /v1/account", }, "data_processing": { "legal_basis": "Contract performance (Art. 6(1)(b) GDPR)", "sub_processors": [ { "name": "Cloudflare, Inc.", "purpose": "CDN, edge computing, database" } ] } }}Datenexport (Art. 20 DSGVO — Datenportabilität)
GET /v1/account/export — Lädt alle Daten als JSON-Datei herunter.
curl https://qr3.app/v1/account/export \ -H "Authorization: Bearer qr3_sk_..." \ -o meine-daten.jsonDer Export enthält:
- Alle QR-Codes (inkl. gelöschter)
- Aggregierte Scan-Statistiken (keine rohen IP-Hashes)
- Erstellungs- und Änderungszeitstempel
Konto löschen (Art. 17 DSGVO — Recht auf Vergessenwerden)
DELETE /v1/account — Unwiderrufliche Löschung aller Daten.
curl -X DELETE https://qr3.app/v1/account \ -H "Authorization: Bearer qr3_sk_..."Was passiert:
- Alle QR-Codes werden soft-deleted (archiviert)
- Alle Scan-Records werden hart gelöscht (PII)
- Alle API-Keys werden widerrufen
- KV-Cache wird invalidiert
Einwilligungen verwalten
GET /v1/account/privacy/consents — Aktuelle Einwilligungen abrufen.
POST /v1/account/privacy/consents — Einwilligungen aktualisieren.
# Aktuelle Einwilligungen abrufencurl https://qr3.app/v1/account/privacy/consents \ -H "Authorization: Bearer qr3_sk_..."
# Marketing-E-Mails deaktivierencurl -X POST https://qr3.app/v1/account/privacy/consents \ -H "Authorization: Bearer qr3_sk_..." \ -H "Content-Type: application/json" \ -d '{ "marketing_emails": false, "analytics": true, "product_updates": true }'Einwilligungs-Felder:
| Feld | Standard | Beschreibung |
|---|---|---|
marketing_emails | false | Newsletter und Werbe-E-Mails |
analytics | true | Aggregierte Nutzungsstatistiken |
product_updates | true | Produktneuheiten und Changelogs |
Technische DSGVO-Implementierung
IP-Pseudonymisierung (Art. 25 DSGVO)
HTTP-Anfrage → Cloudflare Edge Worker ↓CF-Connecting-IP-Header → HMAC-SHA-256(IP_HASH_SALT, Zweck, UTC-Tag, IP) ↓ip_hash (Tagespseudonym) → D1-Datenbank ↓Original-IP wird nie gespeichertIP_HASH_SALT ist ein langlebiges Master-Secret; Zweck und UTC-Tag erzeugen automatisch getrennte Tagespseudonyme. Pseudonyme verschiedener UTC-Tage sind nicht unmittelbar gleich, ein Inhaber des Secrets kann jedoch einen bekannten IP-Kandidaten für einen bestimmten Tag erneut berechnen. Es gibt weder einen KV-Tagessalt noch eine tägliche manuelle Rotation.
Daten-Retention (automatisiert)
Ein täglich ausgeführter Cron-Job (purgeOldScans) löscht Scan-Daten nach Plan-abhängiger Frist:
| Plan | Retention |
|---|---|
| Free | 7 Tage |
| Pro | 90 Tage |
| Business / Agency | 1 Jahr |
| Enterprise | Custom (SLA) |
Sub-Processor DPA
Cloudflare, Inc. verarbeitet Daten als Auftragsverarbeiter. Die DPA ist unter cloudflare.com/cloudflare-customer-dpa verfügbar.
Cloudflare verarbeitet Daten auf EU-Servern (Frankfurt). Standard Contractual Clauses (SCCs) gemäß Art. 46 DSGVO sind in Kraft.
Kontakt
- Datenschutzbeauftragter: [email protected]
- Auftragsverarbeitungsvertrag (AVV): [email protected] (auf Anfrage)
- Datenschutzerklärung: qr3.app/de/legal/datenschutz