Data Shield
The real values never leave.
Personal data is caught before the prompt reaches a model and replaced with a format-valid synthetic value. The model still sees text it can reason about; the real values are restored on the way back.
- Entity types
- 8
- Default action
- mask
- Detection
- pattern-based
- Scan limit
- 1 MB
Try it
Type, and watch it happen.
The detection rules are a browser port of the engine's patterns. Nothing you type is sent anywhere.
What the model would receive
Customer record: national ID a3dbe300000, phone +90 500 879 37 45, IBAN TR64 0000 5663 7048 0415 5163, email masked_d25758@trustlayer-synthetic.invalid. Summarise this customer's refund request.
4 values maskedDetected:EMAILPHONE_TRTR_IBANTR_TCKN
This playground runs entirely in your browser; what you type is never sent to a server and never stored. The authoritative engine runs server-side in production; this port uses the same patterns.
In the product
What masking looks like once it has run.
The playground shows the engine; the product also records which rule each match hit and which token replaced it. The frame below is the real interface.
- The prompt the person typed sits at the top, unchanged. The pre-masking text is not hidden — they still see what they wrote.
- The badge says two things at once: how many items were masked, and that it happened before the LLM saw them.
- Each row is one match: which personal-data type was caught, which rule recognised it, and which token replaced it.
- The rules are not generic. The date rule takes only dates labelled as a date of birth and leaves record and transaction dates in the text — which is why the summary still makes sense.
- Tokens are type-prefixed and unique: TR_TCKN_4c22, EMAIL_cf64. Within one prompt the same value gets the same token, and different values never collapse into one.
- The last line is the check after masking: how many raw personal-data items remain in the text going to the model.

How
Synthetic substitution, not placeholders.
Detect
Patterns scan the prompt and claim the matching spans.
Substitute
Each span is replaced by a synthetic value of the same shape; an 11-digit ID becomes an 11-digit string.
Send
The model only ever sees the synthetic text. The mapping stays in memory for the life of the request.
Restore (optional)
On the way back the synthetic values are swapped for the real ones; only an entitled user sees that.
The fourth step is the customer's choice. Switched off, the tokens are never resolved and the user sees the masked text — the real value never leaves the system. The strictest deployments run this way.
Why not placeholders?
A placeholder like `[NATIONAL_ID]` breaks the model's grasp of the sentence: it can no longer tell how many people are involved or which number belongs to whom. A synthetic value of the same shape preserves that structure, and the real data still never leaves.
Deliberately cautious
Detection is pattern-based. A string whose checksum would not validate is masked anyway; we would rather over-mask than miss one. Only card numbers run a second check (Luhn or card grouping), and that one is permissive too.
See it with your own data.
In a technical session we run your prompts and your policy through it live.