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

# Özel Push Kaynağı API'si

> Bir kaynak kaydedin ve kapsamı sınırlandırılmış bir API erişim anahtarıyla Living Security'ye JSON veya CSV olay toplu gönderimleri yapın.

Bir sistem, Katalog bağlayıcısı tarafından sorgulanmak yerine kayıtları Living Security'ye kendisi gönderiyorsa Özel Push Kaynağı'nı kullanın. Gönderici, JSON dizilerini veya CSV dosyalarını bölgesel bir HTTPS uç noktasına iletebilir.

## Başlamadan önce

Şunlara ihtiyacınız vardır:

* Living Security'de entegrasyonları ve erişim anahtarlarını yönetme izni
* HTTPS `POST` istekleri yapabilen, sunucu tarafında çalışan bir gönderici
* Kuruluşunuzun Living Security bölgesi
* Sabit bir kaynak adı ve en az bir akış adı

Kaynak adları ve akış adları kalıcı yönlendirme anahtarlarıdır. Kaynak adları 1–64 karakter uzunluğunda küçük harf, rakam veya kısa çizgiden oluşmalıdır. Akış adlarında ayrıca alt çizgi de kullanılabilir. Her ikisi de bir harf veya rakamla başlamalıdır.

<Warning>
  API erişim anahtarını gizli bilgi olarak değerlendirin. Anahtarı tarayıcı koduna koymayın, kaynak kontrolüne
  göndermeyin ve destek talebiyle paylaşmayın.
</Warning>

## 1. Kaynağı ve akışları kaydedin

<Steps>
  <Step title="Özel Push Kaynağı'nı açın">
    **Ayarlar → Entegrasyonlar → Katalog** yolunu izleyin, **Özel Push Kaynağı**'nı bulun ve **Ekle**'yi seçin.
  </Step>

  <Step title="Kaynağı adlandırın">
    Kaynak yönlendirme anahtarını ve isteğe bağlı bir açıklama girin. Örneğin, boşluk içeren bir görünen ad yerine `custom-phishing-sim` kullanın.
  </Step>

  <Step title="Akışları ekleyin">
    Göndericinin kullanacağı her akışı ekleyin. Kaynak ve akış çifti ilk gönderimden önce mevcut olmalıdır; bilinmeyen bir çift `404 Not Found` döndürür.
  </Step>

  <Step title="Kaynağı kaydedin">
    Oluşturma işleminden sonra kaynağı **Ayarlar → Entegrasyonlar → Bağlandı** altında açın. **Push via API** görünümü uç nokta desenini ve son çalıştırmaları gösterir.
  </Step>
</Steps>

## 2. Push-ingest anahtarı oluşturun

**Ayarlar → Access Keys** yolunu izleyin, **Create Access Key**'i seçin ve **Push Ingest** kapsamını belirleyin. Oluşturulan değeri hemen kopyalayın; yalnızca bir kez gösterilir.

Anahtar tek bir Living Security kuruluşuna bağlıdır. Push isteği için kuruluş başlığı gerekmez. Anahtar döndürme ve iptal işlemleri için [API Erişim Anahtarları](/tr/features/settings/api-keys) sayfasına bakın.

## 3. Bölgesel uç noktayı seçin

Living Security kuruluşunuza ait ana makine adını kullanın:

| Bölge | Temel URL |
| - | - |
| Amerika Birleşik Devletleri | `https://api.us-east-1.livingsecurity.ai/api/v1` |
| Avrupa Birliği | `https://api.eu-west-1.livingsecurity.ai/api/v1` |

`/push-ingest/{integrationKey}/{streamName}` ekleyin. Yol büyük/küçük harfe duyarlıdır ve kaydedilen kaynak ve akışla birebir eşleşmelidir.

<ParamField path="integrationKey" type="string" required>
  Kaydedilen kaynak adı. Bir harf veya rakamla başlayan, 1–64 karakter uzunluğunda küçük harf, rakam veya kısa çizgi kullanın.
</ParamField>

<ParamField path="streamName" type="string" required>
  Kaydedilen akış adı. Aynı kurallar geçerlidir; ayrıca alt çizgi de kullanılabilir.
</ParamField>

<ParamField header="Authorization" type="string" required>
  Push-ingest erişim anahtarını `Bearer <access-key>` olarak gönderin.
</ParamField>

<ParamField header="Content-Type" type="string">
  JSON için `application/json`, CSV için `text/csv` kullanın. Bu başlık belirtilmezse sunucu bir JSON dizisini yine de algılayabilir.
</ParamField>

<ParamField header="x-organization-id" type="string">
  İsteğe bağlı kuruluş UUID'si. Kuruluşu zaten erişim anahtarı belirler. Bu başlığı gönderirseniz anahtarın kuruluşuyla eşleşmelidir; başka bir kuruluşu seçemez.
</ParamField>

### İstek gövdesi

Üst düzeyde, boş olmayan bir JSON nesne dizisi veya başlık satırı içeren CSV dosya baytları gönderin. Adlandırılmış bir JSON sarmalayıcı alanı yoktur. Her toplu gönderim en fazla 10.000 kayıt ve 10 MB içerebilir.

## 4. JSON toplu gönderimi yapın

Öğeleri nesne olan, boş olmayan bir JSON dizisi gönderin. Living Security dizi gövdesini bu başlık olmadan da algılayabilse de `Content-Type: application/json` önerilir ve birçok gönderen ürün tarafından zorunlu tutulur.

<RequestExample>
  ```bash JSON batch theme={null}
  curl --request POST \
    'https://api.us-east-1.livingsecurity.ai/api/v1/push-ingest/custom-phishing-sim/events' \
    --header 'Authorization: Bearer <access-key>' \
    --header 'Content-Type: application/json' \
    --data '[
      {
        "email": "person@example.com",
        "event_at": "2026-09-21T14:30:00Z",
        "action": "reported"
      }
    ]'
  ```

  ```bash CSV file theme={null}
  curl --request POST \
    'https://api.us-east-1.livingsecurity.ai/api/v1/push-ingest/custom-phishing-sim/events' \
    --header 'Authorization: Bearer <access-key>' \
    --header 'Content-Type: text/csv' \
    --data-binary '@events.csv'
  ```
</RequestExample>

Başarılı bir istek `202 Accepted` döndürür. JSON gövdesi hatalı biçimlendirildiğinde hata sekmesi bir `400 Bad Request` gösterir:

<ResponseExample>
  ```json 202 Accepted theme={null}
  {
    "runId": "01a0c45f-ae40-7e5f-8a9b-0c1d2e3f4a5b",
    "recordsAccepted": 1,
    "integrationKey": "custom-phishing-sim",
    "streamName": "events"
  }
  ```

  ```json 400 Invalid JSON theme={null}
  {
    "statusCode": 400,
    "timestamp": "2026-09-22T14:30:00.000Z",
    "path": "/api/v1/push-ingest/custom-phishing-sim/events",
    "message": "Request body is not valid JSON. Send a JSON array of objects, or set Content-Type: text/csv to push a CSV.",
    "error": "Bad Request"
  }
  ```
</ResponseExample>

Kabul edilmesi, toplu gönderimin asenkron işleme için depolandığı anlamına gelir. Her kaydın şimdiden etkinliğe dönüştürüldüğü anlamına gelmez.
`400` örneği için JSON'u düzeltin veya `Content-Type: text/csv` ile CSV gönderin, ardından yeniden deneyin.

<ResponseField name="runId" type="string" required>
  Kabul edilen bu toplu gönderimin çalıştırma kimliği. İşleme durumunu kontrol etmek için saklayın.
</ResponseField>

<ResponseField name="recordsAccepted" type="number" required>
  Kabul edilen ve depolanan kayıt sayısı.
</ResponseField>

<ResponseField name="integrationKey" type="string" required>
  Bu push için kullanılan kaynak adı.
</ResponseField>

<ResponseField name="streamName" type="string" required>
  Bu push için kullanılan akış adı.
</ResponseField>

## Bunun yerine CSV gönderin

`Content-Type: text/csv` ayarlayın ve yukarıdaki **CSV file** istek örneğinde gösterildiği gibi dosya baytlarını gönderin. İlk satır alan adlarını sağlar.

Boolean metin boolean değerine, sıradan sayısal metin ise sayıya dönüşür. Başında sıfır bulunan değerler, güvenli olmayan büyük tamsayılar, tarihler ve diğer metinler dize olarak kalır. Boş hücreler ilgili alanı atlar. Hatalı biçimlendirilmiş satırlar, eşleşmeyen tırnak işaretleri ve UTF-16 dosyaları reddedilir.

## İstek sınırları ve yeniden denemeler

| Sözleşme | Geçerli değer |
| - | - |
| En fazla kayıt | İstek başına 10.000 |
| En fazla istek gövdesi | 10 MB |
| Kuruluş başına istek oranı | 60 saniyede 600 istek |

Daha büyük dışa aktarımları her iki sınırı da karşılayan toplu gönderimlere bölün. Her yanıtı bekleyin ve döndürülen `runId` değerini gönderici günlüklerinde saklayın.

| Yanıt | Anlamı | Göndericinin yapması gereken |
| - | - | - |
| `202` | Toplu gönderim kabul edildi | `runId` değerini kaydedin; hemen yeniden göndermeyin |
| `400` | Geçersiz ad, JSON, CSV, kayıt sayısı veya gövde | İsteği düzeltin; değiştirmeden yeniden denemeyin |
| `401` | Anahtar eksik, süresi dolmuş, iptal edilmiş veya geçersiz | Anahtarı değiştirin ve Bearer başlığını kullanın |
| `403` | Anahtarda gerekli kapsam yok | **Push Ingest** kapsamına sahip bir anahtar oluşturun |
| `404` | Kaynak veya akış kayıtlı değil | Tam çifti kaydedin veya URL'yi düzeltin |
| `413` | İstek gövdesi 10 MB'ı aşıyor | Toplu gönderimi daha küçük isteklere bölün |
| `429` | Geçici IP düzeyinde kısıtlama | Varsa `Retry-After` değerine uyun ve bekleme süresini artırın |
| `503` | Kuruluş oran kovası veya sınırlayıcı kullanılamıyor | `Retry-After` süresini bekleyin, ardından aynı toplu gönderimi yeniden gönderin |

Kimliği doğrulanmış normal kuruluş sınırı `429` değil, `503` döndürür; bu nedenle webhook göndericileri bunu yeniden denenebilir olarak değerlendirir. `503` yanıtı, toplu gönderim depolanmadan önce döndürülür; aynı toplu gönderimi belirtilen aralıktan sonra yeniden göndermek, kabul edilmiş bir çalıştırmayı çoğaltmaz.

## Veri akışını doğrulayın

Özel Push Kaynağı'nı açın ve **Push History**'yi inceleyin. Akışı, kayıt sayısını, anahtar atfını ve işleme durumunu doğrulayın. Bakımı yapılan bir yorumlayıcıya sahip veriler daha sonra kişilere ve normalleştirilmiş etkinliğe dönüşebilir. Yorumlayıcısı olmayan veriler depolanmaya devam eder ancak etkinlik üretmez.

<Info>
  Varsa sağlayıcıya özel kılavuzdaki tam alan adlarını ve yük yapısını kullanın.
  Başarılı bir `202` yanıtı yalnızca teslimatı kanıtlar; rastgele bir şemanın
  Living Security etkinliğiyle eşleştiğini kanıtlamaz.
</Info>

## Sorun giderme kontrol listesi

* Uç noktayı doğru kaynaktan kopyalayın ve akış yer tutucusunu değiştirin.
* Erişim anahtarını `Authorization: Bearer …` olarak gönderin; `x-api-key` kabul edilmez.
* Gövdenin tek bir nesne veya kayıtları saran bir zarf değil, üst düzey bir JSON dizisi olduğunu doğrulayın.
* Kaynak ve akış yazımını; kısa çizgiler, alt çizgiler ve büyük/küçük harf dahil olmak üzere doğrulayın.
* Yanıtı kaybolan bir toplu gönderimi yeniden göndermeden önce **Push History**'yi inceleyin.
* [Living Security Destek](mailto:support@livingsecurity.com) ile iletişime geçerken kuruluşu, kaynağı, akışı, istek zamanını, varsa `runId` değerini ve yanıt durumunu ekleyin. Erişim anahtarını veya olay yükünü eklemeyin.

## İlgili konular

<CardGroup cols={2}>
  <Card title="Zscaler ZIA Cloud NSS" icon="shield" href="/tr/integrations/zscaler-zia-cloud-nss">
    Desteklenen bir Zscaler web günlüğü akışını tam kaynak, akış, başlıklar ve JSON yapısıyla yapılandırın.
  </Card>

  <Card title="API Erişim Anahtarları" icon="key" href="/tr/features/settings/api-keys">
    Kapsamı sınırlandırılmış kimlik bilgilerini oluşturun, döndürün ve iptal edin.
  </Card>

  <Card title="Sinyal Veri Kaynakları" icon="wave-pulse" href="/tr/signals/data-sources">
    Yorumlanan entegrasyon etkinliğinin sinyalleri nasıl desteklediğini öğrenin.
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.