GDPR and Data Privacy

EU data residency

All data is processed exclusively in the EU.

What we store

Category Contents
Intake metadata Project name, client email, item definitions, timestamps
Submitted values Text, structured data, color lists, booleans, URLs
File references R2 object keys, filenames, MIME types, file sizes
Secrets ciphertext Encrypted blobs only — plaintext is never stored
Audit log Actor, IP (stored separately, access-controlled), action, timestamp
Chase history Sent reminders, delivery status, bounce records

Client IP addresses collected during portal access are stored in a separate table with more restrictive access controls and are used only for deduplication and fraud signals. They are hashed before being included in webhook payloads.

Data retention

Delete as soon as the agent has the files

Ninety days is a long time to keep a client's photos and admin password after your agent already downloaded them. If an intake holds anything sensitive, set retention to on_delivery:

jsonc
{
  "project_name": "Web pro Kramolišová Finance",
  "client": { "email": "klient@firma.cz" },
  "retention": { "mode": "on_delivery" },   // + optional "anonymize": false
  "items": [ /* … */ ]
}

The contents are then removed roughly 24 hours after get_intake_results returns a completed intake — the point at which you have the files and a second copy on our server is liability rather than service.

Field Default Meaning
mode "days" "days": purge N days after the client finishes. "on_delivery": purge shortly after you collect the results.
days account setting (90) Days to keep after completion. Only valid with mode: "days".
anonymize true Keep the project record and delete everything belonging to the client. false deletes the whole intake.

Two guarantees worth knowing:

What anonymize: true actually removes

Deleted Kept
Files (from R2), secrets, submitted values Project name, creation and completion dates
Client email, name, phone Item keys, labels, types, statuses
Magic token — the portal link stops working Chase history (counts and timestamps)
Live portal sessions Audit log entries

What remains is the record you need — "I asked for 7 things on 15 July, all delivered by the 20th" — holding nothing of your client's. Set anonymize: false if you want even that gone.

Subject rights

Under GDPR, your clients (as data subjects) have rights over their personal data. As the data controller, it is your responsibility to honor these requests. BriefGate provides the following API support:

Right to access: GET /v1/audit?client_email=owner@bellacucina.cz returns all interaction records tied to that email address across your account.

Right to erasure: DELETE /v1/intakes/:id removes all data for a specific intake. For complete erasure of a client across all intakes, filter by client_email and delete each intake. Contact support for bulk erasure.

Right to portability: Submitted data is available via GET /v1/intakes/:id/results as structured JSON and signed file URLs. Export as needed before the retention period expires.

BriefGate does not provide a separate "export my data" endpoint for end clients (your clients). Providing data subject access is your responsibility as data controller.

Data controller and processor relationship

Role Party Obligations
Data controller You (the developer / agency) Decide what data to collect, from whom, and for what purpose
Data processor BriefGate Process data on your instructions, implement technical safeguards

A Data Processing Agreement (DPA) template is available for download in your account settings. You should sign this before processing EU personal data on behalf of clients. The DPA documents:

Subprocessors

Subprocessor Role Location Legal basis
Hetzner Online GmbH Application hosting Germany (EU) Contractual
Cloudflare Inc. File storage (R2 EU jurisdiction) US company, EU data Standard Contractual Clauses
Resend Inc. Transactional email delivery US Standard Contractual Clauses
Twilio Inc. SMS delivery (optional add-on) US Standard Contractual Clauses
Stripe Inc. Payment processing US Standard Contractual Clauses

SCCs (Standard Contractual Clauses) per EU Commission Decision 2021/914 apply to all US-based subprocessors. The full list is updated in account settings when changes occur.

Security measures

Measure Implementation
Secret values libsodium sealed box encryption before storage
File access Signed R2 URLs with 24-hour validity — URLs are not guessable
Passwords argon2id hash
API keys argon2id hash — plaintext never stored after creation
Transport TLS 1.2+ for all connections
Audit log Immutable append-only log for sensitive operations
Key isolation Secrets private key never stored in the database

Penetration testing is performed annually by an independent third party. Results are available under NDA on request.