Onay ve Bülten Uçları

Çerez onayı, pazarlama izni ve bülten kaydı

İzinle ilgili üç ayrı konu üç ayrı uçla yürür ve karıştırılmaması gerekir:

KonuUçKim çağırır
Çerez onayı: bir tarayıcının izleme kategorilerine verdiği cevapPOST ve DELETE /public/sites/:siteKey/consentTarayıcı (widget ya da kendi onay çözümünüz)
Pazarlama izni: bir adresin e-posta ya da SMS almayı kabul etmesi, sizin sunucunuzdanPOST /public/sites/:siteKey/contacts/consentSizin arka ucunuz, newsletter_subscribe anahtarıyla
Bülten kaydı: bir formdan gelen e-postaPOST /public/sites/:siteKey/newsletterBülten widget'ı ya da kendi formunuz

Çerez onayının panel tarafı ve tarayıcı API'si için Onay Yönetimi sayfasına bakın. Kimlik kuralları: Kimlik Doğrulama ve Erişim.

Kaydet

POST /api/v1/public/sites/:siteKey/consent
curl -X POST https://api.selwise.com/api/v1/public/sites/SITE_KEY/consent \
  -H "Content-Type: application/json" \
  -H "Origin: https://magaza.com" \
  -d '{
    "categories": { "necessary": true, "analytics": true, "marketing": false, "preferences": true },
    "visitorId": "VISITOR_ID",
    "sessionId": "SESSION_ID",
    "siteUserId": "MUSTERI-1001",
    "action": "accepted"
  }'
AlanZorunluAçıklama
categoriesEvetnecessary, analytics, marketing, preferences anahtarlarıyla bir nesne. Yalnızca true değerler izin sayılır; necessary her zaman true saklanır; nesnedeki başka anahtarlar yok sayılır. Nesne yoksa 400
visitorIdÖnerilirVerilmezse sunucu anon_... biçiminde rastgele bir kimlik üretir ve kayıt hiçbir ziyaretçiye bağlanamaz
sessionId, siteUserIdHayırBağlam
actionHayırKararın nereden geldiği; aşağıdaki tablo

action değeri, panelde Cookie Consent (Çerez Onayı) → Analytics içindeki Onay yöntemi dağılımını belirler:

actionPanelde sayıldığı yöntem
accepted, declinedBanner
customizedAyar ekranı
timeoutVarsayılan (süre doldu)
başka her değerProgramatik

categories içinde analytics, marketing ya da preferences'tan hiçbiri true değilse (ya da action declined ise) olay consent_declined, aksi hâlde consent_granted olarak yazılır. Her kayıt bir ConsentRecord satırı (yöntem, kategoriler, IP ve tarayıcı bilgisiyle) ve bir izleme olayı üretir.

Yanıt { "success": true }. Site bilinmiyor ya da doğrulanmamışsa HTTP 200 ve { "success": false, "error": "Site not verified" } döner. Bu uç hız sınırının dışındadır.

Geri çek

DELETE /api/v1/public/sites/:siteKey/consent
curl -X DELETE https://api.selwise.com/api/v1/public/sites/SITE_KEY/consent \
  -H "Content-Type: application/json" \
  -H "Origin: https://magaza.com" \
  -d '{ "visitorId": "VISITOR_ID" }'

visitorId ve siteUserId'den en az biri zorunludur; ikisi de yoksa 200 ve { "success": false, "error": "visitorId or siteUserId required" } döner. Çağrı, o ziyaretçinin (ve/veya müşterinin) tüm onay kayıtlarını geri çekilmiş işaretler (yalnızca necessary true), bir consent_withdrawn olayı yazar ve istemcinin yapması gereken temizliği söyler:

{
  "success": true,
  "message": "Consent withdrawn successfully",
  "clientAction": {
    "clearLocalStorage": true,
    "storageKey": "selwise_consent",
    "clearCookies": true,
    "cookiePattern": "_selwise_"
  }
}

storageKey, kanalın Cookie Consent → Policy ayarındaki saklama anahtarıdır (değiştirdiyseniz o). Sunucu tarayıcı depolamasına dokunamaz; bu temizliği çağıran taraf yapar. Widget'ın withdrawConsent() yöntemi bu çağrıyı ve temizliği birlikte yapar.

Pazarlama izni: contacts/consent

Bir alışverişçinin e-posta ya da SMS aboneliğini kendi sunucunuzdan açıp kapatmanın yoludur: hesabım sayfasındaki iletişim tercihleri, CRM, çağrı merkezi. Anahtar yalnızca newsletter_subscribe kapsamını taşımalı ve bu uç her zaman anahtar ister; tarayıcıdan çağrılmaz. Anahtarı Purpose olarak Consent sync seçerek oluşturun: API Anahtarları.

POST /api/v1/public/sites/:siteKey/contacts/consent
x-selwise-api-key: swpk_live_...
Content-Type: application/json
curl -X POST https://api.selwise.com/api/v1/public/sites/SITE_KEY/contacts/consent \
  -H "Content-Type: application/json" \
  -H "x-selwise-api-key: swpk_live_..." \
  -d '{
    "contacts": [
      { "kind": "email", "value": "musteri@ornek.com", "siteUserId": "MUSTERI-1001", "optIn": true, "note": "Hesabım > İletişim tercihleri" },
      { "kind": "phone", "value": "+905321112233", "optIn": true, "iys": "registered" },
      { "kind": "phone", "siteUserId": "MUSTERI-1001", "optIn": false }
    ]
  }'
AlanZorunluAçıklama
contactsEvetEn çok 500 kayıt
kindEvetemail veya phone
optInEvettrue izin verir, false geri çeker
valueKayıt bilinmiyorsaAdres ya da E.164 telefon; en çok 255 karakter. Hiç kaydı olmayan bir adrese izin vermek için zorunlu
siteUserIdHayırMüşteri kimliğiniz, en çok 64 karakter. value ile birlikte verilirse kayıt bu müşteriye bağlanır; tek başına verilirse karar müşterinin o türdeki tüm adreslerine uygulanır
iysHayırYalnızca telefon: numaranın İYS kaydı, registered veya rejected. Gönderirseniz izni İYS'ye kendiniz kaydetmişsiniz demektir; kanalda İYS entegrasyonu açık olsa da bu karar İYS'ye ayrıca bildirilmez
iysSourceHayırKanalda İYS entegrasyonu açıksa kararın İYS'ye hangi kaynakla bildirileceği: HS_FIZIKSEL_ORTAM, HS_ISLAK_IMZA, HS_WEB, HS_CAGRI_MERKEZI, HS_SOSYAL_MEDYA, HS_EPOSTA, HS_MESAJ, HS_MOBIL, HS_EORTAM, HS_ETKINLIK, HS_2015, HS_ATM. Verilmezse HS_WEB (uygulama kanalında HS_MOBIL)
noteHayırİznin kanıtı (alışverişçinin gördüğü metin); en çok 500 karakter. Yalnızca optIn: true için saklanır

Yanıt, her kayıt için ne olduğunu söyler:

{
  "success": true,
  "received": 3,
  "processed": 3,
  "results": [
    { "index": 0, "status": "resubscribed" },
    { "index": 1, "status": "subscribed" },
    { "index": 2, "status": "unsubscribed" }
  ]
}
statusAnlamı
subscribedİzin kaydedildi
resubscribedDaha önce aboneliğini iptal etmiş biri yeniden izin verdi
unsubscribedİzin geri çekildi
withdrawal_recordedHiç görülmemiş bir adres için ret kaydedildi; sonradan gelen bir toplu aktarım bu adresi aboneye çeviremez
unchangedKayıt zaten istenen durumdaydı
not_foundYalnızca siteUserId verildi ama bu müşterinin o türde kaydı yok; izin vermek için value gönderin
invalidAdres geçersiz
failedBu kayıt yazılamadı; diğerleri etkilenmez. Yeniden deneyin

processed, invalid, not_found ve failed dışındaki kayıt sayısıdır. Gövde sınıfla doğrulanır: bilinmeyen bir alan ya da 500'den fazla kayıt tüm isteği 400 yapar.

DurumNeden
401x-selwise-api-key başlığı hiç gönderilmemiş
403Anahtar geçersiz, iptal edilmiş ya da newsletter_subscribe kapsamı yok
404, 403Site anahtarı yok ya da kanal doğrulanmamış

Neden olay (event) ile değil

events/batch yalnızca her ziyaretçinin tarayıcısında duran site anahtarıyla çalışır. Aboneliği değiştiren bir olay, herkesin herkesi abone yapabilmesi demek olurdu. Sitenizdeki bir abonelik düğmesi Selwise'a kendi sunucunuz üzerinden, bu uçla ulaşmalıdır. Bülten widget'ı ve sipariş sırasındaki izin kutusu (orders gövdesindeki marketingConsent) ayrı yollardır ve aboneliğini iptal etmiş birini yeniden abone yapmaz; bunu yalnızca bu uç, paneldeki kişi ekranı ve e-postadaki yeniden abone ol bağlantısı yapar.

Bülten kaydı: newsletter

POST /api/v1/public/sites/:siteKey/newsletter

Bülten widget'ının gönderdiği kayıt; kendi formunuzdan da çağırabilirsiniz. Alan adı doğrulaması (ya da anahtar) ister, dakikada 20 istekle sınırlıdır.

curl -X POST https://api.selwise.com/api/v1/public/sites/SITE_KEY/newsletter \
  -H "Content-Type: application/json" \
  -H "Origin: https://magaza.com" \
  -d '{
    "email": "musteri@ornek.com",
    "fullName": "Ayşe Yılmaz",
    "channels": ["email", "sms"],
    "phone": "+905321112233",
    "locale": "tr",
    "visitorId": "VISITOR_ID",
    "siteUserId": "MUSTERI-1001",
    "sourcePath": "/kampanya",
    "utmSource": "instagram",
    "utmMedium": "story",
    "utmCampaign": "bahar",
    "honeypot": ""
  }'
AlanZorunluAçıklama
emailEvetGeçerli adres, en çok 255 karakter
channelsHayıremail ve/veya sms. Verilmezse yalnızca e-posta. E-posta her durumda kaydedilir; sms listedeyse telefon da kaydedilir
phonechannels içinde sms varsaE.164 biçiminde (+905321112233), en çok 32 karakter. Geçersizse hiçbir şey kaydedilmez ve 400 döner
fullNameHayırEn çok 255 karakter
localeHayıren veya tr
visitorId, siteUserIdHayırvisitorId en çok 120, siteUserId en çok 255 karakter. Müşteri kimliğiniz kişi kaydına bağlanır
sourcePath, referrer, utmSource, utmMedium, utmCampaignHayırKaynak bilgisi (500, 1000, 120, 120, 160 karaktere kadar). referrer yoksa Referer başlığı kullanılır
honeypotHayırBoş kalmalıdır. Dolu gelen istek bot sayılır ve sessizce başarılı yanıtlanır, hiçbir şey kaydedilmez

Yanıt { "success": true }. Aynı adresin tekrar kaydı atıf bilgisini yeniler ama aboneliğini iptal etmiş birini yeniden abone yapmaz.

DurumNeden
400email geçersiz, sms istendi ve phone geçersiz, ya da bilinmeyen alan; ya da Unknown site
429Dakikada 20 istek aşıldı

Selwise'in kendi bülteni değil

/public/newsletter ve /public/newsletter/confirm (siteKey'siz) Selwise'in kendi tanıtım sitesinin bültenidir; sizin kanalınızla ilgisi yoktur ve entegrasyon sözleşmesine dahil değildir.

Sırada ne var

  • Onay Yönetimi — tarayıcı API'si ve banner
  • Kişiler — kaydedilen izinler panelde nasıl görünür
  • İYS — Türkiye'de ticari ileti izni

Son güncelleme: 10 Ekim 2026