Dify for GDPR: which requirements the platform helps with and which it does not
Self-hosting Dify helps with some GDPR questions, but it does not make your processing lawful. Running Dify in infrastructure you control gives you direct levers for Article 32 security of processing, for deciding where personal data is stored, and for answering some Chapter V transfer questions, because no prompt, log or knowledge chunk has to leave your environment unless you configure it to. Lawful basis, purpose limitation, transparency to data subjects, records of processing and breach handling remain the controller's work. Dify does not perform any of these for you, and it does not replace your own records of processing activities.
Nothing in the GDPR requires an audit report, attestation or certificate, so a self-hosted Dify deployment cannot be "GDPR certified" in the way vendors sometimes suggest. Article 42 certification is voluntary, is issued for at most three years by accredited certification bodies or supervisory authorities, and does not reduce the responsibility of the controller or processor. Treat any vendor claim of GDPR compliance for Dify, including ours, as a statement to be verified against your own evidence rather than a substitute for it. Your data protection officer, if you have one, and your legal team should own the assessment.
The practical next step is to map each data flow in your planned app (prompts, conversation logs, uploaded files, knowledge chunks and traces) to a specific Dify setting, storage location and owner, then confirm which of those flows touch a model provider or vector store outside the EEA. Ask your implementation partner and your legal team to agree this scope in writing before build work starts, and confirm any Dify version-specific behavior against the Dify releases page for the version you intend to run.
Mapping GDPR requirements to Dify capabilities and configuration
This table compares each GDPR obligation relevant to personal data in Dify with the platform capabilities the docs describe and the settings to confirm in your environment. Dify supplies some technical controls, but none of the rows is satisfied by Dify alone, since the controller and processor remain responsible for the overall compliance position. Read each row as a starting point for your own assessment.
| Requirement | Dify capability | Configuration to confirm |
|---|---|---|
| Article 32: security of processing | SECRET_KEY signs session cookies and JWTs and encrypts OAuth credentials. SSRF_PROXY routes outbound requests through a proxy that blocks internal and private IP ranges. Dify 1.16.1 added agent sandbox network isolation through a Squid proxy and token-based authentication between services. | Confirm SECRET_KEY is set to a unique value before first use, since changing it later logs out all users. Confirm SSRF_PROXY is enabled, and that the sandbox and proxy are on the version you tested. Confirm TLS, network segmentation and access to the database and object storage. |
| Article 32: encryption and key handling | Workspace encryption keys can be stored locally or in Azure Key Vault. Metadata database and file storage can be PostgreSQL, MySQL, OpenDAL, S3-compatible or Azure Blob, Google Cloud Storage and others. | Decide where workspace keys live and who can read them. Confirm encryption at rest for the database, Redis, vector store and object storage, which Dify does not configure on your behalf. |
| Articles 33 and 34: breach notification | Dify does not provide a breach notification workflow. Its logs, traces and workspace records can help establish what data an incident touched. | Confirm your own incident process, including who monitors Dify logs and how you determine which prompts, files and knowledge chunks contained personal data. Confirm the timeline your team can meet for notifying the supervisory authority. |
| Chapter V: transfers and onward transfers (Article 44) | Dify's vector store, metadata database and file storage are chosen by you, so data location follows your deployment. Model provider calls leave the deployment whenever a remote provider is configured. | List every model provider, embedding service, plugin source and storage backend that receives personal data. Confirm each location and whether remote access from a third country occurs, including vendor support sessions. |
| Article 83: fine exposure | Dify's features do not determine fine levels. Article 83 sets higher maximums for infringements of transfer rules and data subject rights than for security obligations. | Map which infringement categories your processing could trigger, then confirm the controls behind each. Ask your legal counsel how the fine ceilings apply to your turnover and processing. |
| Article 5(2) and Article 24: accountability | Dify exports app DSL files without third-party API keys, knowledge base content or usage logs, so records of data handling need separate capture. | Keep a record of processing for each Dify app, the configuration history from version changes, and evidence of access reviews. Confirm who holds the controller role for each workspace and who acts as processor for hosted support. |
Where personal data lands: prompts, logs, files, chunks and traces
Personal data in a Dify deployment does not sit in one place. It is spread across the metadata database, file storage, the vector store and the observability layer, and each store has its own location and retention behavior. Map these five locations before you set a legal basis, a retention period or an erasure procedure.
Conversation logs in PostgreSQL
Prompts, model responses and conversation records are written to the metadata database. The default is PostgreSQL, though MySQL or OceanBase can be chosen instead. Confirm which database holds your deployment, who can query it directly, and how backups copy these rows. Ask your team whether the 30-day cleanup default applies to conversations in your version, because any longer retention you need must be set and documented on purpose.
Uploaded files in object storage
Documents users upload to an app or knowledge base are kept in the configured file storage, which can be OpenDAL, S3-compatible storage, Azure Blob, Google Cloud Storage or another provider. Confirm the bucket or container location, the region, and whether object versioning or lifecycle rules keep deleted files. A file removed in the console may still exist in backups or storage snapshots, so check both.
Knowledge chunks and vectors
Knowledge base content is split into chunks, and each chunk is stored with an embedding in the vector store. Weaviate is the default, with Qdrant, Milvus, pgvector, OpenSearch and Elasticsearch as options. Personal data in a source document is therefore copied into a second store. Confirm where the vector index lives, whether deleting a document removes its vectors, and whether a rebuilt index drops stale personal data.
LLMOps traces and monitoring data
Monitoring features record run details, inputs and outputs for applications that have them enabled, and external observability tools may receive the same data. Decide which trace fields contain end-user text, who can view them, and how long they are kept. If traces leave your infrastructure through a third-party tool, that recipient becomes part of your processing map and needs its own location and retention check.
Exported DSL files
Apps exported as YAML DSL files contain app configuration, workflow nodes, model parameters, prompts and knowledge base connections. The Dify docs state that exports exclude third-party API keys, knowledge base content and usage logs. Prompts can still contain personal data or names of individuals, so treat exported files as controlled documents, record where copies are stored, and confirm that no test data with real personal details was embedded in a prompt before sharing.
Setting retention and erasure for each data store
Conversation logs hold the messages users send to a Dify app and the responses the model returns. Personal data in these records is often unplanned: a user pastes an email address, a customer number or a health detail into a chat, and that text is stored with the conversation. The records sit in the metadata database you chose, so retention and deletion work involves your database administration as well as the Dify console.
- Where the records live: Confirm which metadata database backs the deployment (PostgreSQL by default, or MySQL or OceanBase) and map every table that holds message content.
- Retention setting: Find the cleanup or retention settings in the environment variable reference and record the value you chose, including whether it applies to messages, conversations or both.
- End-user identifiers: Check which identifier each app sends for an end user. A stable identifier links all of that person's messages together, which makes an erasure request traceable.
- Deletion behavior: Test whether deleting a conversation from the console or the API removes the message content from the database, not only from the screen.
Check each setting against the reference for your Dify version, then run a test conversation with a dummy identifier and confirm the rows are removed once the retention period has passed.
Uploaded files and knowledge bases are the stores most likely to hold whole documents with personal data, such as contracts, case notes or HR records. Dify writes original files to the file storage you configure and splits their content into chunks that are indexed in the vector store. Deleting a file in the console may leave its chunks in place, so each store needs its own check.
- Original files: Dify can use local storage or OpenDAL, S3-compatible storage, Azure Blob, Google Cloud Storage and other providers. Confirm the bucket or container used and any lifecycle rules applied to it.
- Vector index: The default vector store is Weaviate, with options such as Qdrant, Milvus, pgvector, OpenSearch and Elasticsearch. Confirm how deleting a document removes its vectors in the store you chose.
- Chunks and metadata: Chunks are copies of the document text, so a deleted document must also remove its chunks from the metadata database and the index.
- Knowledge base deletion: Test deleting a whole knowledge base and confirm whether linked apps keep references to content that no longer exists.
Run a test upload that contains a unique marker string, delete it, then search the file store, the vector store and the database for that marker to confirm nothing remains.
Traces and logs record how a request moved through Dify: which node ran, which model was called and what text it received and returned. Monitoring and tracing features can capture full prompts and outputs, so they often hold more personal data per event than the conversation table. Container logs from the api, worker, web, proxy and sandbox services can also record IP addresses and request metadata that identify a person.
- Trace content: Confirm which trace fields store prompt and output text and whether they can be limited or masked for personal data.
- Export destinations: If traces go to an external observability tool, that tool becomes another store with its own retention period and possibly its own transfer question.
- Container logs: Set rotation and retention for logs from the Nginx, SSRF proxy and application services, since these may record IP addresses.
- Erasure from logs: Logs are rarely edited in place. Decide whether an erasure request is met by deletion at the end of the retention period or by a documented exception, and record that decision.
Ask the vendor for the current trace field list for your version, then confirm where each log stream is shipped and how long it is kept.
Backups are copies, so erasing data in the live system does not remove it from them. A Dify backup usually covers the metadata database, file storage, vector data and configuration such as the .env file. The Docker Compose upgrade guidance recommends a backup before every upgrade, so backup sets are created routinely and can accumulate faster than teams expect.
- Backup inventory: List each backup set and what it contains: database dump, object storage, vector store snapshot and configuration.
- Backup retention: Set how long each backup set is kept and make sure that period appears in your retention schedule and privacy notice.
- Restore then erase: Define how a backup is restored and how erasures received after the backup was taken are re-applied before the restored system returns to use.
- Key handling:
SECRET_KEYsigns sessions and encrypts OAuth credentials, and changing it logs out all users. Workspace encryption keys can be stored locally or in Azure Key Vault. Ask counsel whether destroying a key is an accepted way to make old backups unreadable, and document the decision.
Confirm each backup tool's deletion behavior with its vendor and write the erasure path into the runbook before the first production backup is taken.
How end-user identifiers link records to a person
The link between a Dify record and a person is usually a string value that your application supplies. When your application calls a published Dify app through the service API, it passes an identifier for the end user, and Dify stores conversations and messages against that value. Dify does not need to know who the person is. That is the point regulators will test: the identifier is pseudonymous, and the GDPR still treats pseudonymised data as personal data wherever the means to re-identify it exist. Those means usually sit in your application database, identity provider or CRM. Confirm the exact identifier field and how it behaves in the service API reference for your Dify version before you design around it.
The core decision is what the identifier should be and who holds the mapping to a person. Use an opaque, randomly generated value, and keep the email address, employee number or national ID out of Dify entirely. Store the mapping only in a system you control, with its own access rules and retention period. Decide whether one person always receives the same identifier across apps, sessions and environments, because that choice determines whether Dify can group a person's history in one place. Document where each mapping lives so an erasure request can find every linked conversation, and confirm with counsel whether the mapping itself needs a lawful basis and a retention rule.
Plan the erasure path before go-live. Deleting a mapping row does not remove conversation text already stored in Dify, and that text may contain names or details a user typed into a prompt. Build a procedure that uses the identifier to locate and delete the related Dify conversations, then removes the mapping and records that the request was completed. Test it on a non-production copy, and check whether your backups keep copies that outlive the deletion. Verify each step against the Dify documentation for your release, because the available delete operations and API endpoints change between versions.
Handling an erasure request across a Dify deployment
This sequence turns a GDPR erasure request into a traceable set of deletions across Dify's databases, file storage, vector index and traces, with each location confirmed and the outcome recorded. It works without assuming Dify exposes a single erasure function, which the team must verify for its version.
Log the request and verify the data subject
The controller's privacy or legal owner records the request, its date and the identifiers the requester supplied, such as an email address or the end-user identifier used with the app. Confirm the requester's identity through a method proportionate to the data held before any search begins. Done when the request has a reference number and a named owner, and the identifiers to search for are written down.
Map where the person's data sits
Before touching anything, the operator lists every place the person's data may exist in this deployment: the metadata database (conversation and message records, end-user records, app logs), file storage (uploaded files), the vector store (knowledge chunks derived from those files), any tracing or observability backend connected to the apps, and external model provider logs. Confirm with your own configuration which of these are active, because the Dify environment reference lets operators choose the database, storage and vector store. Done when the map names each store and the query or method used to search it.
Locate records in the metadata database
A database administrator queries the metadata database for the identifiers from step one, covering conversations, messages, uploaded file records and any end-user identifiers passed by your application. Record each matching row by table and key, and note any records linked to shared knowledge bases that other people also use. Confirm the query scope against a test copy first if your team has not run it before. Done when the set of matching primary keys is saved with the request.
Remove matching files and knowledge chunks
Using the records from the previous step, the operator removes the uploaded source files from the configured file storage and deletes the derived chunks from the vector store, since a chunk can carry personal data even after the source file is gone. Check whether the Dify version you run offers a document or segment deletion path in the console or API, and confirm that path removes both the stored file and its index entries. Done when a repeat search of the file store and vector store for the identifiers returns no matches.
Delete conversation records and confirm traces
Delete the matching conversation and message records in the metadata database, or use the application's supported deletion path if your version provides one, and check the tracing backend and any logs shipped from the containers for the same identifiers. Note that prompt text may also sit in logs held by a model provider under its own retention terms, which you must request separately. Done when the database query returns no matches and each trace or log store has a recorded result, including stores where nothing was found.
Address backups and exports
Identify every backup set and exported DSL or data file that may contain the person's records. Backups are usually not edited in place, so the team should document the retention period for each backup, confirm whether the erased data will be restored later, and set controls so any restore re-applies the erasure. Confirm the backup mechanics with your own backup tooling and your legal team. Done when a written note states which backups hold the data, when they expire, and how a restore will be handled.
Confirm the erasure request in the record
Write a closing record that lists each store searched, the query used, the deletions made, the stores where nothing was found, the backup treatment, and the date the work finished. Also note the Dify version and any gaps, such as traces held outside the deployment. Confirm with the requester where required, and keep the record with your processing documentation. Done when the record is signed off by the privacy owner and filed under the request reference.
Keeping processing in EU infrastructure without losing the model
Hosting the Dify deployment in EU infrastructure does not by itself keep personal data inside the EU, because the EDPB Guidelines 05/2021 treat remote access from a third country as a transfer, even when a support engineer only views data on a screen. The same applies to storage in a cloud outside the EEA. Before go-live, list every party that can reach the Dify database, object storage, vector store and log pipeline, including vendors providing support, and record the country each one accesses data from. A model provider outside the EEA is a separate transfer question, because every prompt and retrieved knowledge chunk sent to its API leaves your infrastructure. Confirm the provider's processing location, sub-processors and contractual transfer mechanism with the provider, and check whether the Data Privacy Framework applies to the provider, since that adequacy decision covers only organizations on the Data Privacy Framework List and an appeal against the General Court's September 2025 judgment is pending as Case C-703/25 P.
Schrems II, decided by the Court of Justice on 16 July 2020 in Case C-311/18, invalidated the Privacy Shield while keeping standard contractual clauses valid, but it requires a case-by-case assessment of whether the destination's law allows access that is not proportionate. The EDPB Recommendations 01/2020 say that where a provider needs data in the clear and third-country public authority powers go beyond what is necessary, no effective technical supplementary measure can be assumed. US providers and their subsidiaries can also face the CLOUD Act under 18 U.S.C. 2713, which reaches data in their possession, custody or control wherever it is stored. Self-hosted models running on inference servers you operate in EU infrastructure remove the model provider from the transfer chain and make the processor analysis narrower, though the cloud and hardware vendors underneath still need review.
Two questions go to your counsel rather than to the engineering team: whether a government request in a third country could reach your data through a provider and how Article 48 of the GDPR would apply to it, and how the Data Act Article 32 duty on providers of data processing services affects the contracts you sign. Record the outcome of that review alongside your transfer register so an assessor can trace which components were placed in the EU and why.
What do buyers ask about Dify and GDPR before hiring help?
What drives the cost of a GDPR-focused Dify engagement?
The main driver is the written scope: how many Dify apps, knowledge bases and data stores need mapping, and how many model providers receive personal data. Each additional store (metadata database, file storage, vector store, log export, trace backend) adds discovery, configuration and verification work. Cost also rises with the number of retention rules to set, erasure procedures to design and test, and whether EU hosting must be built for every connected service. Ask for a quote that lists each data store and provider as a separate line so you can see what is included.
Does the Community or Enterprise edition change the GDPR work?
It can. The self-hosted Community edition is free and limited to a single workspace, while the self-hosted Enterprise edition is custom priced and adds SSO, multiple workspaces, advanced security, a commercial license and professional support, according to the Dify pricing page. Multiple workspaces and SSO change how access to personal data is separated and reviewed, and the licensing terms affect what you can run. Confirm current edition terms directly with Dify before you finalize the design, because the pricing page does not list an Enterprise figure.
How long does a Dify GDPR review take?
Duration depends on how many data flows exist, how much of your current configuration is already documented, and how many decisions need sign-off from legal and privacy teams. A single-app deployment with one model provider is much smaller than a multi-workspace estate with several knowledge bases and external tracing. No duration figure is supplied for this work, so ask any provider for a timeline tied to a written list of stores, flows and deliverables, and check which steps depend on your DPO's availability.
What does our DPO and security team need to provide?
They need to supply decisions that only your organization can make: the lawful basis and purposes for each app, the retention periods your records of processing support, which model providers and regions are approved, and who may approve erasure requests. Security teams provide network boundaries, identity arrangements, backup locations and the logging and access review expectations they already run. Without these inputs, the engineering work can configure Dify but cannot finish the compliance design.
Can our own engineers do this work without a partner?
Yes, if you have people who can read the Dify configuration, trace where prompts, uploads, chunks and logs are stored, and test deletion across each store. The work is mostly verification and documentation, which an internal team can carry out. The risks are gaps in less obvious stores, such as backups and external trace tools, and the time needed to test erasure end to end. Weigh those against your team's capacity and the review your DPO expects.
Does self-hosting Dify make us GDPR compliant?
No. The GDPR requires no audit, attestation or certificate, and self-hosting alone does not establish a lawful basis, set retention, answer data subject requests or prevent transfers. Hosting in your own infrastructure helps you control where personal data is stored, but any model provider, external tracing tool or remote support session can still create a transfer under the EDPB guidance on Chapter V. Compliance is a set of decisions and evidence that your organization owns. Independent assessors do not issue a GDPR certificate in the same way as a standard audit, so confirm with your DPO what evidence they expect.
Which Dify settings are most likely to need a change for GDPR?
Engineers usually review four areas: the metadata database and file storage locations, the vector store, the retention and cleanup behavior for logs and conversations, and outbound model or tool calls. Each has settings that decide where personal data sits and how long it remains. Expect to confirm the exact configuration keys against the environment variable reference for your version, since names and defaults change between releases. Ask any partner to show how each setting is checked in your environment.
Evidence to keep for a GDPR file and how to keep it
A GDPR file for a Dify deployment is a set of records that shows what personal data each app touches, how long it is kept, who can reach it and how requests were handled. The cards below cover the records to keep, where each one comes from in Dify, and what to check before relying on it. An auditor or supervisory authority decides whether the file is sufficient.
Records of processing per app
Keep one record for each Dify app that handles personal data, listing its purpose, the data categories it receives (prompts, uploaded files, knowledge chunks), the model providers it calls and the people who can edit it. This is the controller's own document, not something Dify generates. Check that each app in the workspace appears in the record and that retired apps are marked as such.
Retention configuration snapshots
Record the retention values in force at each point in time, including the log cleanup settings and any storage or database settings that control how long conversation data and files persist. Export or screenshot the configuration with a date and the person who approved it. Without dated snapshots, you cannot show what retention applied to data collected last year.
DSL exports and version history
Export each app as a DSL file at every material change and store it in version control with the change reason. DSL exports capture app configuration, workflow nodes, prompts and knowledge base connections, but not third-party API keys, knowledge base content or usage logs. Those gaps must be covered by other records, so note where the content itself is kept.
Provider and transfer assessments
For every model provider, embedding service and external tool that receives personal data, keep the transfer assessment, the contract basis, the processing location and the answer to whether a third-country authority could compel access. Dify does not make this decision for you. Tie each assessment to the app records so an auditor can trace a prompt to its destination.
Erasure request logs
Log every data subject request you receive, the apps and stores searched (conversations, uploaded files, knowledge chunks, traces), the deletion action taken, the date and the reviewer. Record requests you refused and the reason. Dify's own deletion actions are only one step, so the log must show the search you ran across all locations where the person's data may have landed.
SSO access records on Enterprise
On Dify Enterprise, SSO sign-ins and workspace and web app access tied to your identity provider give a record of who could reach personal data and when. Keep periodic access reviews that compare these records with the people who still need each workspace. Confirm with your provider which logs are retained, how long, and whether they can be exported, because Community deployments rely on other login options.
Configuration sequence for a GDPR-ready Dify deployment
This sequence turns a self-hosted Dify installation into one where personal data has a known location, a defined lifetime, a controlled path to any model provider and evidence that each setting was chosen on purpose. It is meant for the platform team and the privacy lead working together before any production users log in.
Inventory data flows and applications
The platform owner and the privacy lead list every Dify app, knowledge base, file upload and workflow that could receive personal data, and record which model providers, plugins and external tools each one calls. Map each flow to the stores where it lands: the metadata database, file storage, the vector store, conversation logs and any traces. This step is done when every flow has a named owner, a stated purpose and a documented list of storage locations that the team can point to during a data subject request.
Choose region and storage locations
Infrastructure and security leads decide where the metadata database, file storage and vector store will run, then confirm that every component sits inside the EU or in infrastructure your organization controls. Dify supports PostgreSQL, MySQL or OceanBase for metadata, several object storage providers for files, and Weaviate or other vector stores, so each choice should be recorded with its hosting location. Confirm with your cloud or data center provider where backups and replicas are held, because copies outside the EEA can count as transfers under the EDPB guidance. Done when the storage map has a location and an owner for each store.
Set SECRET_KEY and encryption keys
The security engineer generates a strong SECRET_KEY before first start, stores it in the organization's secrets manager and sets it in the environment file used by the deployment. The same person confirms how workspace encryption keys are held, either locally or in Azure Key Vault where that fits your estate, and records who can rotate them. Because changing SECRET_KEY after deployment logs out all users, the team should not treat it as a routine rotation item. Done when the key is stored outside the repository, access is restricted to named operators, and a restore test confirms encrypted credentials can still be read.
Route outbound calls through SSRF_PROXY
The platform engineer configures SSRF_PROXY settings so that outbound requests from Dify, including tool calls and document fetches, pass through the proxy that blocks internal and private IP ranges. The engineer then tests an outbound request to a private address from a workflow and confirms it is refused, and checks that approved model endpoints remain reachable. Record the allowed destinations in the change log. Done when the test evidence shows blocked internal calls and an approved list of external hosts that the privacy lead has reviewed.
Select model providers by location
The privacy lead and the application owner choose each model provider and embedding service by where it processes prompts, retrieved chunks and outputs, and by whether it stores them. For a cloud provider, the team should confirm the processing region, retention terms and whether any third-country access is possible, which may require a transfer assessment under Chapter V. For self-hosted or on-premises inference, the team records the host location and the network path from Dify. Done when each provider in the Dify configuration has a signed-off location record that matches the data flows from the first step.
Configure retention and cleanup
The operator reviews the retention settings for conversation logs, uploaded files and knowledge chunks, then sets periods that match the purpose and lawful basis documented in step one. Dify's own cleanup behavior and any scheduled jobs should be tested on a non-production copy so the team knows what is deleted, when, and from which stores. Backups need their own retention rule, because a deleted record may persist in older snapshots. Done when a test record is removed from logs, files and the vector index according to the documented schedule, and the backup retention period is written down.
Define end-user identifiers
The application owner decides how end users are identified when they call a Dify app through the service API or a web app. Use an opaque, pseudonymous identifier issued by your own identity system rather than names, email addresses or national identifiers, and document how that identifier maps back to a person for erasure requests. Confirm which identifiers appear in conversation records and traces. Done when a sample conversation shows only the agreed identifier and the mapping procedure has been tested by the team that handles requests.
Document exports, version pinning and upgrades
The platform owner pins the Dify version and image digests in the deployment, records the release used and keeps the DSL exports of each app in version control. The DSL export documentation notes that exports exclude third-party API keys, knowledge base content and usage logs, so the team must keep those records in their own systems. Set an upgrade routine that follows the release cadence, reads the upgrade guide for each target version, checks the .env.example file for new variables and takes a backup before every upgrade. Done when the pinned version, the export archive and a tested backup restore are recorded together and the upgrade calendar names an owner.
How DeployOpen works on this
DeployOpen treats Dify for GDPR as a scoped implementation problem: first mapping where personal data lands in your Dify deployment, then configuring, testing and documenting the controls around it. The work runs inside your own cloud accounts, data centers or air-gapped networks, and the written scope defines what is covered.
How we scope
- Map every place personal data can land: prompts, conversation logs, uploaded files, knowledge chunks and traces.
- Agree which Dify version, edition and storage backends the written scope covers before work starts.
- Record the processing purposes, end-user identifier approach, retention targets and model provider locations that the scope must address.
How we build
- Configure retention, log cleanup and workspace access settings, then test them against documented Dify behavior in your environment.
- Set up erasure request handling for conversations, uploaded files and knowledge base content, with tested steps and recorded results.
- Confirm that storage, vector store, model endpoints and outbound proxy settings keep processing in the EU infrastructure you approve.
How we hand over
- Deliver a configuration record, data flow map and retention and erasure runbooks that your privacy and security teams can review.
- Document the evidence each control produces, so your records of processing and DPIA work can reference it.
- Hand over the operating procedures your team needs for upgrades, backups and periodic review of retention and access settings.
How we support
- Engagements are fixed-scope, with scope, deliverables and timelines agreed in writing before work starts.
- Ongoing support, upgrades and continuous testing are available as a retainer, with scope agreed in writing.
- Review changes in Dify releases and environment settings that affect personal data handling, and agree the follow-up work in writing.

