RGPD & Proteção de Dados
Privacidade por Design
O qr3.app foi desenvolvido de raiz em conformidade com o RGPD:
- Anonimização de IP — Os endereços IP são imediatamente convertidos em hashes SHA-256 (com um salt rotativo diário) no Edge Worker. O IP original nunca chega à base de dados.
- Políticas de retenção — Os dados de leitura são eliminados automaticamente de acordo com o prazo do plano (Free: 7 dias, Pro: 90 dias, Business: 1 ano).
- Minimização de dados — Apenas são recolhidos os dados estritamente necessários para o funcionamento.
Privacy-API
Resumo dos dados (Art. 15.º do RGPD)
GET /v1/account/privacy — Devolve uma visão geral de todos os dados guardados.
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" } ] } }}Exportação de dados (Art. 20.º do RGPD — Portabilidade dos dados)
GET /v1/account/export — Descarrega todos os dados como um ficheiro JSON.
curl https://qr3.app/v1/account/export \ -H "Authorization: Bearer qr3_sk_..." \ -o meine-daten.jsonA exportação contém:
- Todos os códigos QR (incluindo os eliminados)
- Estatísticas de leitura agregadas (sem hashes de IP originais)
- Carimbos de data/hora de criação e alteração
Eliminar conta (Art. 17.º do RGPD — Direito ao esquecimento)
DELETE /v1/account — Eliminação irreversível de todos os dados.
curl -X DELETE https://qr3.app/v1/account \ -H "Authorization: Bearer qr3_sk_..."O que acontece:
- Todos os códigos QR são eliminados de forma lógica (arquivados)
- Todos os registos de leitura são eliminados permanentemente (PII)
- Todas as chaves de API são revogadas
- O cache KV é invalidado
Gerir consentimentos
GET /v1/account/privacy/consents — Obter os consentimentos atuais.
POST /v1/account/privacy/consents — Atualizar os consentimentos.
# 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 consentimento:
| Campo | Predefinição | Descrição |
|---|---|---|
marketing_emails | false | Newsletter e e-mails promocionais |
analytics | true | Estatísticas de utilização agregadas |
product_updates | true | Novidades do produto e registos de alterações (changelogs) |
Implementação técnica do RGPD
Anonimização de IP (Art. 25.º do RGPD)
HTTP Request → Cloudflare Edge Worker ↓CF-Connecting-IP Header → SHA-256(IP + täglicher Salt) ↓ip_hash (nicht reversibel) → D1 Datenbank ↓Original-IP wird NIEMALS gespeichertO salt roda diariamente à meia-noite UTC. Desta forma, mesmo que o salt seja conhecido, não é possível correlacionar IPs entre dias diferentes.
Retenção de dados (automatizada)
Uma tarefa cron executada diariamente (purgeOldScans) elimina os dados de leitura após o prazo dependente do plano:
| Plano | Retenção |
|---|---|
| Free | 7 dias |
| Pro | 90 dias |
| Business / Agency | 1 ano |
| Enterprise | Personalizado (SLA) |
DPA de Subprocessadores
A Cloudflare, Inc. processa dados como subcontratante. O DPA está disponível em cloudflare.com/cloudflare-customer-dpa.
A Cloudflare processa dados em servidores da UE (Frankfurt). As Cláusulas Contratuais-Tipo (SCCs) nos termos do Art. 46.º do RGPD estão em vigor.
Contacto
- Encarregado de Proteção de Dados: [email protected]
- Acordo de Processamento de Dados (DPA): [email protected] (sob consulta)
- Política de Privacidade: qr3.app/de/legal/datenschutz