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

# Çok sayıda kişi içe aktarma

> Toplu işlem uç noktasıyla binlerce kişi yükleyin.

`POST /contacts/batch` tek bir istekte en fazla 1000 işlem çalıştırır. Bunu
ilk yükleme için ve gecelik senkronizasyon için kullanın.

## Dört işlem

| `op`     | Ne yapar                                                          |
| -------- | ----------------------------------------------------------------- |
| `upsert` | Kişiyi oluşturur veya eşleşen kişiyi günceller. Varsayılan işlem. |
| `update` | Eşleşen kişiyi günceller. Asla yeni kişi oluşturmaz.              |
| `delete` | Profili siler.                                                    |
| `assign` | Hesap sorumlusunu belirler veya kaldırır.                         |

Kişiyi `id` ile veya `external_id` gibi bir kimlikle belirtin.

## Bir toplu istek

```bash theme={null}
curl -X POST https://kaisupport.com/api/v1/contacts/batch \
  -H "Authorization: Bearer $KAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "operations": [
      { "op": "upsert", "data": {
          "external_id": "DK-1042",
          "name": "Ayşe Yılmaz",
          "email": "ayse@example.com",
          "attributes": { "package": "Tam Destek" }
      }},
      { "op": "assign", "external_id": "DK-1043", "owner": "baran@example.com" },
      { "op": "delete", "external_id": "DK-0007" }
    ]
  }'
```

## Yanıtı okuma

```json theme={null}
{
  "summary": { "total": 3, "created": 1, "updated": 0, "deleted": 1, "assigned": 1, "errors": 0 },
  "results": [
    { "index": 0, "op": "upsert", "status": "created", "id": "4f1d6f2a-..." },
    { "index": 1, "op": "assign", "status": "assigned", "id": "7d2b8e11-..." },
    { "index": 2, "op": "delete", "status": "deleted", "id": "8b2f1c40-..." }
  ]
}
```

Hatalı bir işlem diğerlerini durdurmaz. Kai her işlemi çalıştırır ve her
birini ayrı ayrı bildirir.

Durum kodu satırları değil, isteği tanımlar. Kai'nin anladığı bir istek, içindeki
her işlem başarısız olsa bile 200 döndürür. Her zaman `summary.errors` değerini
ve `results` dizisini okuyun.

```json theme={null}
{
  "index": 4,
  "op": "upsert",
  "status": "error",
  "error": {
    "type": "invalid_attributes",
    "message": "Some attributes could not be stored.",
    "details": [{ "key": "exam_year", "message": "expected a number" }]
  }
}
```

## 40.000 kişiyi içe aktarma

<Steps>
  <Step title="Önce özellikleri oluşturun">
    Satırlarınızın taşıdığı her özellik için `POST /attributes` gönderin. Kai,
    çalışma alanının tanımlamadığı bir özellik anahtarını reddeder.
  </Step>

  <Step title="Satırları 1000'erlik gruplara ayırın">
    Daha büyük bir istek dakikalarca çalışır ve bir proxy zaman aşımında, ne
    yaptığını bildirmeden durabilir.
  </Step>

  <Step title="Grupları sırayla gönderin">
    Aynı anda çalışan iki grup aynı kişiyi taşıyabilir ve iki ayrı kişi kaydı
    oluşturabilir. Grupları arka arkaya gönderin.
  </Step>

  <Step title="Başarısız satırları kaydedin">
    Başarısız her işlem için `index` ve `error.type` değerlerini kaydedin. Bu
    satırları düzeltin ve yeniden gönderin.
  </Step>
</Steps>

```python theme={null}
import itertools, requests

API = "https://kaisupport.com/api/v1"
HEADERS = {"Authorization": f"Bearer {KAI_API_KEY}"}

def batches(rows, size=1000):
    it = iter(rows)
    while chunk := list(itertools.islice(it, size)):
        yield chunk

failures = []
for chunk in batches(contacts):
    body = {"operations": [{"op": "upsert", "data": row} for row in chunk]}
    response = requests.post(f"{API}/contacts/batch", json=body, headers=HEADERS)
    response.raise_for_status()
    result = response.json()
    failures += [r for r in result["results"] if r["status"] == "error"]
    print(result["summary"])

print(f"{len(failures)} rows failed")
```

## Bir toplu isteği güvenle yineleme

`upsert` kimliğe göre eşleşir, bu yüzden aynı toplu istek iki kez
gönderildiğinde aynı kişileri günceller. Kopya oluşturmaz.

Sisteminizde varsa her satıra bir `external_id` verin. Bu en güçlü eşleşmedir,
çünkü onu siz denetlersiniz. Bakınız: [Kimlik](/tr/concepts/identity).
