RGPD y Privacidad
Privacidad desde el diseño
qr3.app está diseñado desde cero para cumplir con el RGPD:
- Seudonimización de IP — Las direcciones IP se convierten inmediatamente en seudónimos diarios UTC HMAC-SHA-256 en el Edge Worker. La IP original nunca se almacena; el seudónimo sigue siendo un dato personal.
- Minimización de datos — Solo se recopilan los datos estrictamente necesarios para el funcionamiento.
API de Privacidad
Resumen de datos (Art. 15 del RGPD)
GET /v1/account/privacy — Devuelve un resumen de todos los datos almacenados.
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" } ] } }}Exportación de datos (Art. 20 del RGPD — Portabilidad de datos)
GET /v1/account/export — Descarga todos los datos como un archivo JSON.
curl https://qr3.app/v1/account/export \ -H "Authorization: Bearer qr3_sk_..." \ -o meine-daten.jsonLa exportación contiene:
- Todos los códigos QR (incluidos los eliminados)
- Estadísticas de escaneo agregadas (sin hashes de IP sin procesar)
- Marcas de tiempo de creación y modificación
Eliminar cuenta (Art. 17 del RGPD — Derecho al olvido)
DELETE /v1/account — Eliminación irrevocable de todos los datos.
curl -X DELETE https://qr3.app/v1/account \ -H "Authorization: Bearer qr3_sk_..."Qué sucede:
- Todos los códigos QR se eliminan de forma lógica (se archivan)
- Todos los registros de escaneo se eliminan de forma permanente (PII)
- Todas las claves de API se revocan
- Se invalida la caché de KV
Gestionar consentimientos
GET /v1/account/privacy/consents — Obtener los consentimientos actuales.
POST /v1/account/privacy/consents — Actualizar los consentimientos.
# 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 }'Campos de consentimiento:
| Campo | Predeterminado | Descripción |
|---|---|---|
marketing_emails | false | Boletines informativos y correos electrónicos promocionales |
analytics | true | Estadísticas de uso agregadas |
product_updates | true | Novedades de productos y registros de cambios |
Implementación técnica del RGPD
Seudonimización de IP (Art. 25 del RGPD)
Solicitud HTTP → Cloudflare Edge Worker ↓Cabecera CF-Connecting-IP → HMAC-SHA-256(IP_HASH_SALT, finalidad, día UTC, IP) ↓ip_hash (seudónimo diario) → base de datos D1 ↓La IP original nunca se almacenaIP_HASH_SALT es un secreto maestro de larga duración; la finalidad y el día UTC derivan automáticamente seudónimos diarios separados. Los seudónimos de distintos días UTC no son directamente iguales, pero quien posee el secreto puede recalcular un candidato de IP conocido para un día concreto. No se usa sal diaria en KV ni rotación manual diaria.
Retención de datos (automatizada)
| Plan | Retención |
|---|---|
| Todos los planes | 90 días |
DPA de subencargados del tratamiento
Cloudflare, Inc. procesa los datos como encargado del tratamiento. El DPA está disponible en cloudflare.com/cloudflare-customer-dpa.
Cloudflare procesa los datos en servidores de la UE (Fráncfort). Las Cláusulas Contractuales Estándar (SCC) de conformidad con el Art. 46 del RGPD están vigentes.
Contacto
- Delegado de Protección de Datos: [email protected]
- Acuerdo de procesamiento de datos (DPA): [email protected] (bajo petición)
- Política de privacidad: Política de privacidad