# Webhook kaydetme ve güncelleme

> İYS'ye yüklediğiniz izinlerin işlenme sonuçlarının ve izin değişikliklerinin bildirileceği adresi tanımlar.

- **İstek:** `POST https://ext-api.netgsm.com.tr/iys/v1/webhooks`
- **Canlı ortam:** `https://ext-api.netgsm.com.tr/iys/v1`
- **Kimlik doğrulama:** `Authorization: Bearer <token>`
- **HTML sayfası:** https://api-docs.netgsm.com.tr/iys/save-webhook/
- **OpenAPI tanımı:** https://api-docs.netgsm.com.tr/openapi/iys-v1.yaml (operationId: `saveWebhook`)

## Açıklama

İYS'ye yüklediğiniz izinlerin işlenme sonuçlarının ve izin değişikliklerinin bildirileceği
adresi tanımlar. Marka için daha önce bir adres tanımlandıysa yenisiyle değiştirilir.

## İstek

### Gövde (`application/json`, zorunlu)

- `brandCode` (integer, zorunlu, en az 1, en fazla 2147483647): İYS marka kodu. Örnek: `123456`.
- `path` (string, null olabilir, isteğe bağlı): Gönderilmezse `SMSAPI` kabul edilir. Değerler: `SANTRAL`, `SMSAPI`, `WEBPORTAL`. Örnek: `SMSAPI`.
- `webhookUrl` (string, uri, zorunlu): Bildirimlerin gönderileceği adres. Örnek: `https://example.com/webhook`.

Örnek gövde:

```json
{
  "brandCode": 123456,
  "path": "SMSAPI",
  "webhookUrl": "https://example.com/webhook"
}
```

## Örnek istek

```bash
curl -X POST 'https://ext-api.netgsm.com.tr/iys/v1/webhooks' \
  -H 'Authorization: Bearer <token>' \
  -H 'Content-Type: application/json' \
  -d '{
  "brandCode": 123456,
  "path": "SMSAPI",
  "webhookUrl": "https://example.com/webhook"
}'
```

## Yanıtlar

### 200 — Webhook adresi kaydedildi.

Gövde (`application/json`):

- `success` (boolean, isteğe bağlı): Örnek: `true`.
- `errorCode` (integer, isteğe bağlı): Örnek: `0`.
- `message` (string, isteğe bağlı): Örnek: `success`.
- `data` (object, isteğe bağlı)
- `data.uid` (string, isteğe bağlı): Örnek: `ee5c7e61-3940-432a-af30-13b0c9944371`.

Örnek:

```json
{
  "success": true,
  "errorCode": 0,
  "message": "success",
  "data": {
    "uid": "ee5c7e61-3940-432a-af30-13b0c9944371"
  }
}
```

### 400 — Hatalı istek.

Gövde (`application/json`):

- `success` (boolean, isteğe bağlı): Örnek: `false`.
- `errorCode` (integer, isteğe bağlı): Hata kodu (bkz. Hata kodları). Örnek: `120`.
- `message` (string, isteğe bağlı): Örnek: `Bad request`.
- `data` (array<any> | object, isteğe bağlı): Hata ayrıntıları. Çoğu hatada boş dizidir; doğrulama hatasında `errors` nesnesini taşır.
- `data` oneOf → **seçenek 1**
- `data` oneOf → **seçenek 2**

Örnek:

```json
{
  "success": false,
  "errorCode": 120,
  "message": "Bad request",
  "data": []
}
```

### 401 — Token yok, geçersiz ya da süresi dolmuş.

Gövde (`application/json`): alanlar 400 yanıtıyla aynı.

Örnek: Token'ın süresi dolmuş

```json
{
  "success": false,
  "errorCode": 53,
  "message": "Token has expired",
  "data": []
}
```

Örnek: Token bulunamadı

```json
{
  "success": false,
  "errorCode": 51,
  "message": "Token not found",
  "data": []
}
```

### 403 — Yetkisiz erişim ya da hesapta İYS hizmeti aktif değil.

Gövde (`application/json`): alanlar 400 yanıtıyla aynı.

Örnek:

```json
{
  "success": false,
  "errorCode": 60,
  "message": "Unauthorized access",
  "data": []
}
```

### 422 — İstekteki bir alan kurallara uymuyor.

Gövde (`application/json`): alanlar 400 yanıtıyla aynı.

Örnek:

```json
{
  "success": false,
  "errorCode": 70,
  "message": "Validation failed",
  "data": {
    "errors": {
      "brandCode": "The brand code field is required."
    }
  }
}
```

### 424 — İYS'den geçerli bir yanıt alınamadı.

Gövde (`application/json`): alanlar 400 yanıtıyla aynı.

Örnek:

```json
{
  "success": false,
  "errorCode": 112,
  "message": "Api Error",
  "data": []
}
```

### 429 — Çok fazla istek gönderildi.

Gövde (`application/json`): alanlar 400 yanıtıyla aynı.

Örnek:

```json
{
  "success": false,
  "errorCode": 150,
  "message": "Too many requests.",
  "data": []
}
```

### 500 — Beklenmeyen bir hata oluştu.

Gövde (`application/json`): alanlar 400 yanıtıyla aynı.

Örnek:

```json
{
  "success": false,
  "errorCode": 110,
  "message": "Server Error",
  "data": []
}
```
