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

# Kaydet-ve-sürdür taslakları ile 10DLC kayıt sihirbazı

> TCR markanızı ve kampanyanızı Orbit sihirbazı üzerinden kaydedin: oturumlar arasında kısmi taslaklar kaydedin, tek sahibi (sole-proprietor) telefonunu OTP ile doğrulayın, kaydedilen taslağı ön kontrolden geçirin ve atomik olarak gönderin.

# 10DLC Kayıt Sihirbazı

Sihirbaz, [TCR marka ve kampanya kaydını](/guides/10dlc-registration) tamamlamanın önerilen yoludur. Doğrusal tek seferlik akışı rehberli, sürdürülebilir bir sürece dönüştürür:

* **Kaydet ve sürdür** — taslağınız oturumlar, sekmeler ve haftalar arasında kalır. Sekmeyi kapatın veya yarın geri dönün; kaldığınız yerden devam edersiniz.
* **Adımlar arasında doğrusal olmayan şekilde hareket edin** — sihirbaz `brand`, `campaign` ve `review` adımlarını bağımsız olarak takip eder. Marka bölümü hâlâ eksikken kampanya örneklerini doldurun, ilerleme yükü iki sayımı da korur.
* **Ödemeden önce doğrulayın** — her kayıtta alan başına doğrulama çalışır ve gönderim öncesi bir lint turu, yukarı akış kayıt ücreti ödenmeden önce kaydedilen taslağı bilinen TCR reddetme kalıplarına karşı puanlar.

<Note>
  Sihirbaz yalnızca organizasyonunuzun kendi taslak deposuna yazar. Hiçbir mesaj trafiğini tutmaz, kapıda bekletmez veya yönlendirmez.
</Note>

Tüm sihirbaz uç noktaları `/api/v1/compliance/10dlc/wizard` altında yaşar. Tam olarak [marka ve kampanya uç noktalarında](/guides/10dlc-registration) olduğu gibi API anahtarınızla kimlik doğrulayın.

## Roller ve oran sınırları

* Okumalar (`GET /wizard`, `GET /wizard/draft`) — organizasyondaki her doğrulanmış rol.
* Yazmalar (`PUT /wizard/draft`, `DELETE /wizard/draft`, `POST /wizard/phone/send`, `POST /wizard/phone/confirm`, `POST /wizard/preflight`, `POST /wizard/submit`) — sahip veya admin rolü.
* Yazma profili: dakikada 10 istek, eski brand/campaign uç noktalarıyla eşleşir. Sihirbaz ön kontrolü: dakikada 30 istek, isteğe bağlı ön kontrol uç noktasıyla eşleşir.

***

## GET `/10dlc/wizard` — ilerleme yükü

Panelin "Kaldığınız yerden devam edin" şeridine dayanak olarak kullandığı hesaplanmış ilerleme nesnesini döndürür. Her zaman `200 OK` — yeni bir organizasyon, `state: "not_started"` ile boş-taslak şeklini alır.

```bash theme={null}
curl https://api.orbit.devotel.io/api/v1/compliance/10dlc/wizard \
  -H "X-API-Key: dv_live_sk_your_key_here"
```

**Yanıt:**

```json theme={null}
{
  "data": {
    "state": "in_progress",
    "current_step": "campaign",
    "brand": {
      "completed_fields": 10,
      "total_fields": 10,
      "missing_fields": []
    },
    "campaign": {
      "completed_fields": 4,
      "total_fields": 6,
      "missing_fields": ["message_flow", "optout_message"]
    },
    "next_action": "fill_campaign"
  },
  "meta": {
    "request_id": "req_wiz001",
    "timestamp": "2026-09-02T10:00:00Z"
  }
}
```

`state`, `not_started`, `in_progress`, `brand_pending`, `campaign_pending`, `ready` veya `rejected` değerlerinden biridir. `current_step`, `brand`, `campaign` veya `review` değerlerinden biridir. `next_action`, makine tarafından okunabilir bir ipucudur: `fill_brand`, `fill_campaign`, `review_and_submit`, `amend_brand`, `amend_campaign` veya `done`. Marka veya kampanya gönderildiğinde, yanıt ayrıca `brand_id`, `campaign_id` ve herhangi bir yukarı akış reddetme nedenini taşır.

`GET /10dlc/wizard/draft`, form ön doldurması için tam kaydedilen taslağı (marka alanları, kampanya alanları, geçerli adım) döndürür.

***

## PUT `/10dlc/wizard/draft` — kısmi kaydet

Marka ve/veya kampanya alanlarının herhangi bir alt kümesini kaydeder. Her alan isteğe bağlıdır — yalnızca gönderdiğiniz alanları doğrularsınız ve geri kalanlar önceden kaydedilmiş değerlerini korur. `current_step` ayrı olarak güncellenir, böylece bir devam doğru ekrana iner.

```bash theme={null}
curl -X PUT https://api.orbit.devotel.io/api/v1/compliance/10dlc/wizard/draft \
  -H "X-API-Key: dv_live_sk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "brand": {
      "entity_type": "PRIVATE_PROFIT",
      "display_name": "Acme Corp",
      "company_name": "Acme Corporation Inc.",
      "email": "compliance@acme.com"
    },
    "current_step": "brand"
  }'
```

Doğrulamada başarısız olan bir kayıt `422` döndürür ve kalıcı taslak dokunulmadan bırakır — önceden kaydedilen durum hayatta kalır.

**Marka alanları:** `entity_type`, `display_name`, `company_name`, `ein`, `phone`, `street`, `city`, `state`, `postal_code`, `country`, `email`, `website`, `vertical`.

**Kampanya alanları:** `usecase`, `description` (40–4096 karakter), `sample_message` (1–10 mesaj), `message_flow` (en az 40 karakter), `help_message` (en az 20), `optout_message` (en az 20), `is_political`, `cv_token`.

<Tip>
  İsterseniz her zorunlu alandan sonra kaydedin — her kayıt bir yazma-oran tokeninden daha az maliyete sahiptir ve taslak güvenlik ağıdır. Kampanyanın `brand_id` alanı asla elle yazılmaz: sihirbaz onu marka gönderim sonucundan doldurur.
</Tip>

***

## Tek sahibi (sole-proprietor) telefon doğrulaması (OTP)

`entity_type: "SOLE_PROPRIETOR"` olan ABD markaları — ve yalnızca bunlar — bir EIN yerine doğrulanmış bir mobil numarayı koyar: TCR, sole-proprietor kimliğini, kaydedicinin kontrolünü kanıtladığı bir telefon numarasına bağlar. Diğer her ABD varlık türü bunun yerine bir EIN göndermek zorundadır.

Göndermeden önce numarayı doğrulayın:

```bash theme={null}
# 1. Doğrulama kodunu taslağın brand.phone alanına gönderin
curl -X POST https://api.orbit.devotel.io/api/v1/compliance/10dlc/wizard/phone/send \
  -H "X-API-Key: dv_live_sk_your_key_here"
```

**Yanıt:**

```json theme={null}
{
  "data": {
    "verification_id": "vf_abc123",
    "status": "pending",
    "channel": "sms",
    "expires_at": "2026-09-02T10:10:00Z"
  },
  "meta": {
    "request_id": "req_wiz002",
    "timestamp": "2026-09-02T10:00:00Z"
  }
}
```

```bash theme={null}
# 2. SMS'ten gelen kodu onaylayın
curl -X POST https://api.orbit.devotel.io/api/v1/compliance/10dlc/wizard/phone/confirm \
  -H "X-API-Key: dv_live_sk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"code": "483921"}'
```

**Yanıt:**

```json theme={null}
{
  "data": {
    "status": "verified",
    "phone": "+14155551234",
    "verified_at": "2026-09-02T10:04:12Z"
  },
  "meta": {
    "request_id": "req_wiz003",
    "timestamp": "2026-09-02T10:04:12Z"
  }
}
```

Kanıt, taslak üzerinde kaydedilen tam telefon dizgisine bağlanır. Doğruladıktan sonra `brand.phone` alanını düzenlerseniz, eski kanıt artık sayılmaz ve yeni numaraya karşı yeni bir doğrulama kodu çalıştırana kadar gönderim `422` ile başarısız olur. Zaten doğrulanmış bir numarada `/phone/send` çağırmak `409 ALREADY_VERIFIED` döndürür; bekleyen bir doğrulama kodu olmadan `/phone/confirm` çağırmak `404` döndürür.

***

## POST `/10dlc/wizard/preflight` — kaydedilen taslağı lintten geçir

**Kalıcı sihirbaz taslağını** bilinen TCR reddetme kalıbı kataloğuna karşı puanlar, böylece "Gözden geçir ve gönder" ekranı, göndermek üzere olduğu tam taslağa karşı bulgular görür — el yapımı bir yükü lintlediğinde isteğe bağlı [preflight uç noktasının](/guides/10dlc-registration#gonderinizi-on-kontrolden-gecirin) sahip olduğu lint sürüklenmesi olasılığı olmaz.

İstek gövdesi isteğe bağlıdır: `expected_msg_per_day_per_number` (kapasite-katmanı kuralı için) ve zaten sahip olduğunuz zaman `brand_vetting_score` (0–100).

```bash theme={null}
curl -X POST https://api.orbit.devotel.io/api/v1/compliance/10dlc/wizard/preflight \
  -H "X-API-Key: dv_live_sk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{}'
```

Yanıt şekli — `score`, `verdict`, `findings[]` — [kayıt sayfasındaki preflight linter'ı](/guides/10dlc-registration#10dlc-linteri-neyi-kontrol-eder) ile aynıdır. O uç noktada olduğu gibi, bir `pass` kararı "bilinen reddetme kalıbı eşleşmedi" demektir, "TCR onaylayacak" değil.

***

## POST `/10dlc/wizard/submit` — atomik marka + kampanya

Taslağın tamamını doğrular, ardından markayı ve kampanyayı tek çağrıda gönderir. Marka denetimi genellikle 1–48 saat içinde sonuçlanır; kampanya hemen ardından gelir.

```bash theme={null}
curl -X POST https://api.orbit.devotel.io/api/v1/compliance/10dlc/wizard/submit \
  -H "X-API-Key: dv_live_sk_your_key_here"
```

**Yanıt (`201 Created`):**

```json theme={null}
{
  "data": {
    "state": "brand_pending",
    "current_step": "review",
    "brand_id": "BXXXXXX",
    "campaign_id": "CXXXXXX",
    "next_action": "done"
  },
  "meta": {
    "request_id": "req_wiz004",
    "timestamp": "2026-09-02T10:05:00Z"
  }
}
```

Doğrulama hataları, herhangi bir ücret ödenmeden `422` döndürür ve `details.section`, eksik veya geçersiz alanların `brand` mı yoksa `campaign` mi bölümünde olduğunu size söyler.

**Başarısızlık semantiği — atomik koruma:**

* **Marka yukarı akışta reddedildi** — hiçbir kampanya gönderilmez. Taslak, marka reddetme nedeni damgalanmış şekilde korunur ve `next_action` `amend_brand` konumuna döner. Marka alanlarını düzeltin ve yeniden gönderin.
* **Kampanya yukarı akışta reddedildi** — kabul edilen `brand_id` kalıcı olur, state `brand_pending` olarak kalır ve kampanya reddetme nedeni damgalanır. Bir yeniden gönderim marka aşamasını tamamen atlar, böylece marka ücreti asla yeniden tahsil edilmez; yalnızca kampanya tekrar öder.
* **Yukarı akış 5xx veya sağlayıcı kullanılamıyor** — taslak aynen korunur ve olduğu gibi yeniden deneyebilirsiniz.

Hem marka hem de kampanya operatör incelemesinden `APPROVED` döndüğünde, state `ready` konumuna geçer.

***

## DELETE `/10dlc/wizard/draft` — sıfırla

```bash theme={null}
curl -X DELETE https://api.orbit.devotel.io/api/v1/compliance/10dlc/wizard/draft \
  -H "X-API-Key: dv_live_sk_your_key_here"
```

`204 No Content` döndürür. Sihirbazı boş taslağa (`state: "not_started"`) sıfırlar. Dosyadaki onaylanmış marka veya kampanya kimliklerini **silmez** — yalnızca sihirbash çalışma durumunu sıfırlar, dolayısıyla onay sonrası temizlik veya bir "baştan başla" olarak güvenlidir.

***

## Tam yaşam döngüsü sırası

1. `PUT /10dlc/wizard/draft` — marka + kampanyayı aşamalı olarak doldurun.
2. `(yalnızca SOLE_PROPRIETOR)` `POST /10dlc/wizard/phone/send` → `POST /10dlc/wizard/phone/confirm`.
3. `POST /10dlc/wizard/preflight` — karar geçene kadar bulguları düzeltin.
4. `POST /10dlc/wizard/submit` — atomik gönderim.
5. `GET /10dlc/wizard` — `ready` olana kadar durumu yoklayın (veya operatör başına harita için `GET /10dlc/campaigns/:id/status`, [kayıt sayfasındaki](/guides/10dlc-registration#adim-3-onayi-bekleyin) gibi).
6. `DELETE /10dlc/wizard/draft` — isteğe bağlı onay sonrası temizlik.

<Warning>
  Eski tek seferlik uç noktalar (`POST /10dlc/brand`, `POST /10dlc/campaign`) betikleştirilmiş iş akışları için kullanılabilir durumda kalır. Sihirbaz önerilen operatör akışıdır; doğrudan uç noktalar tek istekte tamamen dolu bir yük talep eder.
</Warning>
