Adapty Mail API aracılığıyla e-posta ve işlem gönderme

Adapty Mail API, kullanıcı profillerini ve işlemleri Adapty SDK üzerinden yönlendirmeye gerek kalmadan doğrudan sunucunuzdan Adapty Mail’e göndermenizi sağlar. Şu durumlarda kullanabilirsiniz:

  • Adapty Mail’de henüz bir tabanınız yokken abone ekleyin.
  • Diğer uygulamalarınızdaki abone tabanını yeniden kullanın.
  • Adapty Mail’i sunucudan sunucuya besleyin; arka ucunuz gerçeğin kaynağı olsun.
Note

API mı yoksa SDK mı? Çoğu uygulama, e-postaları ve satın almaları otomatik olarak toplayan Adapty SDK’sı aracılığıyla Adapty Mail’e veri gönderir — bkz. Adapty’yi Adapty Mail’e Bağlama. Uygulamanızda Adapty SDK yoksa, veriler zaten sunucunuzda bulunuyorsa veya başka bir kaynaktan aboneleri içe aktarıyorsanız API’yi tercih edin. API’yi başka bir giriş noktasıyla birlikte de kullanabilirsiniz. Adapty Mail, kişileri e-posta adresine göre eşleştirir. Aynı adresi bildiren iki kaynak tek bir profilde birleşir; customer_user_id aynı olsa bile iki farklı adres ayrı profiller oluşturur.

Başlamadan önce

Warning

Veri göndermeden önce Adapty Mail kurulumunu tamamlayın — bu, bir kampanya, segment (gerekiyorsa), web paywall ve başlatılmış bir flow anlamına gelir. Adapty Mail, yalnızca bu kurulum tamamlandıktan sonra oluşturulan profillere e-posta gönderir; daha önce gönderdiğiniz profiller hiçbir e-posta almaz. Önce Adapty Mail ile başlarken adımlarını takip edin, ardından buraya dönün.

API anahtarınıza ve temel URL’nize de ihtiyacınız olacak:

  • Gizli API anahtarı: Adapty Mail’de Settings > Project sayfasına gidin ve Secret key’i kopyalayın. Anahtar projeye özgüdür; bu sayede API hangi projeye ait olduğunu bilir.
  • Temel URL: Tüm istekler https://api-mail.adapty.io adresine gönderilir.
  • Kimlik doğrulama: Anahtarı Authorization başlığında Bearer {your_secret_api_key} formatında gönderin.
Important

E-posta toplamadan ve Adapty Mail’e göndermeden önce kullanıcılardan açık onay alın. GDPR, CAN-SPAM ve faaliyet gösterdiğiniz pazarlardaki benzer düzenlemelere uyum sağlamaktan siz sorumlusunuz.

Kullanıcı profilleri gönderme

Profil, kullanıcının e-posta adresini ve özelliklerini içerir. Profil oluşturmak veya güncellemek için /api/v1/profile/save/ adresine POST isteği gönderin.

Üç alan zorunludur:

  • Uygulamanıza veya backend’inize ait sabit bir external_profile_id
  • Adapty Mail’in kampanyaları iletmek için kullandığı email
  • external_created_at — segment’lerde kullanabileceğiniz kullanıcı oluşturma zamanı
Important

Her zaman sabit bir external_profile_id gönderin; anonim veya kuruluma özel bir değer kullanmayın. Adapty Mail, e-postaları, tıklamaları ve satın almaları tek bir profile bağlamak için bu alanı kullanır.

Aynı kişi başka bir giriş noktası üzerinden de Adapty Mail’e ulaşıyorsa, customer_user_id gönderin — kaynağın gönderdiği kullanıcı kimliğinin aynısı. Adapty SDK için bu, Adapty.identify() fonksiyonuna ilettiğiniz değerdir; FunnelFox ise kendi tuttuğu değeri gönderir. Bu, hangi profile yönlendirileceğini belirlemez; bunu e-posta adresi yapar. Eklediği şey, profili bulmanın ikinci bir yoludur: bunu taşıyan bir işlem olayı, e-posta olmadan da çözümlenir ve silme işleminde adres yerine bu kimlik belirtilebilir.

curl --request POST \
  --url 'https://api-mail.adapty.io/api/v1/profile/save/' \
  --header 'Authorization: Bearer {your_secret_api_key}' \
  --header 'Content-Type: application/json' \
  --data '{
    "external_profile_id": "user_12345",
    "external_created_at": "2026-06-01T10:30:00Z",
    "email": "jane@example.com",
    "country": "US",
    "custom_attributes": {
      "plan": "trial"
    }
  }'
Note

country ve store_country iki harfli ISO 3166-1 alpha-2 kodu alır — USA veya United States değil, US. Bunun dışındaki her değer reddedilir.

device_info kullanıcının cihazını tanımlar. Bu nesne isteğe bağlıdır, ancak gönderdiğinizde platform alanı mutlaka bulunmalıdır.

Alanİsteğe BağlıSegment filtresiNotlar
platformHayırEvet
deviceEvetEvetCihaz modeli.
osEvetEvet
localeEvetEvet
app_versionEvetEvetSürüm sırasına göre karşılaştırılır; örneğin 1.10.0, 1.9.0’ın üzerinde yer alır.
timezoneEvetHayırKullanıcının e-posta alacağı zamanı belirler. Belirtilmezse Adapty Mail kullanıcıyı UTC olarak kabul eder; bu nedenle 08:00–21:00 gönderim penceresi kendi saat dilimleri yerine UTC’ye göre uygulanır.

Mevcut tüm alanlar için Profil kaydetme referansına bakın.

İşlem olaylarını gönder

Note

never purchased flow’unda kullanıcılara ulaşmak için e-posta içeren bir profil yeterlidir. Diğer tüm flow’lardaki kullanıcılar için işlem olayları da gereklidir.

never purchased dışındaki tüm flow’lar satın alma geçmişiyle çalışır. Satın alma, yenileme ve iptalleri işlerken profil işlem olaylarını gönderin; böylece Adapty Mail kullanıcıyı doğru flow’a yerleştirebilir. İşlem olayları aynı zamanda gelir attribution’ını da destekler. Yalnızca never purchased kampanyaları yürütüyorsanız bu adımı atlayabilirsiniz.

Bir işlemi kaydetmek için /api/v1/profile/transaction-event/save/ adresine POST isteği gönderin. Adapty Mail’in işlemi doğru kullanıcıyla ilişkilendirebilmesi için profille birlikte gönderdiğiniz external_profile_id değerini kullanın.

curl --request POST \
  --url 'https://api-mail.adapty.io/api/v1/profile/transaction-event/save/' \
  --header 'Authorization: Bearer {your_secret_api_key}' \
  --header 'Content-Type: application/json' \
  --data '{
    "event_type": "subscription_started",
    "event_id": "evt_abc123",
    "event_datetime": "2026-06-10T14:20:05Z",
    "external_profile_id": "user_12345",
    "store": "app_store",
    "store_product_id": "premium_monthly",
    "store_transaction_id": "1000000123456789",
    "store_original_transaction_id": "1000000123456789",
    "purchased_at": "2026-06-10T14:20:00Z",
    "originally_purchased_at": "2026-06-10T14:20:00Z",
    "price_usd": "9.99"
  }'

Save transaction event referansına her mevcut alan için bakın.

Bir profil oluşturulmadan önce transaction gönderebilirsiniz. Adapty Mail, etkinliği bağlanmamış olarak saklar ve ardından aynı external_profile_id’yi içeren bir sonraki kaydetme işleminde onu profile bağlar.

Bir profili silme

Silinme hakkı talebini yerine getirmek için profilin tanımlayıcılarını /api/v1/profile/delete/ adresine gönderin. Adapty Mail, profilin kişisel verilerini siler ve zamanlanmış e-postalarını iptal eder.

curl --request POST \
  --url 'https://api-mail.adapty.io/api/v1/profile/delete/' \
  --header 'Authorization: Bearer {your_secret_api_key}' \
  --header 'Content-Type: application/json' \
  --data '{
    "external_profile_id": "user_12345"
  }'

external_profile_id, customer_user_id veya email ile profili tanımlayın — en az birini gönderin. Adapty Mail, saklanan verileri temizler ancak adresi engellemez: bir kaynak aynı adresi tekrar gönderirse, geçmişi olmayan yeni bir profil oluşur. Birinin kalıcı olarak dışarıda kalmasını istiyorsanız, kaynağın verilerini göndermesini durdurun.

Zaman aşımına uğrayan bir silme isteği, işlemin gerçekleşip gerçekleşmediğini belirsiz bırakır; bu yüzden isteği tekrar gönderirsiniz. external_profile_id veya customer_user_id ile profili tanımladığınızda bu ikinci çağrı güvenlidir — başarılı olur ve hiçbir şeyi değiştirmez. Yalnızca email içeren ikinci bir çağrı ise 404 döndürür; çünkü ilk silme işlemi eşleştireceği adresi temizlemiştir. Profili sil referansı, yanıt kodlarını listeler.

Olaylarınızı flow’larla eşleştirin

Yaşanan olayı temsil eden event_type değerini gönderin. Adapty Mail, profilin durumunu olay geçmişinden çıkarır ve onu uygun flow’a yönlendirir.

event_typeNe zaman gönderilirFlow
subscription_startedBir kullanıcı yeni bir abonelik başlattığında.Aktif — yeniden etkileşim flow’u yok
subscription_renewedBir abonelik otomatik olarak yenilendiğinde.Aktif — yeniden etkileşim flow’u yok
subscription_renewal_reactivatedBir kullanıcı otomatik yenilemeyi yeniden açtığında.Aktif — yeniden etkileşim flow’u yok
non_subscription_purchaseBir kullanıcı tek seferlik satın alma yaptığında.Aktif — yeniden etkileşim flow’u yok
subscription_renewal_cancelledBir kullanıcı otomatik yenilemeyi kapattığında (süre dolana kadar hâlâ aktif).Yenileme iptal edildi
billing_issue_detectedYenileme ödemesi başarısız olduğunda.Ödeme sorunu
entered_grace_periodÖdeme başarısız olsa da kullanıcı hâlâ ek süre içindeyken.Ödeme sorunu
subscription_expiredAbonelik sona erip erişim bittiğinde.Süresi doldu
subscription_refundedBir abonelik satın alımı iade edildiğinde.İade edildi
non_subscription_purchase_refundedTek seferlik satın alma iade edildiğinde.İade edildi