> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.insurgateway.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.insurgateway.com/_mcp/server.

# ProductUsingChange Notification

InsurGateway tarafında bir ürünün **request mapping'i** (ilgili sigorta şirketi servisine giderken kullanılan "key/parametre kullanım listesi" — kısaca *usings*) değiştiğinde, o ürünü kullanan acentelerin platformlarına gönderilen bildirim tipidir. Platform bu bildirim ile hangi key'lerin artık gönderilmesi gerektiğini (eklenenler) ve hangilerinin artık gönderilmeyeceğini (kaldırılanlar) öğrenir; kendi teklif/poliçe isteği hazırlama mantığını buna göre günceller.

Bildirim **yalnızca değişikliği (delta)** taşır; ürünün tüm güncel key listesini değil, sadece eklenen ve kaldırılan key'leri içerir. Bir ürün için ilk hesaplamada (karşılaştırılacak önceki kayıt henüz olmadığından) bildirim gönderilmez; yalnızca o anki liste kayıt altına alınır. Bu noktadan sonraki her değişiklikte delta gönderilir.

> Header ve zarf (envelope) yapısı için: [Platform Entegrasyon Gereksinimleri](../platform-entegrasyon-gereksinimleri). Bu bildirim tipinde **cevap ve retry davranışı** aşağıda ayrıca tanımlanmıştır: başarı yalnızca HTTP durum koduna göre belirlenir ve transport hatası dışında retry yapılmaz.

---

## Endpoint

| Alan               | Değer               |
| ------------------ | ------------------- |
| HTTP Method        | `POST`              |
| Path               | `/PushNotification` |
| `NotificationType` | `9`                 |

---

## Örnek İstek

```bash
curl -X POST "https://platform.ornek.com.tr/insurgw/PushNotification" \
  -H "Content-Type: application/json" \
  -H "x-api-key: 9f3c1e8a-2b4d-1234-5678-deadbeefcafe" \
  -d '{
    "ReferanceNo": "10025_20260609153012345a1b2c_0_0",
    "SubReferanceNo": "a1b2c3d4-e5f6-7890abcdef1234567890",
    "RequestKeyValueSet": null,
    "RequestObject": {
      "NotificationType": 9,
      "Payload": "{\"ProductId\":2930,\"ServiceOperations\":{\"GetProposal\":{\"IncludedKeys\":[{\"KeyId\":20,\"KeyName\":\"Sigortalı TC Kimlik No\",\"ParameterId\":null,\"ParameterName\":null}],\"RemovedKeys\":[{\"KeyId\":10,\"KeyName\":\"Sigortalı TC\",\"ParameterId\":null,\"ParameterName\":null}]}}}"
    }
  }'
```

> `ReferanceNo` opak bir idempotency anahtarıdır; format `{AgentId}_{zamanDamgası+benzersiz}_0_0` şeklindedir ve aynı bildirimin retry'larında **değişmez**.

---

## Parse Edilmiş Payload

`RequestObject.Payload` alanı serialize edilmiş bir JSON string'tir; ikinci bir parse sonrasında aşağıdaki yapıya ulaşılır:

```json
{
  "ProductId": 2930,
  "ServiceOperations": {
    "GetProposal": {
      "IncludedKeys": [
        { "KeyId": 20, "KeyName": "Sigortalı TC Kimlik No", "ParameterId": null, "ParameterName": null },
        { "KeyId": 35, "KeyName": "Meslek", "ParameterId": 8, "ParameterName": "Meslek Kodu" }
      ],
      "RemovedKeys": [
        { "KeyId": 10, "KeyName": "Sigortalı TC", "ParameterId": null, "ParameterName": null }
      ]
    },
    "CreatePolicy": {
      "IncludedKeys": [],
      "RemovedKeys": [
        { "KeyId": 51, "KeyName": "Eski Poliçe No", "ParameterId": null, "ParameterName": null }
      ]
    }
  }
}
```

| Alan                | Tip       | Açıklama                                                                                                                                                                   |
| ------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `ProductId`         | int       | Kullanım listesi değişen InsurGateway ürün kodu.                                                                                                                           |
| `ServiceOperations` | object    | Yalnızca **değişiklik olan** servis operasyonlarını içerir. Anahtar = servis operasyonu adı (örn. `GetProposal`, `CreatePolicy`); değer = `{ IncludedKeys, RemovedKeys }`. |
| `IncludedKeys`      | object\[] | İlgili operasyona **eklenen** key'ler. Platform bu key'leri artık göndermeye başlamalıdır.                                                                                 |
| `RemovedKeys`       | object\[] | İlgili operasyondan **kaldırılan** key'ler. Bu key'ler artık gönderilmemelidir.                                                                                            |

**Key objesi alanları (**`IncludedKeys`**&#x20;/&#x20;**`RemovedKeys`**&#x20;elemanları):**

| Alan            | Tip          | Açıklama                                                               |
| --------------- | ------------ | ---------------------------------------------------------------------- |
| `KeyId`         | int          | InsurGateway key kodu. Delta'nın uygulanmasında esas alınacak alandır. |
| `KeyName`       | string       | Key'in adı (bilgi/okunabilirlik amaçlı).                               |
| `ParameterId`   | int\|null    | Key bir parametreye bağlıysa parametre kodu; bağlı değilse `null`.     |
| `ParameterName` | string\|null | Parametre adı; bağlı parametre yoksa `null`.                           |

> **Delta kimliği `(ServiceOperation, KeyId, ParameterId)` üçlüsüdür.** Bir key'in parametre bağı değişirse, eski `(KeyId, ParameterId)` ikilisi `RemovedKeys`'e, yeni ikili `IncludedKeys`'e girer. Bu nedenle aynı `KeyId` aynı operasyonda hem `RemovedKeys` hem `IncludedKeys` içinde **farklı `ParameterId`** ile görünebilir; delta uygulanırken `ParameterId` de dikkate alınmalıdır.

> Bir servis operasyonu altında yalnızca `IncludedKeys`, yalnızca `RemovedKeys` veya her ikisi birden dolu olabilir. Değişiklik olmayan operasyonlar payload'a hiç eklenmez.

---

## Beklenen Cevap

Platform, bildirimi aldığında **HTTP 2xx** dönmelidir. InsurGateway başarıyı **yalnızca HTTP durum koduna** göre belirler; cevap gövdesi değerlendirilmez (gövde boş olabilir).

**Başarı:**

```http
HTTP/1.1 200 OK
```

**Hata:**

`2xx` dışı herhangi bir HTTP kodu (örn. `500`) hata kabul edilir.

```http
HTTP/1.1 500 Internal Server Error
```

> Bildirim `ReferanceNo` üzerinden **idempotent** işlenmelidir; aynı `ReferanceNo` ile yeniden gelen bir bildirim tekrar uygulanmamalıdır (aksi halde aynı delta birden fazla işlenip key listesi bozulabilir).

---

## Retry

InsurGateway, bildirimi **yalnızca platforma ulaşamadığında** (bağlantı hatası / timeout — yani HTTP cevabı hiç alınamadığında) yeniden gönderir. Platformdan dönen `2xx`**&#x20;dışı bir HTTP cevabı retry üretmez**; hata loglanır ve bildirim düşülür. Dolayısıyla bildirimin tekrar denenmesini istiyorsanız cevap dönmeyin (timeout) — `2xx` dışı bir HTTP kodu düşmeye yol açar.

| Parametre                       | Değer                                               |
| ------------------------------- | --------------------------------------------------- |
| Retry koşulu                    | Yalnızca transport hatası (HTTP cevabı alınamaması) |
| `2xx` dışı HTTP cevabı          | Retry YOK — loglanır ve düşülür                     |
| Maksimum retry (orijinal hariç) | **10**                                              |
| Toplam maksimum deneme          | **11**                                              |
| Bekleme süreleri                | 3 sn → 10 sn → 1 dk → 1 saat (≥4. retry)            |