> ## Documentation Index
> Fetch the complete documentation index at: https://docs.orbit.devotel.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Veri Sahibi Erişim Talepleri (DSAR)

> GDPR, CCPA, CPRA, LGPD, PDPA ve DPDP veri sahibi taleplerini Orbit üzerinde operatör iş akışları veya self-servis portal aracılığıyla alın, doğrulayın ve yerine getirin.

# Veri Sahibi Erişim Talepleri (DSAR)

Bir **Veri Sahibi Erişim Talebi** (gizlilik talebi veya tüketici hakları
talebi olarak da adlandırılır), bir kişinin kendisi hakkında elinizde
bulunan kişisel veriler üzerindeki haklarını — bu verilere **erişim**,
**silme**, **düzeltme**, **taşıma** veya **satışına ilişkin ret** hakkı —
kullanmak için başvurduğu resmi mekanizmadır. Çoğu gizlilik yasası,
yanıt vermeniz için kesin bir süre tanır (GDPR kapsamında 30 gün,
CCPA/CPRA kapsamında 45 gün).

Orbit size iki talep giriş yolu ve tek bir karşılama hattı sunar:

* **Operatör tarafından oluşturulan DSAR** — destek veya uyumluluk
  ekibiniz, kimliği doğrulanmış API veya pano üzerinden bir müşteri
  adına talep oluşturur.
* **Herkese açık self-servis portal** — veri sahibi, herhangi bir şey
  kuyruğa alınmadan önce kimliğini **iki aşamalı e-posta + SMS OTP**
  ile kanıtlayan, herkese açık ve kimlik doğrulaması gerektirmeyen bir
  akış üzerinden kendi talebini oluşturur.

<Warning>
  Bu sayfa Orbit'in platform kontrollerini açıklar. Bu **hukuki
  tavsiye değildir.** Yükümlülükleriniz — hangi yasaların geçerli
  olduğu, neyi açıklamanız gerektiği ve ne kadar süreniz olduğu —
  veri sahiplerinizin yaşadığı yere ve işlediğiniz verilere bağlıdır.
  Nitelikli bir hukuk danışmanıyla teyit edin.
</Warning>

Aşağıdaki tüm uç noktalar
`https://api.orbit.devotel.io/api/v1/compliance` köküne bağlıdır.

***

## Desteklenen yargı bölgeleri ve süreler

Bir talepteki `applicable_jurisdiction`, Orbit'in SLA izleyicisinin
hangi yasal süre sayacını uygulayacağını belirler. Operatörler bir
talebi giriş sonrasında yeniden sınıflandırabilir.

| Yargı bölgesi           | Kod      | Yanıt SLA'sı |
| ----------------------- | -------- | ------------ |
| AB / AEA GDPR           | `gdpr`   | 30 gün       |
| Kaliforniya CCPA        | `ccpa`   | 45 gün       |
| Kaliforniya CPRA        | `cpra`   | 45 gün       |
| Brezilya LGPD           | `lgpd`   | 15 gün       |
| Singapur / Tayland PDPA | `pdpa`   | 30 gün       |
| Kanada PIPEDA           | `pipeda` | 30 gün       |
| Hindistan DPDP          | `dpdp`   | 30 gün       |

## Talep türleri

`request_type`, veri sahibinin ne talep ettiğini açıklar. CCPA/CPRA
eylem kümesinin tamamı operatörlere açıktır; herkese açık portal,
buna karşılık gelen daha kullanıcı dostu bir alt küme sunar.

| Operatör `request_type` | Anlamı                                                          | Herkese açık portal eylemi |
| ----------------------- | --------------------------------------------------------------- | -------------------------- |
| `know`                  | Erişim — tutulan verileri açıklama (GDPR Md 15, CCPA §1798.110) | `access`                   |
| `delete`                | Silme (GDPR Md 17, CCPA §1798.105)                              | `delete`                   |
| `correct`               | Düzeltme (GDPR Md 16, CPRA §1798.106)                           | —                          |
| `portability`           | Makine tarafından okunabilir dışa aktarım (GDPR Md 20)          | `portability`              |
| `opt_out_sale`          | Satış/paylaşım reddi (CCPA §1798.120)                           | `opt_out`                  |
| `limit_sensitive_pi`    | Hassas kişisel verilerin kullanımını sınırlama (CPRA §1798.121) | —                          |
| `non_discrimination`    | Ayrımcılık yapmama hakkı (CCPA §1798.125)                       | —                          |

CCPA erişim taleplerinde ayrıca `consumer_categories`
ekleyebilirsiniz — veri sahibinin sorduğu CCPA §1798.100(b)
kategorileri: `identifiers`, `customer_records`,
`protected_classifications`, `commercial`, `biometric`,
`internet_activity`, `geolocation`, `sensory`, `professional`,
`education`, `inferences`, `sensitive_pi`.

***

## Operatör tarafından oluşturulan talepler

### Talep oluşturma

`POST /compliance/dsar` — bir yönetici veya sahip API anahtarı
gerektirir. En az bir veri sahibi tanımlayıcısı (`contact_id`,
`subject_email` veya `subject_phone`) ile yazışmaların
gönderileceği `requester_email` sağlayın.

```bash theme={null}
curl -X POST https://api.orbit.devotel.io/api/v1/compliance/dsar \
  -H "X-API-Key: dv_live_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
    "subject_email": "jordan@example.com",
    "requester_email": "jordan@example.com",
    "applicable_jurisdiction": "gdpr",
    "request_type": "know",
    "verification_method": "email_link"
  }'
```

`202 Accepted` döndürür:

```json theme={null}
{
  "id": "dsar_8x2k…",
  "status": "received",
  "applicable_jurisdiction": "gdpr",
  "request_type": "know",
  "verification_status": "pending",
  "message": "Request received and queued for verification."
}
```

| Alan                      | Tür       | Notlar                                                                                                                                                       |
| ------------------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `contact_id`              | string    | İsteğe bağlı. Talebi bilinen bir kişiye bağlar.                                                                                                              |
| `subject_email`           | email     | email / phone / contact\_id değerlerinden biri gereklidir.                                                                                                   |
| `subject_phone`           | string    | E.164.                                                                                                                                                       |
| `requester_email`         | email     | **Zorunlu.** Durum güncellemelerinin gönderildiği adres.                                                                                                     |
| `applicable_jurisdiction` | enum      | Varsayılan `gdpr`. `request_type` `opt_out_sale` veya `limit_sensitive_pi` olduğunda açıkça `ccpa` veya `cpra` olarak ayarlanmalıdır (aşağıdaki nota bakın). |
| `request_type`            | enum      | Varsayılan `know`.                                                                                                                                           |
| `consumer_categories`     | string\[] | CCPA kategorileri (yalnızca erişim).                                                                                                                         |
| `verification_method`     | enum      | `email_link`, `email_phone`, `document`, `manual_review`.                                                                                                    |
| `requester_statement`     | string    | Serbest metin, ≤ 4096 karakter.                                                                                                                              |
| `authorized_agent`        | object    | Bir temsilci veri sahibi adına başvurduğunda `{ agent_name, agent_email, permission_document_id? }`.                                                         |

> **Not** — `applicable_jurisdiction` yalnızca GDPR kapsamında var
> olan haklar için varsayılan olarak `gdpr` değerini alır.
> `opt_out_sale` ve `limit_sensitive_pi` talep türleri yalnızca
> CCPA/CPRA'ya özgüdür ve GDPR karşılığı yoktur; bu nedenle bunlar
> için `applicable_jurisdiction` değerini açıkça `ccpa` veya `cpra`
> olarak ayarlamanız gerekir. Atlanması (veya `gdpr` varsayılanının
> bırakılması) `422 VALIDATION_ERROR` ile reddedilir.

### Durum yaşam döngüsü

Bir talep şu sıradan geçer:

`received` → `processing` → `completed`

ve `failed`, `expired` ile `cancelled` olmak üzere sonlanan dallara
sahiptir. **Doğrulama** alt durumu bağımsız olarak izlenir:
`pending` → `verified` (işçi devam eder) veya `rejected` (işçi
durur). GDPR/yönetici tarafından oluşturulan satırlar varsayılan
olarak `not_required` değerini alır.

### Kimliği doğrulama veya reddetme

Daha yüksek güvence gerektiren talepler (silme, ret, hassas sınırlama),
karşılama işleminden önce bir operatör kararı gerektirir:

```bash theme={null}
curl -X POST https://api.orbit.devotel.io/api/v1/compliance/dsar/dsar_8x2k…/verification \
  -H "X-API-Key: dv_live_sk_..." \
  -H "Content-Type: application/json" \
  -d '{ "decision": "verified", "notes": "Matched gov-ID upload." }'
```

`decision` `verified` veya `rejected` olabilir; `notes` isteğe
bağlıdır (≤ 2048 karakter). Yeni `verification_status` ve
`verified_at` değerlerini döndürür.

### Talebi iptal etme

`POST /compliance/dsar/{id}/cancel`, devam eden bir talebi geri çeker
(GDPR Md 7(3)). Yalnızca talep `received` veya `processing` durumundayken
çalışır; sonlanmış bir talep `409 Conflict` döndürür.

```bash theme={null}
curl -X POST https://api.orbit.devotel.io/api/v1/compliance/dsar/dsar_8x2k…/cancel \
  -H "X-API-Key: dv_live_sk_..." \
  -H "Content-Type: application/json" \
  -d '{ "reason": "Duplicate of dsar_7a1f…" }'
```

### Talepleri listeleme ve okuma

* `GET /compliance/dsar` — sayfalanmış liste. Sorgu: `page` (≥ 1),
  `page_size` (≤ 100, varsayılan 25) ve isteğe bağlı bir `status`
  filtresi.
* `GET /compliance/dsar/{id}` — tek bir talebi getirir. Bir
  erişim/taşınabilirlik dışa aktarımı üretildiğinde yanıt, imzalı
  `export_url` (ve `export_expires_at`) ile tablo başına satır
  sayılarını açıklayan `tables_exported` içerir.

### Silme talepleri

GDPR Md 17 silmeleri, veriler yok edilmeden önce denetleyebilmeniz ve
müdahale edebilmeniz için kendi kaynağı olarak izlenir:

* `GET /compliance/dsar/erasure-requests` — liste. Sorgu: `status`
  (`pending`, `cancelled`, `executing`, `executed`, `failed`) ve
  `limit` (≤ 500).
* `POST /compliance/dsar/erasure-requests/{id}/cancel` — **bekleyen**
  bir silmeyi yürütülmeden önce iptal eder. İsteğe bağlı `reason`
  (≤ 500 karakter). Zaten yürütülüyorsa veya tamamlanmışsa `409`
  döndürür.

### SLA panosu

`GET /compliance/dsar/sla`, yasal süreyi asla kaçırmamanız için birleşik
bir dışa aktarım + silme SLA anlık görüntüsü döndürür:

```json theme={null}
{
  "items": [
    {
      "id": "dsar_8x2k…",
      "kind": "export",
      "status": "processing",
      "days_elapsed": 22,
      "days_remaining": 8,
      "severity": "amber",
      "sla_deadline_at": "2026-07-01T00:00:00.000Z",
      "approaching": true,
      "breach": false,
      "escalation_due": false
    }
  ],
  "alerts": {
    "breached": 0,
    "approaching": 1,
    "escalation_due": 0,
    "worst_severity": "amber",
    "has_alert": true
  },
  "sla_days": 30
}
```

Önem düzeyi kademeleri **her yargı bölgesinin SLA penceresiyle orantılı
olarak ölçeklenir** — gün eşikleri GDPR 30 günlük duruma sabitlenir ve
`slaDays / 30` oranıyla çarpılır; böylece bir talep her zaman kendi
son tarihinin aynı kesrinde amber ve kırmızıya döner.
`escalation_due`, yasal son tarihten 5 gün önce (`slaDays − 5`)
değişir.

**GDPR** için (`sla_days: 30`): **yeşil** (\< 20 gün geçmiş),
**amber** (20–25), **kırmızı** (26–30), **kırmızı + ihlal** (> 30);
`escalation_due` 25. günde.

**CCPA/CPRA** için (`sla_days: 45`) aynı oranlar **yeşil** (\< 30),
**amber** (30–38), **kırmızı** (39–45), **kırmızı + ihlal** (> 45)
verir; `escalation_due` 40. günde. Kademe sınırlarını her zaman sabit
20/25/30 sayılarına karşı değil, söz konusu talep için döndürülen
`sla_days` değerine karşı okuyun.

***

## Herkese açık self-servis portal

Herkese açık akış, bir veri sahibinin hesap olmadan talep oluşturmasını
sağlar. Herhangi bir talep kuyruğa alınmadan önce kimlik, **iki
aşamalı OTP** — bir e-posta kodu ve bir SMS kodu — ile kanıtlanır. Uç
noktalar `/compliance/public/dsar` altında bulunur ve kimlik doğrulaması
gerektirmez; ancak Cloudflare Turnstile, IP başına ve tanımlayıcı başına
hız sınırları ve bir e-posta/telefon çiftinin gerçek bir kişiyle
eşleşip eşleşmediğini asla açığa vurmayan, gizliliği koruyan bir yanıt
biçimi ile korunur.

<Note>
  SMS doğrulama kodları Devotel softswitch'i (platformun tek giden SMS
  yolu) üzerinden iletilir. Bunlar platform OTP'leridir, kiracıya
  faturalandırılan trafik değildir ve teslimat makbuzu kalıcılığı
  taşımaz.
</Note>

### Akışa genel bakış

<Steps>
  <Step title="Başlat">
    `POST /compliance/public/dsar/begin` ile `email`, `phone` (E.164),
    `request_type` (`access` | `delete` | `portability` | `opt_out`) ve
    bir Cloudflare `turnstile_token` (üretimde zorunlu) gönderin.
    Opak bir `claim_id`, `email_sent: true` ve `expires_in: 600`
    döndürür. Bir e-posta OTP'si hemen gönderilir.
  </Step>

  <Step title="E-postayı doğrula">
    `POST /compliance/public/dsar/verify-email` ile `claim_id` ve 6
    haneli `code` gönderin. `email_verified` durumunu ve `phone_send`
    sonraki adımını döndürür. Kodlar 10 dakika sonra geçerliliğini
    yitirir; en fazla 3 deneme. `POST …/resend-email` ( `claim_id` +
    `email` ile) 60 saniyelik bekleme süresine tabi olarak yeni bir
    kod üretir.
  </Step>

  <Step title="Telefon kodunu gönder">
    `POST /compliance/public/dsar/send-phone` ile `claim_id` ve başlatma
    adımında verilenle eşleşen `phone` gönderin. Bir SMS OTP'si gönderir
    (`expires_in: 600`). Gönderimler arasında 60 saniyelik bekleme süresi
    uygulanır; çok erken yapılan bir yeniden deneme `Retry-After` ile
    `429` döndürür.
  </Step>

  <Step title="Telefonu doğrula">
    `POST /compliance/public/dsar/verify-phone` ile `claim_id` ve 6
    haneli `code` gönderin. `phone_verified` durumunu ve `submit`
    sonraki adımını döndürür.
  </Step>

  <Step title="Gönder">
    `POST /compliance/public/dsar/submit` ile `claim_id` gönderin. Bir
    denetim satırı kaydeder ve — yalnızca doğrulanan e-posta + telefon,
    kiracınızdaki bir kişiyle eşleşirse — gerçek bir DSAR kuyruğa alır
    (OTP kimliği zaten kanıtladığı için önceden
    `verification_status: verified` işaretlidir). Bir `reference_id`
    (örn. `dsar_pub_…`) ve bir `queued` boolean değeri döndürür.
  </Step>
</Steps>

### Kimlik kanıtı gönderenleri yapılandırma

İki OTP, API ortamınızda bir kez yapılandırdığınız platform düzeyi
gönderenlerden gönderilir. Bunları portalı yayımlamadan önce ayarlayın
— yedeksiz ayarlanmamış bir SMS göndereni, telefon adımının kapalı
şekilde başarısız olmasına neden olur.

| Değişken                        | Kullanım                             | Varsayılan / yedek                                                               |
| ------------------------------- | ------------------------------------ | -------------------------------------------------------------------------------- |
| `DEVOTEL_DSAR_PROOF_FROM_EMAIL` | E-posta OTP'sindeki gönderen adresi. | `privacy@orbit.devotel.io`. Teslimat ayrıca `DEVOTEL_RESEND_API_KEY` gerektirir. |
| `DEVOTEL_DSAR_PROOF_SMS_FROM`   | SMS OTP'sindeki E.164 göndereni.     | `DEVOTEL_PLATFORM_DEFAULT_FROM` değerine geri döner.                             |

`DEVOTEL_DSAR_PROOF_SMS_FROM` **ve** `DEVOTEL_PLATFORM_DEFAULT_FROM`
ikisi de ayarlanmamışsa, `send-phone` adımı **`503` ile kapalı şekilde
başarısız olur** — portal "geçici olarak kullanılamıyor" mesajı döndürür
ve hata, ikinci aşamanın sessizce atlanması yerine panolarınızda
görünmesi için `dsar.proof.sms_send_failed` metriği altında yayınlanır.
Benzer şekilde, `DEVOTEL_RESEND_API_KEY` ayarlanmamışken e-posta adımı
`503` döndürür. Portalı herkese açık olarak bağlamadan önce iki
göndereni de yapılandırın.

### Kötüye kullanım savunmaları

| Kontrol                           | Sınır                                                            |
| --------------------------------- | ---------------------------------------------------------------- |
| Cloudflare Turnstile              | Üretimde `begin` üzerinde zorunlu (fail-closed).                 |
| IP başına `begin`                 | Saatte 3.                                                        |
| E-posta başına bekleme süresi     | 60 sn'de 1.                                                      |
| Telefon başına SMS bekleme süresi | 60 sn'de 1.                                                      |
| Fastify IP başına kapı            | IP başına dakikada 30 istek, uç nokta başına bağımsız uygulanır. |
| OTP TTL / denemeler               | 10 dakika, kod başına en fazla 3 deneme.                         |
| Talep TTL'si                      | Uçtan uca 30 dakika.                                             |

Yanıt biçimi, tanımlayıcıların gerçek bir kişiyle eşleşip eşleşmediğine
bakılmaksızın aynıdır — portal birinin veritabanınızda olup olmadığını
asla doğrulamaz veya reddetmez. Redis kullanılamadığında, hız sınırı
kapıları kullanılabilirliği korumak için **açık** şekilde başarısız
olur.

### Turnstile korumasını etkinleştirme

Turnstile kapısı iki ortam değişkeniyle yapılandırılır.

| Değişken                                 | Ne zaman      | Açıklama                                                                                                                                  |
| ---------------------------------------- | ------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| `DEVOTEL_TURNSTILE_SECRET_KEY`           | API (sunucu)  | Cloudflare Turnstile gizli anahtarı. Ayarlandığında `begin` uç noktası gönderilen `turnstile_token` değerini Cloudflare'a karşı doğrular. |
| `NEXT_PUBLIC_DEVOTEL_TURNSTILE_SITE_KEY` | Web (istemci) | Portalın bileşeni işlerken kullandığı herkese açık Turnstile site anahtarı.                                                               |

<Warning>
  `DEVOTEL_TURNSTILE_SECRET_KEY` ayarlanmamışken kapı **fail-open**
  durumdadır: `begin`, token olmadan istekleri kabul eder ve tek bir
  uyarı kaydeder. Üretimde gizli anahtarı ayarlayın; aksi takdirde,
  yukarıdaki diğer tüm kötüye kullanım savunmaları geçerli olmaya devam
  etse bile portal Turnstile tarafından korunmaz. Her iki anahtarı da
  Cloudflare panosunda (Turnstile → Add site) oluşturun ve sırasıyla API
  ve web dağıtımlarında ayarlayın.
</Warning>

***

## Portal bağlantısını barındırma

Herkese açık portalı, gizlilik politikanızın altında "Bir gizlilik
talebi gönder" bağlantısı olarak yayımlayın. Akış OTP aracılığıyla
kendi kendini doğruladığı için, üzerinden gelen talepler kimliği zaten
kanıtlanmış haldedir — operatör kuyruğunuza karşılanmaya hazır olarak
düşerler ve operatör tarafından oluşturulan taleplerle birlikte
`GET /compliance/dsar` içinde görünürler.

***

## İlgili referanslar

* [Assembling a GDPR Posture End to End](/compliance/gdpr-posture-guide) —
  DSAR girişinin tam dizide nerede durduğu.
* [Consent Management](/compliance/consent-management) — bir DSAR'ın
  yerine getirmenizi isteyebileceği rıza durumunu kaydedin ve sorgulayın.
* [Opt-Out & Suppression Lists](/compliance/opt-out-suppression) —
  `delete` / `opt_out` sonuçlarının engellemeye nasıl aktığı.
* [Call Recording Consent](/compliance/recording-consent) — bir erişim
  talebi tarafından başvurulan kayıtların işlenmesi.
* [API Referansı → Uyumluluk](/api-reference/endpoints/compliance) — tam
  istek/yanıt şemaları (canlı API'den yeniden üretilir).
