Legal
Data processing agreement
1. Parties and roles
The customer who holds the Hazelchat account is the controller. Jan-Philipp Peters, sole trader, Prenzlauer Allee 173, 10409 Berlin, Germany (“Hazelchat”) is the processor. Account data of the customer itself (email address, credentials, workspace settings) is processed by Hazelchat as an independent controller and is covered by the privacy notice, not by this agreement.
2. Subject matter, duration, nature and purpose
Hazelchat operates a chat that the controller installs on its verified website and, if the controller switches it on, offers on a page hosted by Hazelchat at chat.hazelchat.co that names that verified website. On the controller's behalf, Hazelchat stores visitor conversations and any enquiries, retrieves passages from the controller's approved content to answer questions, records, unless the controller switches it off, where each conversation came from as the visitor's browser reported it so that the controller can see which campaigns, referring sites and pages lead to conversations, enquiries and bookings and, where the controller connects its shop, orders, records the privacy notice version shown when an enquiry was made, notifies the controller by email that an enquiry has arrived — with the visitor's name, email address and message in that email when the controller has enabled it — applies the retention period the controller configures, and provides export, search and deletion tools and, where the controller connects an AI assistant, answers that assistant's requests for the controller's agent overview, conversations and enquiries and records its test questions and the answers it adds to the controller's draft. When the controller uses Workshop, the assistant in its account, Hazelchat also counts the controller's visitor activity and enquiries, and sends the controller's visitor questions (with email addresses, web addresses, phone numbers and long numbers replaced), their outcome and day, passages of the approved content and the draft settings to the subprocessor in Annex 1 that provides AI processing, to answer the controller's questions about its agent and to propose changes to its draft. Hazelchat applies a proposed change only when the controller approves it, and never publishes it. Processing lasts as long as the account exists and ends with the deletion described in section 11.
3. Types of data and data subjects
- Data subjects: visitors of the controller's website, or of the controller's shared page, who use the chat, and any persons mentioned in their messages; persons on whose behalf an AI agent asks the controller's agent through its public agent address, and any persons mentioned in those questions.
- Data: questions and answers, including the source passages shown; enquiry name, email address and message; the permission wording and notice version displayed, with timestamp, conversation and publication reference; where each conversation came from, as the visitor's browser reported it when the conversation started: campaign tags (utm_source, utm_medium, utm_campaign, utm_content) of at most 100 characters each, the name of an ad network whose click identifier was in the page address (not the identifier), the host name of the referring site (not its address), the path of the page the chat started on (without query or fragment) and how the chat was opened; with each question, the path of the page it was sent from (without query or fragment; used for the answer, not stored) and the controller's catalog product shown on that page, stored with the question; a short-lived conversation credential; hashed technical identifiers used to limit abuse; content-free usage events (chat opened, offered link followed, opener message shown or clicked, question sent from a question bar) recorded by kind and conversation; the events carry no page and no identifier; where the controller connects its booking provider: a random reference per conversation that is added to the controller's booking link, and the fact, kind (booked, cancelled, rescheduled) and time of a booking notice received from that provider for the conversation, with a hash of the provider's booking identifier; where the controller connects its shop for order tracking: a random reference per conversation that is added to the products a visitor adds to the cart from the chat, and, from the shop's signed reports of orders containing such a product, the shop's order number, a hash of the order's internal identifier, the order's total after refunds, currency, status and time, and the product, variation, quantity and amount of each line added from the chat; where the controller connects its Stripe account for payment links: a random reference per conversation added to the controller's chosen payment link as Stripe's client reference ID, and, from Stripe's signed notices of checkouts through that link carrying such a reference, Stripe's checkout and link identifiers, the product name the controller gave the link, the amount after refunds, currency, status and time; buyer details Stripe includes in those notices are not stored; where a next step offered in a conversation leads off the controller's own website: the same random reference, added to that link; where a conversation was started through the controller's public agent address, or on the controller's website without the Origin header browsers send or by a request naming a known AI agent product: a note that the conversation came from an AI agent and, where the request named the product, that product's name (never the full User-Agent string); questions from the agent address are stored with email addresses and phone numbers removed; where the controller uses Workshop: references to visitor messages (never their text) in the controller's Workshop history, kept for 30 days or the conversation retention period if shorter; where the controller answers a visitor's question by email: the visitor's question, the controller's reply and the email address it is sent to; the reply is kept, with the question as its wording and contact details removed, as one of the controller's answers until the controller removes it.
- No special categories of data are intended. The controller must not configure the chat to solicit such data.
4. Instructions
Hazelchat processes visitor data only on the controller's documented instructions. The controller's configuration in the product — approved content, published versions, privacy details, retention periods, notification and capture settings, deletion and export actions — constitutes its instructions. Additional instructions must be given in text form to hello@hazelchat.co. Hazelchat will inform the controller without delay if, in its opinion, an instruction infringes data protection law, and may suspend that instruction until it is confirmed.
Where the controller connects a third-party service or a system of its own to the Service, for example through an owner API key used by Zapier or n8n, the controller instructs Hazelchat to transmit the data described in the API documentation to that service or system: the enquiry data each time a new enquiry is saved or the service looks up enquiries by email address, and, where the controller subscribes to them, visitor questions the agent could not answer, with email addresses and phone numbers removed, at most ten per hour. Where the controller allows a key to add draft answers, the service may add answers to the controller's draft. Hazelchat stores them as the controller's content and does not publish them; only the controller does. The connected service or system and any tools the controller links to it act for the controller under the controller's own agreement with them. They are not subprocessors of Hazelchat. The controller can end the transmission at any time by revoking the key in Settings. Where the controller connects an email-marketing tool such as MailerLite, the controller may have the Service show visitors an optional newsletter consent box and pass the names and email addresses of visitors who tick it, with the time of the tick, to that tool; the Service keeps a record of each tick with the enquiry. The controller is responsible for that newsletter, its lawful basis, its own privacy notice and the tool's terms.
Where the controller connects an AI assistant to the Service (for example Claude, ChatGPT or Claude Code, through the consent screen or an assistant key), the controller instructs Hazelchat to answer that assistant's requests within the permissions the controller granted: to provide counts of the controller's agent activity; visitor questions, Hazel's answers and the quoted passages, with email addresses and phone numbers removed from visitor text; enquiries without contact details, or with name, email address and message where the controller granted that permission and enabled visitor details; to answer test questions against the controller's saved draft; and to add answers to the controller's draft. Hazelchat sends nothing to the assistant on its own initiative. The assistant and its provider act for the controller under the controller's own agreement with them; they are not subprocessors of Hazelchat. The controller is responsible for assessing that agreement, including whether its provider may use the data for its own purposes. The controller can end the transmission at any time by disconnecting the assistant or revoking the key in Settings. Nothing an assistant adds is shown to visitors before the controller publishes it in the Service.
The controller's agent-door setting (Website settings, "Let AI agents ask your agent", on by default where the feature is available) is its instruction to answer AI agents from its published version through its public agent address. Switching it off ends that processing at once; conversations already stored follow the controller's retention.
Where the controller connects its booking provider (for example Cal.com or Calendly) in the Service, the controller instructs Hazelchat to add a random conversation reference to the controller's booking link and to receive and record the provider's notices that a booking was made, cancelled or rescheduled for that conversation. Hazelchat keeps no booking details from those notices. The booking provider acts for the controller under the controller's own agreement with it and is not a subprocessor of Hazelchat. The controller can end this at any time by disconnecting the provider in the Service.
Where the controller connects its shop (for example WooCommerce, through the Hazelchat WordPress plugin) for order tracking in the Service, the controller instructs Hazelchat to add a random conversation reference to the products a visitor adds to the cart from the chat, and to receive and record the shop's signed reports that an order containing such a product was paid, cancelled or refunded. Hazelchat keeps no buyer details from those reports. The shop, its software and its payment providers act for the controller under the controller's own agreements and are not subprocessors of Hazelchat. The controller can end this at any time by switching order tracking off in the Service.
5. Confidentiality
Only persons bound to confidentiality and instructed in data protection have access to visitor data. Access is limited to what operating the service requires; Hazelchat does not read conversations or enquiries for its own purposes.
6. Security
Hazelchat implements the technical and organisational measures in Annex 2 and reviews them as the service develops. Measures may be replaced by others that provide at least the same level of protection.
7. Subprocessors
The controller gives general authorisation for the subprocessors in Annex 1. Hazelchat will notify the controller by email at least 30 days before adding or replacing a subprocessor. If the controller objects on reasonable data-protection grounds and no solution is found, the controller may close the account before the change takes effect. Hazelchat imposes data-protection obligations on each subprocessor by contract that are equivalent to those in this agreement and remains liable to the controller for its subprocessors' performance. Brevo (Sendinblue SAS, France) receives the visitor's name, email address and message, and where the conversation came from, only if the controller enables the visitor's details in the notification email (Settings → Data & privacy); switching that on is the controller's instruction to send them, and switching it off ends it.
8. Assistance with data subject rights
The product lets the controller search saved enquiries and linked conversations by email address, export them, and delete individual records or the whole workspace. Hazelchat will forward without delay any visitor request that reaches it directly and will assist the controller with requests it cannot fulfil through the product, taking into account the nature of the processing. Hazelchat cannot identify anonymous conversations that have no associated enquiry.
Where the controller's website is a Shopify store connected through the Hazelchat Shopify app, Shopify sends Hazelchat its requests on behalf of the store's customers for access to or erasure of their data. The controller instructs Hazelchat to use only the email address in such a request to search for enquiries left with that address in the chat on the store's websites. On an erasure request, Hazelchat deletes those enquiries and the conversations they came from. On an access request, it records the number found; the controller can view and export those enquiries in the Service. Hazelchat does not otherwise answer such requests on the controller's behalf.
9. Personal data breaches
Hazelchat notifies the controller without undue delay, and no later than 48 hours, after becoming aware of a personal data breach affecting visitor data. The notification describes the nature of the breach, the categories and approximate number of data subjects and records concerned, the likely consequences, the measures taken or proposed, and a contact for further information, as far as known at that time; further information follows as it becomes available. Hazelchat does not send notices to data subjects or authorities on the controller's behalf unless instructed.
10. Impact assessments and audits
Hazelchat assists the controller with data protection impact assessments and prior consultations insofar as they concern the processing under this agreement. Hazelchat provides the information needed to demonstrate compliance with Art. 28 GDPR, including this agreement, the privacy notice and Annexes 1 and 2. The controller may audit compliance with 30 days' notice, at most once a year unless a breach or a supervisory authority requires more, during business hours and without disrupting the service or exposing other customers' data. Reasonable costs of on-site audits are borne by the controller.
11. Deletion and return
Conversations and enquiries are deleted automatically after the retention period configured by the controller (default 90 days). The controller can delete individual records at any time and can export the workspace as JSON and CSV before closing the account. Closing the account deletes the workspace and cancels queued work immediately. Encrypted backups expire within 30 days; a separate deletion record ensures that deleted data is deleted again if an older backup is ever restored. Emails already delivered to the controller cannot be recalled, and deletion in the Service does not reach copies the controller has already caused to be transmitted to a connected service or AI assistant. Booking references and booking notices are deleted together with their conversation. Deletion in the Service does not reach the reference stored with a booking in the controller's booking provider. Order references and order records are deleted together with their conversation. Deletion in the Service does not reach the reference stored with a cart or order line in the controller's shop. Where the controller's website is a Shopify store connected through the Hazelchat Shopify app, uninstalling the app from the store is the controller's instruction to delete the conversations started on the store's websites and their enquiries, regardless of the configured retention period, when Shopify requests the deletion of the store's data (about 48 hours after the uninstall) or at the latest 10 days after the uninstall, unless the app has been installed again by then. No visitor data is retained afterwards unless Union or member-state law requires it.
12. International transfers
Visitor data is stored in the European Union. Two subprocessors are located outside the EEA: Backblaze, Inc. receives only encrypted backup archives that it cannot decrypt, and OpenRouter, Inc. receives question text, retrieved passages and, where the controller has connected a shop and shows product cards, product information matching the question (never prices, stock, links or visitor identifiers) only if the controller enables AI evidence selection, and redacted visitor questions with their outcome, passages of the approved content and draft settings only when the controller uses Workshop; both on routes without data retention. The safeguards are named in Annex 1. Enabling the AI feature in Settings, or sending a message to Workshop, is the controller's instruction to use that transfer. Data the controller causes to be transmitted to a connected service or AI assistant is transferred by the controller under its own agreement with that recipient; it is not a transfer by Hazelchat to a subprocessor.
13. Final provisions
In the event of a conflict, this agreement takes precedence over the terms of service for the processing of visitor data. Liability follows the terms of service. Governing law and jurisdiction follow section 12 of the terms of service. Amendments require text form; Hazelchat may update Annex 2 as security measures improve.
This agreement is available in German and English. If the two versions differ, the German version prevails.
Annex 1 — Subprocessors
| Subprocessor and location | Purpose and visitor data received | Transfer safeguard |
|---|---|---|
| netcup GmbH, Daimlerstraße 25, 76185 Karlsruhe, Germany | Server hosting. All stored visitor data. | Not required (EU) |
| Backblaze, Inc., 201 Baldwin Avenue, San Mateo, CA 94401, USA. Data stored in an EU data center (EU Central region, Amsterdam, Netherlands). | Encrypted backup storage. Encrypted archives only; the key is held by Hazelchat. | Standard contractual clauses in Backblaze's data processing addendum; archives are encrypted before upload with a key Backblaze does not hold. |
| Brevo (Sendinblue SAS), 7 rue de Madrid, 75008 Paris, France | Transactional email to the controller. The enquiry notification carries the visitor's name, email address and message, the last question of the conversation and whether it was answered, and where the conversation came from when that was recorded, only when the controller enables the visitor's details in the notification email; otherwise the notification contains no visitor data. Brevo also receives the controller's address and delivery events, and receives the controller's email replies to visitors' questions. | Not required (EU) |
| OpenRouter, Inc., 169 Madison Avenue, New York, NY 10016, USA, and the model provider selected by the controller from the list offered in the product — currently models from OpenAI, Anthropic, DeepSeek, Mistral, Alibaba and Z.ai, each reached through an OpenRouter route without data retention; Anthropic's models are served by Google Cloud (Vertex AI) and, from 1 December 2026, also by Amazon Web Services (Amazon Bedrock), and for open-weight models that route is operated by a hosting provider on OpenRouter's platform; for Workshop, the model chosen by Hazelchat from the same list. | AI evidence selection, only when the controller enables it: question text and up to eight retrieved passages; where the controller has connected a shop and shows product cards, also the earlier questions of the conversation and the controller's product information for a product request (the catalog's product types, tags and options, and up to ten matched products with name, type, tags, options and up to 600 characters of description; never prices, stock, links or visitor identifiers). Workshop, only when the controller sends it a message: visitor questions with email addresses, web addresses, phone numbers and long numbers replaced, their outcome and day, counts, passages of the approved content and draft settings. In both cases no contact details or identifiers, and never an enquiry's name, email address, phone number or message. | Standard contractual clauses approved by the European Commission (Art. 46 GDPR) in OpenRouter's data processing agreement. |
Better Stack monitors public availability and receives no visitor data. Stripe processes the customer's own billing and payment data for Hazelchat and does not receive website-visitor conversations or enquiries. These two providers are therefore not subprocessors of the visitor data governed by this agreement and are listed in the privacy notice for transparency. Brevo is a subprocessor only for the visitor details the controller chooses to include in its notification emails; the controller can switch that off at any time, after which the notification is content-free again. Shopify provides the controller's store and bills plans bought through the Hazelchat Shopify app, under the controller's own agreement with Shopify; it receives no visitor data from Hazelchat and is not a subprocessor under this agreement.
Annex 2 — Technical and organisational measures
- Access control: key-based administrative access to the server only; application services run as unprivileged system users with restricted filesystems; the web interface reaches the application only through a reverse proxy over HTTPS.
- Tenant isolation: every request resolves the authenticated account's own workspace server-side; public chat credentials are bound to a verified origin, expire after 24 hours and cannot administer, export or delete anything. The chat window keeps the credential of a conversation the visitor has written in in its own session storage, partitioned by the website it is embedded on, until the tab is closed, the visitor starts a new conversation or the credential expires; it is never readable by the website. Where the chat runs directly in the website's page (the Webflow app), the service accepts a conversation's requests only from the page origin it was started on, and the requests carry no cookies. The shared page runs on a separate host (chat.hazelchat.co) that serves only the page, its assets and its public chat interface; it carries no owner session and cannot reach any owner function. A page is served only while the controller's website verification, published privacy details and the controller's switches are in place, checked on every request.
- Visitor-reported data: where a conversation came from is checked against fixed keys, lengths and character classes before it is stored; full referrer addresses, queries, fragments and ad click identifiers are never accepted.
- Website verification: the chat only starts hosted conversations from exact origins whose ownership was proven and is rechecked every seven days. Proof is the installed Hazelchat script carrying the workspace's widget key on the published website (the method the Webflow app uses), a DNS record, a verification file, for a site connected through the Hazelchat Wix app, the published address Wix reports for that installation, re-read every six hours and withdrawn at once when the app is removed, or, for a store connected through the Hazelchat Shopify app, the primary domain Shopify reports for that store when asked with the store's own access token, re-read every six hours and whenever Shopify gives notice of a change to the store or its domains, and withdrawn at once when the app is uninstalled, the store is disconnected or Shopify no longer accepts the connection. The store's own myshopify.com address is accepted as part of that website, for that workspace only and only while the proof holds. Connecting any other website platform, such as Webflow, is not proof on its own.
- Transport and storage: TLS for all public connections; credentials stored as salted scrypt hashes; session and link tokens stored only as hashes; booking-provider secrets and tokens, Shopify access and refresh tokens, shop signing secrets, and the details of orders after a chat, encrypted at rest (AES-256-GCM); provider notices, Shopify's notices and sign-in redirects, and shop order reports, verified by signature before they are read.
- Document handling: uploaded files are parsed in memory in an isolated environment with no network, a separate user, a read-only root and hard memory, CPU and process limits; originals are never stored or backed up.
- Abuse limits: persistent rate limits and daily budgets per workspace and globally; hashed technical identifiers only.
- Logging: operational logs contain request identifiers, route names, status codes and durations, never message content, addresses or tokens; retained 30 days.
- Availability and recovery: daily encrypted backups to EU storage with a 30-day ceiling; weekly automated restore checks; monthly full recovery rehearsal; content-free monitoring with alerting.
- Deletion: automatic retention enforcement; immediate deletion on request or account closure; an independent deletion record replayed before any restored data is accessible.
- Notification hygiene: enquiry notifications go only to the verified account owner. They contain the visitor's details (Annex 1) only when the controller switches this on; otherwise they contain a link to the enquiry in the workspace and no visitor content. They are sent with Brevo's per-recipient tracking consent set to “no”, so according to Brevo it records no opens or clicks for them, although its tracking image and link redirect remain in the message.
- Organisation: single-operator service: only the provider has access to production systems, over key-based SSH from a managed device, with no shared accounts; credentials are kept in a password manager and provider accounts use two-factor authentication where offered; personal data is accessed only to provide the service or on a documented customer request; there are no employees, and any contractor works only under written confidentiality and data-processing terms; incident-response and recovery runbooks are documented, and restoration is rehearsed weekly and the full application recovery monthly.