Concepts
How masking works, the placeholder format, fail-closed behavior, and data sovereignty.
Siper runs every request headed to the language model through a masking step first. This page explains what happens in that step: the format of the placeholders, how the Gateway behaves when masking cannot be performed, and where your data is processed.
How does masking work?
Text arriving at the Gateway is scanned before it is forwarded to the model.
Each detected piece of personal data is replaced with a placeholder in the
form <CATEGORY_N>: the first person name in the text becomes <PERSON_1>,
the second <PERSON_2>. The model sees only the masked text; the placeholders
are preserved as the response comes back.
Detection covers 26 categories, including names, TCKN (Turkish national ID number), phone numbers, and addresses. For the full list and synthetic examples, see Categories.
Behind this accuracy is data: we built a large Turkish training dataset that covers KVKK’s special categories (including health, religion, political opinion, trade-union membership, and criminal convictions) and trained the model on it over months of work. We re-measure new releases under the same test protocol and share comparative results on the benchmark page.
Placeholder format and the language distinction
In masked text returned by the API, placeholders are in English: <PERSON_1>,
<PHONE_MOBILE_1>, <TCKN_1>. Each new value in the same category increments
the number by one. The management panel, on the other hand, displays the same
placeholders with Turkish labels; this is only a display layer, the API
contract does not change.
| API output | Panel display |
|---|---|
<PERSON_1> |
<KİŞİ_1> |
<PHONE_MOBILE_1> |
<TELEFON_1> |
<EMAIL_1> |
<EPOSTA_1> |
When writing integration code, always rely on the English form; the Turkish labels appear only in the panel.
What happens if masking fails?
The request stops. If the masking service cannot process a request, the Gateway does not forward that request to the external model and responds with a 502 status code; there is no “send it unmasked anyway” option. When you receive a 502, retry the request later. This behavior is called fail-closed.
Data sovereignty
Masking runs before the model call, on infrastructure hosted in Turkey. Only masked text goes to the external language model; raw personal data does not leave the country.
For retention, audit trail, and access topics, see Security.