# Webhook ekle

`POST https://ulawk.com/api/v1/webhooklar/`

Yeni değişiklik webhook'u. Yalnız `https`; özel ya da yerel ağa çözülen adresler reddedilir. En çok 5 adres. `kategoriler` boşsa tüm kategoriler. Yanıttaki `gizli` imza anahtarı yalnız bu yanıtta gösterilir. Yalnız API anahtarıyla (oturum çerezi kabul edilmez).

## Kimlik doğrulama

Her istekte iki başlık: `X-API-Key` ve `X-API-Secret`.

## İstek gövdesi

- `url` (string (uri), zorunlu) — https adresi (en çok 500 karakter).
- `kategoriler[]` (string[]) — Abone olunan kategoriler.

```json
{
  "url": "https://sisteminiz.ornek.com/ulawk",
  "kategoriler": [
    "durum",
    "yetkililer"
  ]
}
```

## Yanıt

### 201 — Webhook ve gizli anahtar.

- `id` (integer, zorunlu)
- `url` (string (uri), zorunlu)
- `aktif` (boolean, zorunlu)
- `kategoriler[]` (string[], zorunlu) — Boş = tüm kategoriler.
- `tum_kategoriler` (boolean, zorunlu)
- `olusturma` (string (date-time), null, zorunlu)
- `son_gonderim` (string (date-time), null, zorunlu)
- `son_durum` (string, null, zorunlu)
- `ardisik_hata` (integer, zorunlu) — Art arda başarısız teslim; 20'de webhook durur.
- `son_teslimler[]` (Teslim[]) — Yalnız tek webhook ayrıntısında (son 20).
- `son_teslimler[].teslim_id` (string, zorunlu) — Yeniden denemelerde aynı (mükerrer ayıklama).
- `son_teslimler[].olay` (string, zorunlu) Değerler: sirket.degisiklik, test.
- `son_teslimler[].test` (boolean, zorunlu)
- `son_teslimler[].kategoriler[]` (string[], zorunlu)
- `son_teslimler[].durum` (string, zorunlu) Değerler: bekliyor, basarili, hata, vazgecildi.
- `son_teslimler[].deneme_sayisi` (integer, zorunlu)
- `son_teslimler[].http_kodu` (integer, null, zorunlu)
- `son_teslimler[].hata` (string, null, zorunlu)
- `son_teslimler[].olusturma` (string (date-time), null, zorunlu)
- `son_teslimler[].son_deneme` (string (date-time), null, zorunlu)
- `gizli` (string, zorunlu) — İmza anahtarı (whsec_…): YALNIZ bu yanıtta gösterilir.
- `aciklama` (string, zorunlu)

```json
{
  "id": 1,
  "url": "https://sisteminiz.ornek.com/ulawk",
  "aktif": true,
  "kategoriler": [
    "durum",
    "yetkililer"
  ],
  "tum_kategoriler": false,
  "olusturma": "2026-10-16T00:00:00+00:00",
  "son_gonderim": "2026-10-16T00:00:00+00:00",
  "son_durum": "başarılı (HTTP 200)",
  "ardisik_hata": 0,
  "gizli": "whsec_ORNEK_GIZLI_ANAHTAR",
  "aciklama": "gizli yalnız bu yanıtta gösterilir; X-Ulawk-Imza başlığını doğrulamak için saklayın."
}
```

### 400 — `gecersiz_json` ya da `gecersiz_webhook` (adres, kategori, sınır).


```json
{
  "hata": "gecersiz_webhook",
  "detay": "Adres https:// ile başlamalı.",
  "hata_ayrinti": {
    "kod": "gecersiz_webhook",
    "mesaj": "Adres https:// ile başlamalı.",
    "taraf": "istemci",
    "kaynak": null,
    "tekrar_denenebilir": false,
    "tekrar_sn": null
  }
}
```

### 403 — API anahtarı gerekli (`anahtar_gerekli`).


```json
{
  "hata": "anahtar_gerekli",
  "detay": "Bu işlem için X-API-Key (ve X-API-Secret) başlığı gerekli; panelden de yapabilirsiniz.",
  "hata_ayrinti": {
    "kod": "anahtar_gerekli",
    "mesaj": "Bu işlem için X-API-Key (ve X-API-Secret) başlığı gerekli; panelden de yapabilirsiniz.",
    "taraf": "istemci",
    "kaynak": null,
    "tekrar_denenebilir": false,
    "tekrar_sn": null
  }
}
```

### 401 — Anahtar yok ya da geçersiz (`yetkisiz`).


```json
{
  "hata": "yetkisiz",
  "detay": "Geçerli X-API-Key başlığı gerekli (panel › API).",
  "hata_ayrinti": {
    "kod": "yetkisiz",
    "mesaj": "Geçerli X-API-Key başlığı gerekli (panel › API).",
    "taraf": "istemci",
    "kaynak": null,
    "tekrar_denenebilir": false,
    "tekrar_sn": null
  }
}
```

### 429 — Saatlik istek sınırı aşıldı (`hiz_siniri`); Retry-After başlığı sıfırlanmaya kalan saniyeyi verir.

Retry-After: `3085`

```json
{
  "hata": "hiz_siniri",
  "detay": "Saatlik istek sınırı aşıldı (600). Bir sonraki saatte tekrar deneyin.",
  "hata_ayrinti": {
    "kod": "hiz_siniri",
    "mesaj": "Saatlik istek sınırı aşıldı (600). Bir sonraki saatte tekrar deneyin.",
    "taraf": "istemci",
    "kaynak": null,
    "tekrar_denenebilir": true,
    "tekrar_sn": 3085
  }
}
```

### 500 — Beklenmeyen hata (`ic_hata`, taraf ulawk); kısa süre sonra yeniden deneyin.

Retry-After: `60`

```json
{
  "hata": "ic_hata",
  "detay": "Beklenmeyen bir hata oluştu; kısa süre sonra yeniden deneyin.",
  "hata_ayrinti": {
    "kod": "ic_hata",
    "mesaj": "Beklenmeyen bir hata oluştu; kısa süre sonra yeniden deneyin.",
    "taraf": "ulawk",
    "kaynak": null,
    "tekrar_denenebilir": true,
    "tekrar_sn": 60
  }
}
```

## İstek

```bash
curl -X POST "https://ulawk.com/api/v1/webhooklar/" \
  -H "X-API-Key: ulk_DENEME_ANAHTARINIZ" \
  -H "X-API-Secret: ulsk_DENEME_GIZLI_ANAHTARINIZ" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://sisteminiz.ornek.com/ulawk", "kategoriler": ["durum", "yetkililer"]}'
```
