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

# Lead'ler

> Lead oluşturmayı, listelemeyi, aşama değiştirmeyi, atamayı, kazanıldı ve kayıp işaretlemeyi ve hastaya dönüştürmeyi anlatır.

Lead, kliniğe ulaşmış ama henüz hasta olmamış kişidir. Her lead kliniğin tek aktif pipeline'ında bir aşamada durur, bir satış temsilcisine atanabilir ve satışa varırsa hastaya dönüştürülür. Bu sayfa lead'in kendisini yönetir. Notlar, görevler ve iletişim kimlikleri [Lead notları ve görevleri](/api/kaynaklar/lead-notlari-ve-gorevleri) sayfasındadır. Pipeline ve aşama tanımları için [Pipeline'lar](/api/kaynaklar/pipelinelar) sayfasına bakın. Uçtan uca akış için [Lead akışı](/api/rehberler/lead-akisi) rehberini izleyin.

<Info>
  Her istekte `Authorization: Bearer <access_token>` ve `X-Tenant: <tenant_id>` başlıkları gerekir. Başlık yoksa `400 TENANT_HEADER_REQUIRED` döner. Ayrıntı: [Klinikler ve X-Tenant](/api/klinikler-ve-x-tenant).
</Info>

## Endpoint özeti

Taban adres `https://app.flextell.ai/api/v1`. Okuma uç noktaları `leads:read`, yazma uç noktaları `leads:write` scope'u ister. Dönüştürme ayrıca `customers:write` ister. Scope'lar için [Scope'lar](/api/kimlik-dogrulama/scopelar) sayfasına bakın.

| Metot | Endpoint | Açıklama | Scope | İzin |
| - | - | - | - | - |
| GET | `/leads` | Lead'leri listeler | `leads:read` | `View:Lead` |
| POST | `/leads` | Lead oluşturur | `leads:write` | `Create:Lead` |
| GET | `/leads/{id}` | Tek lead döner | `leads:read` | `View:Lead` |
| PUT | `/leads/{id}` | Lead'i kısmen günceller, aşamasını değiştirir | `leads:write` | `Update:Lead` |
| DELETE | `/leads/{id}` | Lead'i siler | `leads:write` | `Delete:Lead` |
| GET | `/leads/{id}/deletion-relations` | Silmenin hangi kayıtları etkileyeceğini gösterir | `leads:read` | `Delete:Lead` |
| POST | `/leads/bulk-delete` | Birden çok lead'i siler | `leads:write` | `Delete:Lead` |
| POST | `/leads/{id}/won` | Lead'i kazanıldı aşamasına alır | `leads:write` | `Update:Lead` |
| POST | `/leads/{id}/lost` | Lead'i kayıp aşamasına alır | `leads:write` | `Update:Lead` |
| POST | `/leads/bulk-stage` | Seçilen lead'lerin aşamasını değiştirir | `leads:write` | `Update:Lead` |
| POST | `/leads/move-stage-group` | Bir aşamadaki tüm lead'leri başka aşamaya taşır | `leads:write` | `Update:Lead` |
| POST | `/leads/{id}/assign` | Lead'i bir kullanıcıya atar | `leads:write` | `Assign:Lead` |
| POST | `/leads/bulk-assign` | Seçilen lead'leri atar | `leads:write` | `Assign:Lead` |
| GET | `/leads/assignable-users` | Lead alabilecek kullanıcıları listeler | `leads:read` veya `conversations:read` | `Assign:Lead` veya `View:Conversation` |
| POST | `/leads/{id}/convert` | Lead'i hastaya dönüştürür | `leads:write` ve `customers:write` | `Convert:Lead` |
| GET | `/leads/stats` | Özet metrikleri döner | `leads:read` | `View:Lead` |
| GET | `/leads/pipeline-summary` | Aktif pipeline'ın aşama dökümünü döner | `leads:read` | `View:Lead` |
| GET | `/leads/reference-sources` | Lead kaynaklarını listeler | `leads:read` veya `conversations:read` | `View:LeadReferenceSource` veya `View:Conversation` |
| POST | `/leads/reference-sources` | Lead kaynağı oluşturur | `leads:write` | `Create:LeadReferenceSource` |
| PUT | `/leads/reference-sources/{id}` | Lead kaynağını günceller | `leads:write` | `Update:LeadReferenceSource` |
| DELETE | `/leads/reference-sources/{id}` | Lead kaynağını siler | `leads:write` | `Delete:LeadReferenceSource` |

<Note>
  `ViewAllLeads:Lead` iznine sahip olmayan kullanıcı yalnızca kendisine atanmış lead'leri görür. Lead'i oluşturmak görünürlük kazandırmaz. Başkasına atanmış bir lead'in `/leads/{id}` ile başlayan uç noktaları `403 LEAD_NOT_ASSIGNED` döner. Silinmiş, başka klinike ait veya bulunmayan lead için `404 RESOURCE_NOT_FOUND` döner.
</Note>

## Nesne modeli

Tek lead ve liste yanıtları aynı alanları taşır. Tarih-saat alanları klinik saat dilimiyle ofsetli döner (`2026-10-12T14:30:00+03:00`).

| Alan | Tür | Açıklama |
| - | - | - |
| `id` | integer | Lead kimliği |
| `record_state` | object | `is_read_only` ve `reason_code` (`CUSTOMER_ERASED`, `LEAD_NOT_ASSIGNED` veya `null`) |
| `first_name`, `last_name`, `full_name` | string | Ad, soyad ve birleşik ad |
| `phone_number` | string | Yalnızca rakamlar, ülke koduyla (`905xxxxxxxxx`) |
| `email` | string veya null | E-posta |
| `description`, `message` | string veya null | Açıklama ve lead'in bıraktığı mesaj |
| `preferred_contact` | string veya null | Tercih edilen iletişim yolu. Serbest metindir |
| `source_page_url` | string veya null | Lead'in geldiği sayfa |
| `avatar_url` | string veya null | Profil fotoğrafının imzalı, geçici URL'si |
| `latest_conversation_id` | integer veya null | Yalnızca token'da `conversations:read` scope'u ve kullanıcıda `View:Conversation` izni varsa dolu gelir |
| `stage` | object | `id`, `name`, `color`, `is_won`, `is_lost` |
| `reference_source` | object veya null | `id`, `name`, `external_id` |
| `expected_value` | string | Beklenen değer, örneğin `"2000.00"` |
| `currency_id`, `exchange_rate` | integer / decimal | Para birimi ve klinik para birimine kur. Varsayılan kur `1` |
| `treatments` | array | `id`, `name`, `display_name`, `price`. Yalnızca tek lead yanıtlarında (`GET`, `POST`, `PUT`) |
| `assigned_user` | object veya null | `id`, `name` |
| `country_id`, `country_name` | integer / string | Ülke |
| `is_converted`, `converted_at` | boolean / datetime | Hastaya dönüşüm durumu ve zamanı |
| `won_at` | datetime veya null | Kazanıldı aşamasına girişte otomatik damgalanır, aşamadan çıkınca temizlenir |
| `lost_reason`, `lost_at`, `lost_by_user_id` | string / datetime / integer | Kayıp bilgileri. Kayıp aşamasından çıkınca temizlenir |
| `customer_id` | integer veya null | Lead'e bağlı kişi kaydı |
| `marketing_attribution` | object veya null | UTM ve reklam kaynağı verisi |
| `notification_channels` | object | Yalnızca `GET /leads/{id}` yanıtında: `default_channel_id`, `source`, `channels[]` |
| `import_source`, `integration_source` | object veya null | Lead'in içe aktarıldığı sistem veya yazan entegrasyon. Yalnızca tek lead yanıtlarında |
| `external_id`, `external_branch_id`, `external_created_at`, `last_synced_at`, `import_source_id` | çeşitli | İçe aktarma meta verisi |
| `created_at`, `updated_at`, `deleted_at` | datetime | Zaman damgaları |

<Note>
  Her lead'in arka planda bir kişi kaydı (`customer_id`) vardır. Lead hastaya dönüşene kadar bu kayıt hasta listelerinde görünmez ve `/customers` uç noktaları onu `404` ile reddeder. Aynı telefon numarasına sahip bir kişi kaydı varsa yeni lead onu kullanır, ikinci kayıt açmaz.
</Note>

## Listeleme ve filtreler

`GET /leads` yalnızca görebildiğiniz lead'leri döner. Silinmiş lead'ler listelenmez. Yanıt `{"data": [...], "links": {...}, "meta": {...}}` biçimindedir. Sayfalama (`per_page` 1–100, varsayılan 15; `page`) için [Sayfalama](/api/istekler/sayfalama), genel filtre ve sıralama kuralları için [Filtreleme ve sıralama](/api/istekler/filtreleme-ve-siralama) sayfalarına bakın.

| Parametre | Açıklama |
| - | - |
| `pipeline_stage_id` | Aşama kimliği. Klinike ait olmalı |
| `lead_reference_source_id` | Lead kaynağı kimliği |
| `assigned_user_id` | Tek kimlik ya da `assigned_user_id[]=1&assigned_user_id[]=2` dizisi, en fazla 100 kimlik. Klinik üyeleri ve kliniği bırakmış eski sahipler kabul edilir |
| `converted` | `true` dönüşmüş lead'leri, `false` dönüşmemişleri getirir. `false` kazanıldı ve kayıp lead'leri de kapsar |
| `active` | `true`: dönüşmemiş ve kazanıldı ya da kayıp aşamasında olmayan lead'ler. `false`: geri kalanlar |
| `search` | En fazla 255 karakter. Ad, soyad ve e-postada aksan ve büyük/küçük harf duyarsız alt dize araması yapar. Telefon, terimdeki rakamlarla eşleşir. En az 2 karakterlik bir kelime ya da en az 3 rakam yoksa sonuç dönmez |
| `created_at_from`, `created_at_to` | Oluşturulma tarihi aralığı. İki uç da dahildir; yalnızca tarih içeren `_to` o günün tamamını kapsar |
| `converted_at_from`, `converted_at_to` | Dönüşüm tarihi aralığı, aynı kurallarla |
| `sort_by` | `created_at` (varsayılan), `last_name`, `first_name`, `converted_at`, `last_synced_at`. Başka değer `422` döner |
| `sort_order` | `asc` veya `desc`. Yalnızca `sort_by` verirseniz ad alanları A'dan Z'ye, tarih alanları yeniden eskiye sıralanır. Hiçbiri verilmezse sıralama `created_at` azalan olur |

Atanmamış lead'leri süzen bir filtre yoktur.

Lead sayısını aşama bazında görmek için `GET /leads/pipeline-summary` kullanın. Yanıt `pipeline` (`id`, `name`) ile her aşama için `stage`, `count` ve `expected_value` değerlerini verir. Aktif pipeline yoksa `pipeline` `null`, `stages` boş döner. `GET /leads/stats` aktif, yeni, dönüşen lead sayılarını ve potansiyel değeri verir.

## Oluşturma

`POST /leads` hiçbir alanı zorunlu tutmaz. Boş gövdeyle de lead açılır, ancak gerçek kullanımda en az ad ve telefon gönderin.

| Alan | Açıklama |
| - | - |
| `first_name`, `last_name` | En fazla 255 karakter |
| `phone_number` | En fazla 50 karakter. Rakamlara ve ülke koduna normalize edilir (`0545 210 94 54` değeri `905452109454` olur). Kliniğin silinmemiş lead'leri arasında benzersiz olmalı |
| `email`, `description`, `message` | E-posta, açıklama, lead mesajı |
| `treatment_ids[]` | İlgilenilen tedaviler. Aktif, kliniğe ait ve tekrarsız olmalı |
| `expected_value` | 0 veya üstü. Göndermezseniz seçilen tedavilerin fiyat toplamı yazılır. Gönderirseniz sonradan tedaviler değişse bile korunur |
| `currency_id`, `exchange_rate` | Para birimi ve kur. `exchange_rate` 0 veya üstü, varsayılan 1 |
| `preferred_contact` | En fazla 50 karakter |
| `source_page_url` | URL, en fazla 2048 karakter |
| `pipeline_stage_id` | Aktif pipeline'a ait bir aşama. Göndermezseniz lead giriş aşamasına düşer |
| `lead_reference_source_id` | Lead kaynağı |
| `assigned_user_id` | Göndermek `Assign:Lead` izni ister. Kullanıcı `ReceiveLeads:Lead` iznine sahip olmalı ve `super_admin` rolünde olmamalı |
| `country_id`, `marketing_attribution` | Ülke ve nesne olarak pazarlama verisi |

<CodeGroup>
  ```bash curl theme={null}
  curl -X POST https://app.flextell.ai/api/v1/leads \
    -H "Authorization: Bearer <access_token>" \
    -H "X-Tenant: <tenant_id>" \
    -H "Content-Type: application/json" \
    -d '{
      "first_name": "Ayşe",
      "last_name": "Yılmaz",
      "phone_number": "+90 5xx xxx xx xx",
      "treatment_ids": [12],
      "lead_reference_source_id": 3
    }'
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch("https://app.flextell.ai/api/v1/leads", {
    method: "POST",
    headers: {
      Authorization: "Bearer <access_token>",
      "X-Tenant": "<tenant_id>",
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      first_name: "Ayşe",
      last_name: "Yılmaz",
      phone_number: "+90 5xx xxx xx xx",
      treatment_ids: [12],
      lead_reference_source_id: 3,
    }),
  });
  const { data: lead } = await response.json();
  ```
</CodeGroup>

Başarılı istek `201` ve `{"success": true, "data": {...}}` döner. Sahip belirleme şöyle çalışır:

* `assigned_user_id` göndermezseniz ve `Assign:Lead` izniniz yoksa (satış temsilcisi) ama `View:Lead` ile `ReceiveLeads:Lead` izinleriniz varsa lead size atanır.
* Yöneticinin sahipsiz bıraktığı lead'ler, kliniğin otomatik atama moduna göre dağıtılır. Mod **Manuel (otomatik atama yok)** ise lead atanmadan kalır. Bu davranış kliniğinizin ayarlarına göre değişir.
* Uygun temsilci yoksa ya da herkes aktif lead sınırındaysa lead atanmadan kalır ve `Assign:Lead` iznine sahip kullanıcılara bildirim gider. Atama hatası lead oluşturmayı engellemez.

## Aşama değiştirme

Tüm aşama değişiklikleri aynı kuralları izler:

* Hedef aşama aktif pipeline'a ait olmalı.
* Dönüşmüş lead'in aşaması değişmez (`LEAD_ALREADY_CONVERTED`).
* Kayıp aşamasına geçişte, aşama **Kayıp Sebebi Zorunlu** ise `lost_reason` gerekir. Varsayılan kayıp aşaması bunu ister. Eksikse `LEAD_LOST_REASON_REQUIRED` döner ve `errors.lost_reason` alanı dolar.
* Kayıp olmayan herhangi bir aşamaya geçmek `lost_reason`, `lost_at` ve `lost_by_user_id` değerlerini temizler. Kayıp lead'i yeniden açmanın yolu budur.
* Kazanıldı aşamasına girişte `won_at` damgalanır, çıkışta temizlenir.

### Tek lead

Üç yol vardır:

* `PUT /leads/{id}` gövdesine `pipeline_stage_id` ekleyin. Kayıp aşaması için `lost_reason` da gönderin.
* `POST /leads/{id}/won` lead'i aktif pipeline'ın kazanıldı aşamasına alır. Gövde gerekmez. Aktif pipeline'da kazanıldı aşaması yoksa `LEAD_NO_WON_STAGE` döner. Dönüşmüş lead için çağrı bir şeyi değiştirmez ve `200` döner.
* `POST /leads/{id}/lost` lead'i kayıp aşamasına alır ve gövdede `lost_reason` ister. Kayıp aşaması yoksa `LEAD_NO_LOST_STAGE` döner.

```bash theme={null}
curl -X POST https://app.flextell.ai/api/v1/leads/123/lost \
  -H "Authorization: Bearer <access_token>" \
  -H "X-Tenant: <tenant_id>" \
  -H "Content-Type: application/json" \
  -d '{"lost_reason": "Fiyatı yüksek buldu"}'
```

### Toplu aşama değiştirme

`POST /leads/bulk-stage` gövdesi `lead_ids[]`, `pipeline_stage_id` ve gerekirse `lost_reason` alanlarını taşır.

* Seçimde görebildiğiniz dönüşmüş bir lead varsa (`LEAD_ALREADY_CONVERTED`) ya da hedef aşama sebep isteyip `lost_reason` yoksa (`LEAD_LOST_REASON_REQUIRED`) isteğin tamamı reddedilir. Seçimde verisi imha edilmiş hastaya ait lead varsa istek `409 CUSTOMER_ERASED` ile reddedilir.
* Görmediğiniz veya güncelleme izniniz olmayan lead'ler sessizce atlanır.
* En fazla 200 kimlikte işlem hemen yapılır: `{"queued": false, "moved_count": 5}`.
* 200'den fazla kimlikte iş kuyruğa alınır: `{"queued": true, "lead_count": 250}`. İş bitince işlemi yapan kullanıcıya uygulama içi bildirim gider.

`POST /leads/move-stage-group` bir aşamadaki tüm lead'leri başka aşamaya taşır. Gövde `source_pipeline_stage_id` ve `target_pipeline_stage_id` (ikisi de aktif pipeline'da ve birbirinden farklı) ile gerekirse `lost_reason` içerir. İş her zaman kuyruğa alınır ve `{"queued": true}` döner. Kaynak aşamada görebildiğiniz dönüşmüş bir lead varsa istek `LEAD_ALREADY_CONVERTED` ile reddedilir. Görmediğiniz dönüşmüş lead'ler kaynak aşamada kalır.

## Atama ve toplu atama

Atanabilir kullanıcı, `ReceiveLeads:Lead` iznine sahip bir klinik üyesidir; `super_admin` rolü hariçtir. Aday listesi için `GET /leads/assignable-users` kullanın (`search`, `per_page`, `page`). Yalnızca aktif kullanıcılar gelir. `email` alanı yalnızca `Assign:Lead` iznine sahip çağıranlara döner.

### Tek lead atama

`POST /leads/{id}/assign` gövdesi:

| Alan | Zorunlu | Açıklama |
| - | - | - |
| `assigned_user_id` | Evet | Yeni sahip |
| `task_action` | Hayır | Lead'in açık görevlerine ne olacağı. `transfer` (varsayılan), `close`, `keep` |

| `task_action` | Sonuç |
| - | - |
| `transfer` | Açık görevler, lead notlarının ve kişi kaydına bağlı tekliflerin sahipliği yeni sahibe geçer. Her yeni görev sahibine bildirim gider |
| `close` | Açık görevler tamamlandı olarak kapatılır |
| `keep` | Açık görevler eski sahipte kalır ve `is_active=false` olur |

Yanıt `data` içinde `lead` ve `cap_exceeded` döner. Yeni sahip `AutoAssignLeads:Lead` iznine sahipse ve aktif lead sayısı sınırına ulaşmışsa `cap_exceeded` `true` olur. Atama yine de yapılır; sınır yalnızca otomatik atamayı engeller. Dönüşmüş lead atanamaz (`LEAD_ALREADY_CONVERTED`).

```bash theme={null}
curl -X POST https://app.flextell.ai/api/v1/leads/123/assign \
  -H "Authorization: Bearer <access_token>" \
  -H "X-Tenant: <tenant_id>" \
  -H "Content-Type: application/json" \
  -d '{"assigned_user_id": 45, "task_action": "transfer"}'
```

<Warning>
  `PUT /leads/{id}` ile `assigned_user_id` değiştirmek yalnızca sahibi değiştirir. Görev ve not devri yapmaz, sınır kontrolü uygulamaz. Alanı göndermek `Assign:Lead` izni ister. Devirli atama için `/assign` kullanın.
</Warning>

### Toplu atama

`POST /leads/bulk-assign` gövdesi `lead_ids[]`, `assignment_type` (`specific` veya `auto`) ve `task_action` alanlarını taşır.

* `specific`: `assigned_user_id` zorunludur ve kullanıcı `View:Lead` iznine sahip aktif bir klinik üyesi olmalı. Aksi halde `LEAD_ASSIGNEE_INVALID` döner. Dönüşmüş lead'ler, güncelleyemediğiniz lead'ler ve zaten bu kullanıcıda olanlar atlanır.
* `auto`: her lead, en az yüklü uygun temsilciye gider. Klinik modu **Manuel (otomatik atama yok)** ise dağıtım **Rastgele** moduyla aynı şekilde yapılır. Uygun temsilcisi olmayan lead'ler atlanır.
* En fazla 200 kimlikte yanıt `{"queued": false, "assigned_count": 8, "cap_exceeded_count": 1}` (`specific`) ya da `{"queued": false, "assigned_count": 8, "skipped_count": 2}` (`auto`) olur.
* 200'den fazla kimlikte iş kuyruğa alınır: `{"queued": true, "lead_count": 250}`. Bitince bildirim gelir.
* Seçimde verisi imha edilmiş hastaya ait lead varsa istek `409 CUSTOMER_ERASED` ile reddedilir.

Görevler toplu atamada her görev için ayrı değil, yeni sahip başına tek özet bildirimle (`Size 5 görev atandı`) iletilir.

## Dönüştürme

`POST /leads/{id}/convert` lead'i hastaya çevirir. Lead'in kazanıldı aşamasında olması gerekir; önce `/won` çağırın. Aksi halde `422 LEAD_NOT_CONVERTIBLE` döner. İki scope birden gerekir: `leads:write` ve `customers:write`. `Convert:Lead` izni hasta oluşturmayı da kapsar; ayrıca `Create:Customer` aranmaz.

Gövde tek isteğe bağlı alan taşır: `existing_customer_id`. Her API lead'inin kişi kaydı olduğu için bu alan yalnızca kişi kaydı olmayan (içe aktarılmış ya da eski) lead'lerde işe yarar.

```bash theme={null}
curl -X POST https://app.flextell.ai/api/v1/leads/123/convert \
  -H "Authorization: Bearer <access_token>" \
  -H "X-Tenant: <tenant_id>" \
  -H "Content-Type: application/json" \
  -d '{}'
```

Yanıt `data` içinde şunları döner:

| Alan | Açıklama |
| - | - |
| `result` | `created_new` yeni hasta oluşturuldu, `matched_existing` var olan hastaya bağlandı |
| `customer` | Hasta nesnesi. Alanlar için [Hastalar](/api/kaynaklar/hastalar) |
| `lead` | Güncel lead nesnesi |

Dönüşümün etkileri:

* Lead `converted_at` ve `converted_by_user_id` alanlarını alır, aşaması kazanıldı olur ve kayıp bilgileri temizlenir.
* Lead'in notları ve dosyaları hastaya kopyalanır. Görevler kopyalanmaz; hastanın görevleri arasında lead üzerinden görünür.
* İşlem tekrarlanabilir. Zaten dönüşmüş lead için aynı hasta `matched_existing` ile döner.
* Dönüşümü geri alan bir uç nokta yoktur.
* Satış temsilcisi rolündeki bir kullanıcı, `existing_customer_id` ile başka bir temsilcinin lead aşamasındaki kişi kaydını seçemez (`403 LEAD_NOT_ASSIGNED`).

Kliniğin otomatik dönüşüm modu, API çağrısı olmadan da dönüşüm başlatabilir. **Randevu oluşturulduğunda** modunda lead için randevu açılınca, **Satış oluşturulduğunda** modunda lead için satış açılınca lead hastaya çevrilir. Varsayılan mod **Yalnızca manuel**'dir.

<Warning>
  Lead hastaya dönüşmeden, lead'in kişi kaydı için satış, fatura veya hastaya ait finansal işlem oluşturulamaz. İstek `422 LEAD_FINANCIAL_BLOCKED` döner. Kliniğin dönüşüm modu **Satış oluşturulduğunda** ise satış bu kuralın dışındadır; lead önce otomatik dönüştürülür.
</Warning>

## Silme

`DELETE /leads/{id}` lead'i, notlarını, görevlerini ve dosyalarını siler. Lead dönüşmemişse arka plandaki kişi kaydı da silinir. Dönüşmüş lead'de hasta korunur ve lead görevleri hastaya geçer. Silmeden önce `GET /leads/{id}/deletion-relations` ile etkilenecek kayıtları görebilirsiniz. Kalıcı silme uç noktası yoktur. Yaşam döngüsü için [Silme yaşam döngüsü](/api/istekler/silme-yasam-dongusu) sayfasına bakın.

`POST /leads/bulk-delete` gövdesinde 1–100 benzersiz `lead_ids[]` alır, her lead'i tek tek işler ve kişi kayıtlarını silmez. Yanıt `success_count`, `failed_count` ve `results[]` döner. Her sonuç `lead_id`, `success` ile başarısızsa `error_code` ve `message` taşır.

## Hata kodları

Hata yanıtı `{"success": false, "error_code": "...", "message": "..."}` biçimindedir. Genel hata yapısı için [Hata kodları](/api/istekler/hata-kodlari) sayfasına bakın.

| Kod | HTTP | Ne zaman |
| - | - | - |
| `LEAD_NOT_ASSIGNED` | 403 | Lead başkasına atanmış ya da kimseye atanmamış ve `ViewAllLeads:Lead` izniniz yok. `data.assigned_user` sahibin `id` ve `name` değerlerini ya da `null` döner |
| `FORBIDDEN` | 403 | Token'da scope veya kullanıcıda izin eksik |
| `RESOURCE_NOT_FOUND` | 404 | Lead yok, silinmiş ya da başka klinikte. Toplu silmede görünmeyen lead de bu kodla raporlanır |
| `CUSTOMER_ERASED` | 409 | Lead'in hastasının verileri imha edilmiş; kayıt salt okunur |
| `LEAD_NOT_CONVERTIBLE` | 422 | Dönüştürülecek lead kazanıldı aşamasında değil |
| `LEAD_ALREADY_CONVERTED` | 422 | Dönüşmüş lead'de aşama değiştirme, kayıp işaretleme veya atama denendi |
| `LEAD_LOST_REASON_REQUIRED` | 422 | Sebep isteyen kayıp aşamasına `lost_reason` olmadan geçildi |
| `LEAD_NO_LOST_STAGE` | 422 | Aktif pipeline'da kayıp aşaması yok |
| `LEAD_NO_WON_STAGE` | 422 | Aktif pipeline'da kazanıldı aşaması yok |
| `LEAD_ASSIGNEE_INVALID` | 422 | Toplu atamada seçilen kullanıcıya lead atanamaz |
| `LEAD_FINANCIAL_BLOCKED` | 422 | Dönüşmemiş lead'in kişi kaydı için satış, fatura veya finansal işlem oluşturuldu |
| `VALIDATION_FAILED` | 422 | Geçersiz alan. Örneğin telefon başka bir lead'de kayıtlı, aşama aktif pipeline'a ait değil ya da `sort_by` geçersiz. Ayrıntı `errors` içindedir |

<Note>
  `VALIDATION_FAILED` yanıtlarında bazı mesajlar dilden bağımsız olarak İngilizce gelir. Örnekler: `You are not allowed to assign leads.` ve `The selected user cannot be assigned leads.`. Kodu ve `errors` alan adlarını esas alın, metni değil.
</Note>

İlgili sayfalar: [İzinler ve görünürlük](/api/izinler-ve-gorunurluk), [Satış temsilcileri](/api/kaynaklar/satis-temsilcileri), [Gelen lead webhook'u](/api/webhooklar/gelen-lead-webhooku).


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