# Metni maskele

Verilen metindeki kişisel verileri tespit eder ve seçilen dönüşüme göre maskeler. Varsayılan dönüşüm `placeholder` (geri-çözülebilir yer-tutucu).

POST `/mask`

## Request body

required `application/json`

`text` string required

Maskelenecek ham metin.

`transform` string

`placeholder` (geri-çözülebilir `<KATEGORİ_N>`), `mask` (uzunluk-koruyan `####`, geri-alınamaz).

default: "placeholder"

Allowed: `placeholder` `mask`

`mask_char` string

transform=mask için dolgu karakteri.

default: "#"

`return_vault` boolean

Yer-tutucu → orijinal değer eşlemesini döndürür (hassas! varsayılan kapalı, asla loglanmaz).

default: false

`categories` object

Kategori filtreleme: `{preset, enable:[...], disable:[...]}`. preset değerleri: ALL, IDENTITY, IDENTIFIERS, KVKK, KVKK_SENSITIVE. (KVKK = tüm kapsam; KVKK_SENSITIVE = yalnız m.6 özel-kategori.)

`allow_patterns` string[]

Düzenli ifade (regular expression, Python `re` sözdizimi) listesi; maskelemeden muaf tutma (allowlist). Tespit edilen bir alanın yüzey metni desenlerden biriyle eşleşiyorsa o alan MASKELENMEZ. Kurum adı gibi kamuya açık bir değer yanlışlıkla kişisel veri sanılıyorsa kullanın. Geçersiz desen 422 döndürür. **Sınırlar:** en çok 25 desen, desen başına en çok 200 karakter. Tarama için bir zaman bütçesi vardır. Muafiyet desenleri bütçeyi aşarsa o desen UYGULANMAZ ve istek normal şekilde tamamlanır: maskelemeyi azaltan bir kural belirsizlikte devreye girmemelidir.

`block_patterns` string | object[]

Düzenli ifade listesi; eşleşen her metin parçası, model tespit etmemiş olsa bile ZORLA maskelenir. Kurum içi sicil/dosya numarası gibi size özgü tanımlayıcıları garantiye almak için kullanın. Düz dize verilirse kategori `custom` olur; `{pattern, category}` nesnesiyle kategori atanır. Mevcut bir tespitle çakışan eşleşme atlanır (tespit kazanır). Geçersiz desen 422 döndürür. **Sınırlar:** en çok 25 desen, desen başına en çok 200 karakter. Tarama için bir zaman bütçesi vardır; bütçe aşılırsa istek 422 döndürür. Sessizce eksik maskelemek yerine isteği reddetmek tercih edilir. **Kurum desenleri:** panelden kurumunuz için tanımlanan desenler bu istekteki desenlere EKLENİR ve istek gövdesiyle düşürülemez. Sonuç yalnız maskelemeyi artırır.

Array of `string | object`

One of:

string

`string`

object

`pattern` string required

Düzenli ifade (Python `re` sözdizimi).

`category` string

Zorlanan alana atanacak kategori (varsayılan `custom`).

## Responses

200 Maskeleme sonucu

`masked_text` string

Maskelenmiş metin.

`transform` string

`spans` Span[]

Array of `Span`

`category` string

`start` integer

`end` integer

`score` number

`timings_ms` object

Toplam işlem süresi (ms): yalnız { total }.

`vault` object

return_vault=true ise yer-tutucu → orijinal eşlemesi (hassas).

401 Eksik veya geçersiz sanal anahtar

`detail` string

413 Metin azami uzunluğu aştı (parçalayın veya /mask/batch kullanın)

422 Geçersiz istek gövdesi

`detail` ValidationError[]

Array of `ValidationError`

`loc` string | integer[]

Array of `string | integer`

Any of:

string

`string`

integer

`integer`

`msg` string

`type` string

### Request

#### python

```
import requests

response = requests.post(
    "https://gw-tr.gurubase.io/mask",
    headers={
        "Content-Type": "application/json"
    },
    json={
  "text": "Ahmet Yılmaz, TC 10000000214.",
  "transform": "placeholder",
  "mask_char": "#",
  "return_vault": False,
  "categories": {},
  "allow_patterns": [
    "\\bDemo Kurum\\b"
  ],
  "block_patterns": [
    "\\bPRJ-\\d{4}\\b",
    {
      "pattern": "\\bSICIL-\\d{6}\\b",
      "category": "custom"
    }
  ]
},
)
```

#### curl

```
curl -X POST "https://gw-tr.gurubase.io/mask" \
  -H "Content-Type: application/json" \
  -d '{
  "text": "Ahmet Yılmaz, TC 10000000214.",
  "transform": "placeholder",
  "mask_char": "#",
  "return_vault": false,
  "categories": {},
  "allow_patterns": [
    "\\bDemo Kurum\\b"
  ],
  "block_patterns": [
    "\\bPRJ-\\d{4}\\b",
    {
      "pattern": "\\bSICIL-\\d{6}\\b",
      "category": "custom"
    }
  ]
}'
```

#### js

```
const response = await fetch("https://gw-tr.gurubase.io/mask", {
  method: "POST",
  headers: {
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
  "text": "Ahmet Yılmaz, TC 10000000214.",
  "transform": "placeholder",
  "mask_char": "#",
  "return_vault": false,
  "categories": {},
  "allow_patterns": [
    "\\bDemo Kurum\\b"
  ],
  "block_patterns": [
    "\\bPRJ-\\d{4}\\b",
    {
      "pattern": "\\bSICIL-\\d{6}\\b",
      "category": "custom"
    }
  ]
})
});
```

### Response

#### 200

```
{
  "masked_text": "string",
  "transform": "string",
  "spans": [
    {
      "category": "person",
      "start": 0,
      "end": 0,
      "score": 0.85
    }
  ],
  "timings_ms": {},
  "vault": {}
}
```

#### 401

```
{
  "detail": "string"
}
```

#### 413

Metin azami uzunluğu aştı (parçalayın veya /mask/batch kullanın)

#### 422

```
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string"
    }
  ]
}
```
