Data Processing Agreement — Business Edition
Version 2026-10-04
In effect from 2026-10-04
This is the permanent address of one version. It will keep showing this exact text.
This English text is the authoritative version of this agreement. Translations into other languages are provided for convenience.
Agreement on the processing of personal data on behalf of a controller, pursuant to Article 28 of Regulation (EU) 2016/679 (“GDPR”).
This agreement applies to the Trusted Codes Business Edition, which runs on Trusted Codes infrastructure. It does not apply to the Enterprise Edition, where the customer operates their own node and the Provider does not process the customer’s user data. A separate, shorter agreement covers that case.
Parties
Controller (“Customer”): the organisation identified in the Trusted Codes account that accepted this agreement, together with the acceptance record described at the end of this document.
Processor (“Provider”): Stefan Sonntag, trading as Trusted Codes
Leonrodstr. 14b, 80634 Munich, Germany
Contact: privacy@trusted.codes
This agreement forms part of, and is subordinate to, the Trusted Codes Terms of Service. It takes effect when the Customer accepts it, and remains in force for as long as the Provider processes personal data on behalf of the Customer.
1. Subject matter and duration
1.1 The Provider processes personal data on behalf of the Customer solely to supply the Trusted Codes Business Edition: a verification service that issues and verifies word-based access codes between identified people, together with the organisation administration, notification and support functions described in the product documentation.
1.2 The duration of the processing corresponds to the duration of the Customer’s subscription, extended by the deletion periods in Section 10.
2. Nature and purpose of the processing
2.1 The Provider processes personal data only to:
- create and administer user accounts and organisation membership;
- generate, distribute and verify access codes and related cryptographic material;
- deliver notifications by electronic mail and push message;
- provide the administration console, reporting and support;
- protect the service against fraud and abuse;
- meet its own legal obligations.
2.2 The Provider does not sell personal data and does not use it to train machine-learning models. The Provider processes the following data as an independent controller and not on behalf of the Customer: data needed to secure the service against fraud and abuse (including risk scoring at sign-in), billing data, data needed to meet legal obligations, and statistics about the use of the service. Where an end user stores their own API key for the assistant, the provider of that key receives assistant content under the end user’s instruction; that provider is not a sub-processor of the Provider.
3. Types of personal data
3.1 The following categories may be processed:
| Category | Examples | Protection |
|---|---|---|
| Identity data | name, display name | encrypted at rest with a Provider-held key |
| Contact data | electronic mail address | encrypted at rest with a Provider-held key |
| Account data | account identifier, organisation membership, role, language, status | stored in plain form |
| Authentication data | authentication provider identifier, session records, device records | stored in plain form |
| Verification data | connection records, code metadata, verification events and meeting check-ins, beacon sessions, timestamps | stored in plain form |
| Cryptographic material | public keys and code secrets | see 3.2 |
| Content and configuration data | connection names and descriptions, tags, presets, invitation messages, notification content, names and permissions of API tokens and connected applications, seal fingerprints | names and messages encrypted at rest with a Provider-held key; the text of a seal only encrypted on the end user’s device; the rest stored in plain form |
| Technical data | address of origin, device type, application version, diagnostic records | stored in plain form |
| Location data | country, region and city derived from the IP address | stored in plain form |
| Risk and trust data | fraud risk score, network flags, trust ratings, trust score | stored in plain form |
| Device identifiers | device name, operating system version, identifier issued by the operating system | stored in plain form |
| Assistant data | category and outcome of assistant requests, model usage; the text of a request only where it was classified as abuse, for 30 days | stored in plain form; the request text encrypted at rest with a Provider-held key |
| Public verification data | code words entered, keyed hash of the IP address | stored in plain form; the IP address only as a keyed hash |
| Billing data | billing address, tax identification number, subscription state | stored in plain form; card data never reaches the Provider |
3.2 Code secrets. Where the end user’s application supports it, code secrets are encrypted on the end user’s device for specific recipient devices (X25519, AES-GCM), and the Provider cannot decrypt that copy. Code secrets are also processed by the Provider in the following cases, where they are encrypted at rest with AES-256-GCM under a key the Provider controls, kept in a key-management service in the European Union separate from the database, and can be decrypted by the Provider’s servers: (a) connection and organisation codes generated by the service; (b) code generation for machine clients and the desktop application; (c) invitation delivery until the recipient’s device has received the secret; (d) accounts using server key backup; (e) demonstration accounts.
4. Categories of data subjects
- the Customer’s members, employees and administrators;
- the Customer’s verified contacts, being external persons whom the Customer verifies;
- persons invited by the Customer who have not yet accepted;
- persons who verify a code issued by the Customer.
5. Instructions of the controller
5.1 The Provider processes personal data only on documented instructions from the Customer. This agreement, the Terms of Service, and the Customer’s use of the product functions constitute those instructions.
5.2 The Provider informs the Customer without delay if, in its opinion, an instruction infringes data protection law. The Provider may suspend the execution of that instruction until the matter is resolved.
5.3 Where the Provider is required by Union or Member State law to process personal data beyond the Customer’s instructions, the Provider informs the Customer of that legal requirement before processing, unless that law forbids the notice on important grounds of public interest.
5.4 When the Customer’s users connect with users of servers operated by other operators (federation), the Provider transmits the data needed for that connection to those servers on the Customer’s instruction. The other operators are not sub-processors of the Provider.
6. Confidentiality
6.1 The Provider ensures that every person authorised to process the personal data is bound by an obligation of confidentiality, whether by contract or by statute, and that the obligation survives the end of their engagement.
6.2 Access is limited to those persons who need it to supply the service or to meet a legal obligation.
7. Security of processing (Article 32 GDPR)
7.1 The Provider applies the technical and organisational measures described in Annex 1. The Customer has reviewed those measures and considers them appropriate to the risk.
7.2 The Provider may change the measures, provided the level of protection is not reduced.
8. Sub-processors
8.1 The Customer gives general authorisation for the engagement of sub-processors. The current list is Annex 2, which is also published on its own page so that it can be dated and superseded independently of this agreement.
8.2 The Provider informs the Customer at least 30 days before a new sub-processor begins processing, or before an existing one is replaced. Notice is given by electronic mail to the Customer’s administrative contact and by an update to the published list.
8.3 The Customer may object on reasonable data protection grounds within that period. If the parties cannot resolve the objection, the Customer may terminate the affected subscription, with a refund of the unused prepaid period.
8.4 The Provider imposes on every sub-processor, by contract, data protection obligations no less protective than those in this agreement, and remains fully liable to the Customer for the performance of that sub-processor.
9. Assistance to the controller
9.1 Data subject rights. Taking into account the nature of the processing, the Provider assists the Customer by appropriate technical and organisational measures in fulfilling requests under Chapter III GDPR. The product provides export and deletion functions that allow the Customer to answer most requests without contacting the Provider. Each end user can also export their own personal data in the product.
9.2 The Provider forwards to the Customer, without undue delay, any request it receives directly from a data subject relating to the Customer’s data, and does not respond to it itself unless legally required or instructed.
9.3 Personal data breach. The Provider notifies the Customer without undue delay, and in any event within 48 hours of becoming aware of a personal data breach affecting the Customer’s data. The notice describes the nature of the breach, the categories and approximate number of data subjects and records affected, the likely consequences, and the measures taken or proposed.
9.4 The Provider assists the Customer with data protection impact assessments and prior consultations under Articles 35 and 36 GDPR, so far as the information is available to the Provider and not available to the Customer.
10. Deletion and return
10.1 The Customer’s administrators may export the organisation’s data with the product’s export function throughout the subscription and for 30 days after termination. Each export file remains available for download for 7 days after it is created. Where the export function is not available to the Customer after termination, the Provider provides the export on request within the same 30 days.
10.2 After that period, the Provider deletes the personal data within a further 60 days, including from backups in accordance with the backup rotation schedule, unless Union or Member State law requires continued storage.
10.3 Billing records are retained for the statutory retention period under German commercial and tax law.
11. Audit
11.1 The Provider makes available to the Customer all information necessary to demonstrate compliance with Article 28 GDPR.
11.2 The Provider satisfies audit obligations in the first instance by providing documentation, including this agreement, Annex 1, the sub-processor list, and any third-party certification or report it holds.
11.3 Where that documentation is not sufficient, the Customer may carry out an audit, or mandate an independent auditor who is not a competitor of the Provider, subject to: reasonable prior notice of at least 30 days, no more than once per calendar year except after a personal data breach, conduct during normal business hours, no disruption to the service, and a written confidentiality undertaking. The Customer bears its own costs.
12. International transfers
12.1 Some sub-processors are established outside the European Economic Area, as marked in Annex 2.
12.2 For each such transfer the Provider relies on the Standard Contractual Clauses adopted by the European Commission (Decision 2021/914), together with the supplementary measures described in Annex 1. Where the recipient is covered by an adequacy decision, the Provider may rely on that decision instead.
12.3 The Provider selects a European deployment region where the sub-processor offers one.
13. Liability and final provisions
13.1 Liability follows the Terms of Service. Article 82 GDPR remains unaffected.
13.2 Where the Terms of Service and this agreement conflict on the processing of personal data, this agreement prevails.
13.3 The Provider may amend this agreement where required by law or by a change to the service. Material amendments are notified at least 30 days in advance. If the Customer objects, they may terminate the affected subscription with a refund of the unused prepaid period.
13.4 German law applies. The place of jurisdiction is Munich, so far as the law permits a choice.
13.5 If any provision is invalid, the remainder stays in force.
Annex 1 — Technical and organisational measures
Encryption
- Personal data in the application database and server-processed code secrets are encrypted at rest with AES-256-GCM before storage; the e-mail address the authentication service uses for sign-in and the names of end users’ devices are stored in plain text. The encryption keys are held in a key-management service in the European Union (Infisical), separate from the database provider (Supabase); the application servers retrieve them at run time with their own credentials. End-to-end encrypted copies of code secrets cannot be decrypted by the Provider.
- Where the end user’s application supports it, code secrets are encrypted end-to-end for specific recipient devices, using X25519 key agreement and AES-GCM.
- IP addresses used for rate limiting and verification statistics are stored only as a keyed hash (HMAC-SHA256).
- All traffic in transit is protected by TLS.
- The mobile application stores local data in an encrypted database.
Access control
- Row-level security policies in the database restrict access by organisation and by role.
- Administrative access is limited to named persons and is separated by role, with a distinction between platform administration and node administration.
- Authentication supports single-use links and third-party identity providers. Biometric confirmation is available for sensitive actions.
Availability and resilience
- The database is hosted with automated backups and point-in-time recovery.
- The infrastructure is operated by an established provider with its own resilience measures.
Separation
- Data is separated by organisation at the database level.
- Production, staging and development environments are separate projects with separate credentials.
Logging and monitoring
- Application events are logged with structured records.
- Administrative actions on entitlements and organisations are recorded in an audit log.
Deletion
- Account deletion removes the account, device records, connections, secrets and push tokens through a single controlled procedure.
Supplementary measures for transfers
- End-to-end encrypted material is unreadable to any sub-processor.
- Personal data is encrypted before it reaches storage, with keys held in the European Union separately from the database.
- European deployment regions are selected where offered.
Annex 2 — Sub-processors
This list is also published on its own page at trusted.codes/legal/subprocessors, where it carries its own date and is superseded independently of this agreement.
Current as of 2026-10-01
Core service
Engaged for every customer of the hosted service.
| Provider | Purpose | Location | Data shared | Transfer basis |
|---|---|---|---|---|
| Supabase | Database, authentication, server functions and file storage | European Union (Stockholm); operator established in the United States | All account, verification and billing data held by the service | Standard Contractual Clauses (2021/914) |
| Infisical | Custody of the keys that protect data at rest | European Union | Encryption keys only — no personal data | Inside the EEA |
| Vercel | Hosting of the public website, the pages and server functions of app.trusted.codes, and the web portals | Server functions in the European Union (Frankfurt); static files from Vercel’s global network; operator established in the United States | Request metadata: IP address, user agent, requested path; the content of forms and requests handled by server functions | Standard Contractual Clauses (2021/914) |
| Resend | Delivery of transactional electronic mail | European Union (Ireland); operator established in the United States | Electronic mail address and message content, decrypted for the moment of sending | Standard Contractual Clauses (2021/914) |
| OpenAI | The in-app assistant on Trusted Codes’ own key: understanding requests, composing answers, and search vectors for help texts and questions | United States (Standard Contractual Clauses); API data kept up to 30 days for abuse detection | The text of the request, which can contain whatever the user typed, and excerpts from the help texts. Not used to train models. | Standard Contractual Clauses (2021/914) |
| Sentry | Error reports from the mobile application, the desktop application, the web portals, the administration console and the website | European Union (Germany); operator established in the United States | Stack trace, application version, device model or browser, account identifier. No electronic mail address and no IP address. | Standard Contractual Clauses (2021/914) |
| Stripe | Payment processing and subscription billing | Stripe Payments Europe Ltd, Ireland; processing also in the United States | Billing name and address, tax identification number, subscription state. Card data never reaches Trusted Codes. | Standard Contractual Clauses (2021/914) |
| Expo | Relay of push notifications to the Apple and Google delivery services, and delivery of updates to the mobile application | United States | Push token, notification content, IP address of the device | Standard Contractual Clauses (2021/914) |
| MaxMind | Fraud check at sign-in and registration | United States | IP address, electronic mail address, user agent. Trusted Codes keeps the result: a risk score and a location to city level. Request and response content is not logged. | Standard Contractual Clauses (2021/914) |
| Hetzner Online GmbH | Rented server on which Trusted Codes operates Plausible Analytics, Metabase and the MCP relay | Germany (Nuremberg) | The data of those three services, as described in their rows | Inside the EEA |
| Plausible Analytics | Usage statistics for the website and the applications of the service | Germany, on a server rented from Hetzner | Page viewed and referrer, with no cookies. The IP address is processed only in memory, to form a hash that changes every day. | Operated by Trusted Codes |
| Metabase | Internal analytics, used only by the operator | Germany, on a server rented from Hetzner | Figures queried from the service database | Operated by Trusted Codes |
| MCP relay (mcp.trusted.codes) | Passing requests between an AI client and the user’s desktop application | Germany, on a server rented from Hetzner | No content is stored. Connection logs (user name derived from the electronic mail address, IP address, time) are kept for 7 days. | Operated by Trusted Codes |
Optional and user-chosen
Engaged only where the end user chooses the feature, or where the component is configured.
| Provider | Purpose | Location | Data shared | Transfer basis |
|---|---|---|---|---|
| Apple | Sign-in, where the end user chooses it | United States | Name and electronic mail address, or the relay address Apple issues instead | Standard Contractual Clauses (2021/914) |
| Sign-in, where the end user chooses it | United States | Name and electronic mail address | Standard Contractual Clauses (2021/914) |
Store test programme
Engaged while the mobile application is distributed through a store test programme.
| Provider | Purpose | Location | Data shared | Transfer basis |
|---|---|---|---|---|
| Google (Workspace) | Tester group for the store test of the Android application | United States | Electronic mail address of the tester. It is removed when the account is deleted. | Standard Contractual Clauses (2021/914) |
Public website only
These handle visitors to trusted.codes, not users of the service.
| Provider | Purpose | Location | Data shared | Transfer basis |
|---|---|---|---|---|
| Google (Sheets and Apps Script) | Receiving the website contact form and the waiting list form, during the test period only | United States | Name, electronic mail address, subject and message. The sheet is deleted when the test period ends. | Standard Contractual Clauses (2021/914) |
Acceptance record
The Provider records, for each acceptance: the accepting user, the organisation, the document identifier and version, the date and time, the address of origin, and the client identification.
The Customer may retrieve the exact version they accepted at any time, at the versioned address shown at the top of this page. The version identifier does not depend on the language read: all six translations of this text are version 2026-10-04.
Where the parties instead conclude a negotiated or signed agreement, the record stores a reference to that document and marks the source as offline.
A negotiated or signed agreement
A customer whose own legal team needs a negotiated or counter-signed document may request one at privacy@trusted.codes. Accepting this standing agreement is not a waiver of that request, and the request does not have to be settled before a subscription is purchased: this standing agreement governs in the meantime, and a negotiated document replaces it from the date both parties sign.