Webhook olay türleri ve alanları
Adapty, abonelik olaylarına yanıt olarak webhook’lar gönderir. Bu bölümde bu olay türleri ve her webhook’ta yer alan veriler tanımlanmaktadır.
Webhook olay türleri
Tüm olay türlerini webhook’unuza gönderebilir ya da yalnızca bir kısmını seçebilirsiniz. Hangi tür verilerin geleceğini ve bunların etrafında iş mantığınızı nasıl oluşturacağınızı öğrenmek için Event flows sayfamıza göz atabilirsiniz. İhtiyaç duymadığınız olay türlerini, Webhook entegrasyonunu kurma adımında devre dışı bırakabilirsiniz. Aynı yerden, gerekirse Adapty’nin varsayılan olay kimliklerini kendi olay kimliklerinizle de değiştirebilirsiniz.
| Olay adı | Açıklama |
|---|---|
| subscription_started | Kullanıcı deneme süresi olmadan ücretli bir abonelik başlattığında, yani anında faturalandırıldığında tetiklenir. |
| subscription_active | subscription_started olayının ardından aboneliğin hâlâ aktif olduğunu doğrular. Aboneliğin başlangıcı ile bu kontrol arasındaki gün sayısını ayarlamanız gerekir. Abonelik hâlâ aktifse (kullanıcı ek süreye girmiş olsa bile) olay gelir. O zamana kadar abonelik sona erdiyse veya kullanıcı otomatik yenilemeyi kapattıysa hiçbir şey gelmez ve Adapty tekrar kontrol etmez. Bu olay yalnızca deneme süresi olmadan satın alınan abonelikleri takip eder. Deneme sürümünden dönüşüm trial_converted olayını gönderir ve bu olay söz konusu kontrolü başlatmaz. |
| subscription_renewed | Abonelik yenilendiğinde ve kullanıcı faturalandırıldığında gerçekleşir. Bu olay, deneme sürümlü ya da deneme sürümsüz aboneliklerde ikinci faturalandırmadan itibaren başlar. |
| subscription_renewal_cancelled | Kullanıcı abonelik otomatik yenilemeyi kapattı. Kullanıcı, ücretli abonelik dönemi sona erene kadar premium özelliklere erişimini korur. |
| subscription_renewal_reactivated | Kullanıcı abonelik otomatik yenilemeyi yeniden etkinleştirdiğinde tetiklenir. |
| subscription_expired | İptal edilen bir abonelik tamamen sona erdiğinde tetiklenir. Örneğin, kullanıcı 12 Aralık’ta aboneliğini iptal edip abonelik 31 Aralık’a kadar aktif kalıyorsa, olay 31 Aralık’ta abonelik sona erdiğinde kaydedilir. |
| subscription_paused | Kullanıcı abonelik duraklatma özelliğini etkinleştirdiğinde gerçekleşir (yalnızca Android). |
| subscription_deferred | Bir abonelik satın alma işlemi ertelendiğinde tetiklenir; bu sayede kullanıcılar premium özelliklere erişimlerini sürdürürken ödemeyi geciktirebilir. Bu özellik Google Play Developer API aracılığıyla kullanılabilir ve ücretsiz denemeler için ya da finansal güçlük yaşayan kullanıcılara destek sağlamak amacıyla kullanılabilir. |
| non_subscription_purchase | Süresiz erişim veya oyun içi para birimi gibi consumable ürünler dahil olmak üzere abonelik dışı tüm satın almalar. |
| trial_started | Kullanıcı deneme sürümü aboneliği başlattığında tetiklenir. |
| trial_active | trial_started olayının ardından denemenin hâlâ aktif olduğunu doğrular. Denemenin başlangıcı ile bu kontrol arasındaki gün sayısını ayarlamanız gerekir. Deneme hâlâ devam ediyorsa olay gelir. O zamana kadar deneme sona erdiyse veya dönüştüyse ya da kullanıcı otomatik yenilemeyi kapattıysa hiçbir şey gelmez ve Adapty tekrar kontrol etmez. |
| trial_converted | Deneme süresi sona erip kullanıcı faturalandırıldığında (ilk satın alma) gerçekleşir. Örneğin, kullanıcının denemesi 14 Ocak’a kadar sürüyorsa ancak 7 Ocak’ta faturalandırıldıysa bu olay 7 Ocak’ta kaydedilir. |
| trial_renewal_cancelled | Kullanıcı deneme süresi boyunca abonelik otomatik yenilemeyi kapattı. Kullanıcı deneme süresi sona erene kadar premium özelliklere erişimini korur ancak faturalandırılmaz ve abonelik başlamaz. |
| trial_renewal_reactivated | Kullanıcı deneme süresi boyunca abonelik otomatik yenilemeyi yeniden etkinleştirdiğinde gerçekleşir. |
| trial_expired | Deneme süresi aboneliğe dönüşmeden sona erdiğinde tetiklenir. |
| entered_grace_period | Ödeme girişimi başarısız olduğunda ve kullanıcı ek süreye girdiğinde (etkinleştirilmişse) gerçekleşir. Kullanıcı bu süre boyunca premium erişimini korur. |
| billing_issue_detected | Ödeme girişimi sırasında bir faturalama sorunu oluştuğunda (örneğin yetersiz kart bakiyesi) tetiklenir. |
| subscription_refunded | Abonelik iade edildiğinde (örneğin Apple Destek tarafından) tetiklenir. |
| non_subscription_purchase_refunded | Abonelik dışı bir satın alma iade edildiğinde tetiklenir. |
| access_level_updated | Kullanıcının access level’ı güncellendiğinde gerçekleşir. |
subscription_renewal_reactivated olayı, kullanıcının aboneliği iptal ettiği sırada aktif olan önceki ürün kimliğini taşır; kullanıcı daha sonra farklı bir ürün satın alarak aboneliği yeniden etkinleştirmiş olsa bile bu böyledir. Apple, iptal → yeniden etkinleştirme zinciri boyunca aynı original_transaction_id’yi kullandığından bu olay orijinal ürünü yansıtır. Yeni ürün, yeni ürüne ait faturalandırma başladığında gerçekleşen bir sonraki subscription_renewed olayında görünür.
Google Play’de Adapty, tüm parasal alanları sıfır olarak ayarlanmış bir subscription_started eventi gönderebilir — örneğin, Google bir aboneliği başka bir abonelikle değiştirdiğinde veya abonelik ücretsiz bir aşamayla başladığında. Bu tür eventleri gelir olarak saymayın. Google bir aboneliği değiştirdiğinde yeni bir satın alma token’ı oluşturur; bu nedenle Adapty, ücretli işlemi farklı bir store_transaction_id altında raporlar.
Webhook etkinlik yapısı
Adapty, yalnızca Integrations -> Webhooks sayfasının Events names bölümünde seçtiğiniz etkinlikleri size gönderir.
Webhook olayları JSON formatında serileştirilir. Sunucunuza gönderilen POST isteğinin gövdesi, aşağıdaki yapıya sarmalanmış serileştirilmiş olayı içerir. Tüm olaylar aynı yapıyı izler, ancak alanlar olay türüne, mağazaya ve özel yapılandırmanıza göre farklılık gösterir. Kullanıcı özellikleri, ayarladığınız özel kullanıcı özellikleridir, dolayısıyla yapılandırdığınız içerikleri barındırır. Attribution verisi alanları da tüm olay türleri için aynıdır; ancak attribution listesi, mobil uygulamanızda kullandığınız attribution kaynaklarına göre değişir. Aşağıda bir olay örneği görebilirsiniz:
{
"profile_id": "00000000-0000-0000-0000-000000000000",
"customer_user_id": "UserIdInYourSystem",
"idfv": "00000000-0000-0000-0000-000000000000",
"idfa": "00000000-0000-0000-0000-000000000000",
"advertising_id": "00000000-0000-0000-0000-000000000000",
"profile_install_datetime": "2000-01-31T00:00:00.000000+0000",
"user_agent": "ExampleUserAgent/1.0 (Device; OS Version) Browser/Engine",
"email": "john.doe@company.com",
"event_type": "subscription_started",
"event_datetime": "2000-01-31T00:00:00.000000+0000",
"event_properties": {
"store": "play_store",
"currency": "USD",
"price_usd": 4.99,
"profile_id": "00000000-0000-0000-0000-000000000000",
"cohort_name": "All Users",
"environment": "Production",
"price_local": 4.99,
"original_price_usd": 4.99,
"original_price_local": 4.99,
"discount_amount_usd": 0,
"discount_amount_local": 0,
"base_plan_id": "b1",
"developer_id": "onboarding_placement",
"ab_test_name": "onboarding_ab_test",
"ab_test_revision": 1,
"paywall_name": "UsedPaywall",
"proceeds_usd": 4.2315,
"variation_id": "00000000-0000-0000-0000-000000000000",
"purchase_date": "2024-11-15T10:45:36.181000+0000",
"store_country": "AR",
"event_datetime": "2000-01-31T00:00:00.000000+0000",
"proceeds_local": 4.2415,
"tax_amount_usd": 0,
"transaction_id": "0000000000000000",
"net_revenue_usd": 4.2415,
"profile_country": "AR",
"paywall_revision": "1",
"profile_event_id": "00000000-0000-0000-0000-000000000000",
"tax_amount_local": 0,
"net_revenue_local": 4.2415,
"vendor_product_id": "onemonth_no_trial",
"profile_ip_address": "10.10.1.1",
"consecutive_payments": 1,
"rate_after_first_year": false,
"original_purchase_date": "2000-01-31T00:00:00.000000+0000",
"original_transaction_id": "0000000000000000",
"subscription_expires_at": "2000-01-31T00:00:00.000000+0000",
"profile_has_access_level": true,
"profile_total_revenue_usd": 4.99,
"promotional_offer_id": null,
"store_offer_category": null,
"store_offer_discount_type": null
},
"event_api_version": 1,
"profiles_sharing_access_level": [{"profile_id": "00000000-0000-0000-0000-000000000000", "customer_user_id": "UserIdInYourSystem"}],
"attributions": {
"appsflyer": {
"ad_set": "Keywords 1.12",
"status": "non_organic",
"channel": "Google Ads",
"ad_group": null,
"campaign": "Social media influencers - Rest of the world",
"creative": null,
"created_at": "2000-01-31T00:00:00.000000+0000"
}
},
"user_attributes": {"Favourite_color": "Violet", "Pet_name": "Fluffy"},
"integration_ids": {"firebase_app_instance_id": "val1", "branch_id": "val2", "one_signal_player_id": "val3"},
"play_store_purchase_token": {
"product_id": "product_123",
"purchase_token": "token_abc_123",
"is_subscription": true
}
}
Etkinlik alanları
Etkinlik parametreleri tüm etkinlik türleri için aynıdır.
| Alan | Tür | Açıklama |
|---|---|---|
| advertising_id | UUID | Reklam kimliği (yalnızca Android). |
| attributions | JSON | Attribution verisi. Webhook ayarları’nda Send Attribution etkinleştirilmişse eklenir. |
| customer_user_id | String | Kullanıcıları tanımlarken uygulama kodunuzda ayarladıysanız uygulamanızdaki kullanıcı kimliği (UUID, e-posta veya başka bir kimlik). Kullanıcıları uygulama kodunda tanımlamıyorsanız ya da bu kullanıcı anonimse (oturum açmamışsa) bu alan null olur. |
| String | Adapty SDK’daki updateProfile metodunu kullanarak veya sunucu taraflı API aracılığıyla profil oluştururken/güncellerken ayarladıysanız kullanıcının e-postası. email değerini SDK veya API metoduna geçirmiyorsanız bu alan null olur. | |
| event_api_version | Integer | Adapty API sürümü (güncel: 1). |
| event_datetime | ISO 8601 | Etkinliğin gerçekleşme (iş) zamanı; örneğin bir satın alma için satın alma tarihi, sona erme için son kullanma tarihi — Adapty’nin etkinliği aldığı veya gönderdiği zaman değil. ISO 8601 formatı (ör. 2020-07-10T15:00:00.000000+0000). Sıralama hakkında aşağıdaki nota bakın. |
| event_properties | JSON | Etkinlik özellikleri. |
| event_type | String | Adapty formatındaki etkinlik adı. Tam liste için Webhook etkinlik türleri’ne bakın. |
| idfa | UUID | Reklam kimliği (yalnızca Apple). Adapty Kontrol Paneli’ndeki profilde IDFA. İzleme kısıtlamaları, çocuk modu veya gizlilik ayarları nedeniyle kullanılamıyorsa null olabilir. |
| idfv | UUID | Geliştirici başına benzersiz Vendor Tanımlayıcısı (IDFV). Adapty Kontrol Paneli’ndeki profilde IDFV. |
| integration_ids | JSON | Adapty SDK’daki setIntegrationIdentifier metodunu kullanarak veya sunucu taraflı API aracılığıyla profil oluştururken/güncellerken ayarladıysanız kullanıcı entegrasyon kimlikleri. Kullanılamıyorsa veya entegrasyonlar devre dışıysa null. |
| play_store_purchase_token | JSON | Play Store satın alma token’ı; Webhook ayarları’nda Send Play Store purchase token etkinleştirilmişse eklenir. |
| profile_id | UUID | Adapty’nin her profil için otomatik olarak oluşturduğu profil kimliği. Kullanıcıları tanımlamıyorsanız veya giriş öncesi satın almalara izin veriyorsanız, bir Apple/Google kimliği farklı profil kimlikleriyle ilişkilendirilebilir. Adapty’nin üst/devralınan profillerle çalışma şekli hakkında daha fazla bilgi edinin. |
| profile_install_datetime | ISO 8601 | ISO 8601 formatında kurulum zaman damgası (ör. 2020-07-10T15:00:00.000000+0000). |
| profiles_sharing_access_level | JSON | Mevcut kullanıcı profili hariç access level’ı paylaşan kullanıcıların listesi. Uygulamanız için access level paylaşımı etkinleştirilmişse bu liste, aynı Apple/Google kimliğiyle kullanılmış diğer profilleri içerir. Format:
|
| user_agent | String | Cihaz tarayıcısı user-agent bilgisi. |
| user_attributes | JSON | Kullanıcı profillerini uygulamaya özgü bilgilerle zenginleştirmek için ayarlayabileceğiniz özel veriler. Genellikle kullanıcı tercihlerini (ör. tema, dil) veya davranış bayraklarını (onboarding tamamlandı, özellik kullanımı) takip etmek için kullanılır. Anahtarların string, değerlerin ise string veya sayı olduğu anahtar-değer çiftleri şeklinde biçimlendirilir (ör. {"Favourite_color": "Violet", "Pet_name": "Fluffy"}). Özel nitelikleri Adapty Kontrol Paneli’nde bireysel profiller için elle, Adapty SDK’daki updateProfile metodunu kullanarak programatik olarak ya da profil oluştururken/güncellerken sunucu taraflı API aracılığıyla ayarlayabilirsiniz. Webhook ayarları’nda Send User Attributes etkinleştirilmişse eklenir. Mobil uygulama kodundaki özel nitelik değerleri float veya string olarak ayarlanabilse de sunucu taraflı API veya geçmiş içe aktarma yoluyla alınan nitelikler farklı formatlarda gelebilir. Bu durumda boolean ve integer değerler float’a dönüştürülür. |
event_datetime, bir etkinliğin abonelik yaşam döngüsünde ne zaman gerçekleştiğini yansıtır; Adapty’nin bunu ne zaman işlediğini veya ilettiğini değil. Bu nedenle, etkinlikler aynı event_datetime değerini paylaşabilir ya da kronolojik sıradan farklı bir sırada gelebilir. Örneğin, bir subscription_expired etkinliği, Adapty’nin daha önce ilettiği bir subscription_renewal_cancelled etkinliğinden daha erken bir event_datetime taşıyabilir. Etkinlikleri sıralamak için event_datetime değerine güvenmeyin. Bunun yerine, etkinlikleri kendi alım zamanınıza göre sıralayın ve profile_event_id ya da işlem kimliklerini kullanarak tekrar edenleri temizleyin.
Attributions
Attribution verilerini göndermek için Integrations -> Webhooks sayfasında Send Attribution seçeneğini etkinleştirin. Attribution verilerini göndermeyi etkinleştirdiyseniz ve attribution entegrasyonları kurduysanız, aşağıdaki veriler her kaynak için etkinlikle birlikte gönderilir. Aynı attribution verileri tüm etkinlik türlerine gönderilir.
{
"attributions": {
"appsflyer": {
"ad_set": "sample_ad_set_123",
"status": "non_organic",
"channel": "sample_channel",
"ad_group": "sample_ad_group_456",
"campaign": "sample_ios_campaign",
"creative": "sample_creative_789",
"created_at": "2000-01-31T00:00:00.000000+0000",
"network_user_id": "0000000000000-0000000"
}
}
}
| Alan adı | Alan türü | Açıklama |
|---|---|---|
| ad_set | String | Attribution reklam seti. |
| status | String | organic, non_organic, veya unknown olabilir. |
| channel | String | Pazarlama kanalı adı. |
| ad_group | String | Attribution reklam grubu. |
| campaign | String | Pazarlama kampanyası adı. |
| creative | String | Attribution yaratıcı anahtar kelimesi. |
| created_at | ISO 8601 date | Attribution kaydının oluşturulma tarihi ve saati. |
| network_user_id | String | Attribution kaynağının kullanıcıya atadığı ID. |
Entegrasyon ID’leri
Aşağıdaki entegrasyon ID’leri olaylarda kullanılmaktadır:
adjust_device_idairbridge_device_idamplitude_device_idamplitude_user_idappmetrica_device_idappmetrica_profile_idappsflyer_idbranch_idfacebook_anonymous_idfirebase_app_instance_idmixpanel_user_idpushwoosh_hwidone_signal_player_idone_signal_subscription_idtenjin_analytics_installation_idposthog_distinct_user_idsingular_sdid
Play Store satın alma token’ı
Bu alan, gerektiğinde bir satın almayı yeniden doğrulamak için gereken tüm verileri içerir. Yalnızca Webhook entegrasyon ayarlarında Send Play Store purchase token seçeneği etkinleştirilmişse gönderilir.
| Alan | Tür | Açıklama |
|---|---|---|
| product_id | String | Play Store’da satın alınan ürünün benzersiz tanımlayıcısı (SKU). |
| purchase_token | String | Google Play tarafından bu satın alma işlemini benzersiz şekilde tanımlamak için oluşturulan token. |
| is_subscription | Boolean | Satın alınan ürünün bir abonelik (true) mi yoksa tek seferlik satın alma (false) mı olduğunu belirtir. |
Etkinlik özellikleri
Etkinlik özellikleri, etkinlik türüne ve hatta aynı türdeki etkinlikler arasında bile farklılık gösterebilir. Örneğin, App Store’dan gelen bir etkinlik, base_plan_id gibi Android’e özgü özellikleri içermez.
Access Level Updated olayının kendine özgü özellikleri bulunduğundan, bu olay için ayrı bir bölüm hazırladık. Benzer şekilde, yalnızca belirli olay türlerine özgü oldukları için Ek vergi ve gelir olayı özellikleri de ayrı bir bölümde ele alınmaktadır.
Çoğu olay türü için
Access Level Updated eventi dışındaki çoğu olay türü için olay özellikleri tutarlıdır (bu olay kendi bölümünde açıklanmaktadır). Aşağıda özellikleri öne çıkaran ve bunların belirli olaylara ait olup olmadığını gösteren kapsamlı bir tablo yer almaktadır.
Adapty, diğer para birimlerini USD’ye currencylayer.com döviz kuru üzerinden çevirir (her 8 saatte bir güncellenir). Kur, işlem anında sabitlenir — sonraki değişiklikler dönüşüm sonucunu etkilemez.
| Alan | Tür | Açıklama |
|---|---|---|
| ab_test_name | String | İşlemin kaynaklandığı Adapty A/B testinin adı. |
| ab_test_revision | Integer | İşlemin kaynaklandığı A/B testinin revizyonu. |
| base_plan_id | String | Google Play Store’daki temel plan kimliği veya Stripe’taki fiyat kimliği. |
| cancellation_reason | String | Olası iptal nedenleri: Şu olay türlerinde bulunur: subscription_cancelled, subscription_refunded ve trial_cancelled. |
| cohort_name | String | Kullanıcıya hangi paywall’ın gösterileceğini belirleyen kitlenin adı. |
| consecutive_payments | Integer | Kullanıcının kesintisiz abonelik sürdürdüğü dönem sayısı. Mevcut dönemi de içerir. |
| currency | String | Yerel para birimi. Send trial price etkinleştirilmedikçe trial_started olayında null olur. Bkz. Ek vergi ve gelir olay özellikleri. |
| developer_id | String | İşlemin kaynaklandığı placement’ın kimliği. |
| discount_amount_local | Float | İşleme uygulanan indirim: Apple/Google payı düşülmeden önceki standart fiyat ile gerçekte tahsil edilen tutar arasındaki fark; yerel para birimi cinsinden. Tam fiyatlı alışverişlerde 0. Ücretsiz deneme süresinde hiçbir şey tahsil edilmediğinden standart fiyatın tamamına (original_price_local) eşittir. Bir teklif uygulandığında standart fiyat bilinmiyorsa null döner (bkz. original_price_local). App Store ön ödeme teklifleri için her zaman nulldır: tek seferlik ön ödeme birden fazla fatura dönemini kapsadığından dönem başı standart fiyatla karşılaştırma yapılamaz. |
| discount_amount_usd | Float | discount_amount_local değerinin USD cinsinden karşılığı. |
| environment | String | Olası değerler: Sandbox veya Production. |
| event_datetime | ISO 8601 date | Olayın tarihi ve saati. Olayın kök düzeyindekiyle aynıdır. |
| original_price_local | Float | Ürünün Apple/Google payı düşülmeden önceki standart, indirimsiz fiyatı; yerel para birimi cinsinden. Abonelikler için bu, yenileme fiyatıdır. Tam fiyatlı alışverişlerde price_local ile eşittir; tek seferlik satın almalarda mağazalar ayrı bir standart fiyat raporlamadığından her zaman price_locala eşittir. Mağazanın güvenilir bir standart fiyat raporlamadığı indirimli alışverişlerde null döner (örneğin otomatik yenileme kapalıysa, yenileme hâlâ bir teklif içeriyorsa veya ürün değişikliği beklemedeyse). |
| original_price_usd | Float | original_price_local ile aynı, USD cinsinden. |
| original_purchase_date | ISO 8601 date | Yinelenen aboneliklerde orijinal satın alma, zincirdeki ilk işlemdir; orijinal işlem kimliği olarak adlandırılan bu kimlik yenileme zincirini birbirine bağlar; sonraki işlemler bunun devamı niteliğindedir. Orijinal satın alma tarihi, bu ilk işlemin tarih ve saatidir. |
| original_transaction_id | String | Yinelenen aboneliklerde bu, yenileme zincirini birbirine bağlayan orijinal işlem kimliğidir. Orijinal işlem zincirin ilkidir; sonraki işlemler bunun uzantısıdır. Uzantı yoksa |
| paywall_name | String | İşlemin kaynaklandığı paywall’ın adı. |
| paywall_revision | String | İşlemin kaynaklandığı paywall’ın revizyonu. Varsayılan değer 1’dir. |
| price_local | Float | Apple/Google payı düşülmeden önce işlem için tahsil edilen tutar; yerel para birimi cinsinden. Send trial price etkinleştirilmedikçe trial_started olayında hiçbir şey tahsil edilmediğinden null olur. |
| price_usd | Float | Apple/Google payı düşülmeden önce işlem için tahsil edilen tutar; USD cinsinden. Send trial price etkinleştirilmedikçe trial_started olayında hiçbir şey tahsil edilmediğinden null olur. |
| profile_country | String | Adapty tarafından profil IP’sine göre belirlenir. |
| profile_event_id | UUID | Tekilleştirme için kullanılabilecek benzersiz olay kimliği. |
| profile_has_access_level | Boolean | Profilin aktif bir access level’a sahip olup olmadığını gösteren boolean değer. |
| profile_id | UUID | Adapty tarafından oluşturulan profil kimliği. Olayın kök düzeyindekiyle aynıdır. |
| profile_ip_address | String | Profil IP’si (IPv4 veya IPv6 olabilir; mevcut olduğunda IPv4 tercih edilir). Uygulama ayarlarında Collect users’ IP addresses devre dışı bırakılmışsa null olur. |
| profile_total_revenue_usd | Float | İadeler düşülmüş, profile ait toplam gelir; USD cinsinden. |
| promotional_offer_id | String | Kullanılan promosyon teklifinin Adapty kimliği. Bu kimliği kontrol panelinde teklif oluştururken siz belirlersiniz. |
| purchase_date | ISO 8601 date | Ürün satın alma tarihi ve saati. |
| rate_after_first_year | Boolean | Aboneliğin bir yıllık kesintisiz yenilemeden sonra indirimli komisyon oranına (genellikle %15) hak kazandığını gösteren boolean değer. Komisyon oranları, program uygunluğuna ve ülkeye göre değişir. Ayrıntılar için bkz. Mağaza komisyonu ve vergiler. |
| store | String | Ürünün satın alındığı mağaza. Standart değerler: app_store, play_store, stripe, paddle. Sunucu tarafı API’sini kullanarak özel mağaza işlemleri ayarladıysanız store parametresindeki değer kullanılır. |
| store_country | String | Uygulama mağazası tarafından bize gönderilen ülke bilgisi. |
| store_offer_category | String | Uygulanan teklif kategorisi. Olası değerler: introductory, promotional, winback. |
| store_offer_discount_type | String | Uygulanan teklif türü. Olası değerler: free_trial, pay_as_you_go ve pay_up_front. |
| store_offer_number_of_periods | Integer | Bir teklifin indirim uyguladığı temel fatura dönemi sayısı (1 veya daha fazla). Yalnızca bir teklif uygulandığında bulunur. App Store ön ödeme teklifleri için ve mağaza teklif süresini raporlamadığında null olur. |
| subscription_expires_at | ISO 8601 date | Aboneliğin sona erme tarihi. İade, faturalama sorunu, ek süre ve access level olaylarında iptal tarihini ya da varsa ek sürenin bitiş tarihini içerir. Satın alma ve yenileme olaylarında ise normal abonelik sona erme tarihini içerir. |
| transaction_id | String | Bir işlem için benzersiz tanımlayıcı. |
| trial_duration | String | Deneme süresinin gün cinsinden uzunluğu. ” days” biçiminde gönderilir; örneğin “7 days”. Yalnızca denemeyle ilgili olay türlerinde bulunur: trial_started, trial_converted, trial_cancelled. |
| variation_id | UUID | Satın almanın gerçekleştiği paywall’ın benzersiz kimliği. |
| vendor_product_id | String | Apple App Store, Google Play Store veya Stripe’taki ürün kimliği. 12 aylık taahhüt planı için değer Erişim gerçek bir mağaza işlemi olmadan verilmişse
|
Vergi ve gelir olayı için ek özellikler
Aşağıdaki vergi ve gelirle ilgili olay özellikleri, yalnızca belirli olay türleri için geçerli olan ek alanlardır. Bu, listelenen olay türlerinin Çoğu olay türü için olay özellikleri alanlarını ve aşağıda listelenen ek alanları içerdiği anlamına gelir.
Vergi ve gelir olay özelliklerine sahip olay türleri:
subscription_renewedsubscription_initial_purchase(aynı zamandasubscription_startedolarak da anılır — aynı event)subscription_refundednon_subscription_purchasenon_subscription_purchase_refundedtrial_startedtrial_converted
| Alan | Tür | Açıklama |
|---|---|---|
| net_revenue_local | Float | Yerel para biriminde net gelir (Apple/Google payı ve vergiler düşüldükten sonraki gelir). |
| net_revenue_usd | Float | USD cinsinden net gelir (Apple/Google payı ve vergiler düşüldükten sonraki gelir). |
| proceeds_local | Float | Apple/Google payı düşüldükten sonra price_local. |
| proceeds_usd | Float | Apple/Google payı düşüldükten sonra price_usd. |
| tax_amount_local | Float | price_local içinde yer alan tahmini vergi. Kullanıcı vergi ödemiş olsa bile Stripe ve Paddle için 0. |
| tax_amount_usd | Float | price_usd içinde yer alan tahmini vergi. Kullanıcı vergi ödemiş olsa bile Stripe ve Paddle için 0. |
Net gelir için doğrudan net_revenue_* kullanın. tax_amount_* değeri 0 olmadıkça, proceeds_* eksi tax_amount_* daha küçük bir miktar verir. Örneğin, 12 fiyat, %30 komisyon ve %20 vergi oranıyla Adapty şu hesabı yapar:
proceeds_*=price_*× (1 − komisyon) = 12 × 0.7 = 8.40tax_amount_*=price_*× vergi oranı ÷ (1 + vergi oranı) = 12 × 0.2 ÷ 1.2 = 2.00net_revenue_*=proceeds_*÷ (1 + vergi oranı) = 8.40 ÷ 1.2 = 7.00
Ücretsiz deneme herhangi bir ücret içermez; bu nedenle trial_started olayında fiyat alanları (price_*, proceeds_*, net_revenue_*, tax_amount_*) ve currency varsayılan olarak null değerini alır. Bu değerleri almak için webhook ayarları bölümünden Send trial price seçeneğini etkinleştirin. Adapty bu değerleri, abonelik fiyatını Trial price percentage ile çarparak hesaplar ve currency değerini gönderir. Bu değerler bir ücretlendirmeyi değil, aboneliği tanımladığından trial_started olayını gelir toplamlarına dahil etmeyin.
non_subscription_purchase örnek payload’ı
non_subscription_purchase abonelik etkinlikleriyle aynı yapıyı izler, ancak tek seferlik veya consumable satın alımları yansıtır. Yalnızca aboneliğe özgü alanlar geçerli değildir: cancellation_reason, will_renew, is_in_grace_period, is_refund, is_lifetime ve trial_duration alanları bulunmaz. subscription_expires_at mevcut olmakla birlikte null değerini alır. Vergi ve gelir alanları (net_revenue_*, proceeds_*, tax_amount_*) dahil edilir.
Örnek payload (genişletmek için tıklayın)
{
"profile_id": "00000000-0000-0000-0000-000000000000",
"customer_user_id": "UserIdInYourSystem",
"event_type": "non_subscription_purchase",
"event_datetime": "2000-01-31T00:00:00.000000+0000",
"event_properties": {
"store": "app_store",
"currency": "USD",
"price_usd": 4.99,
"price_local": 4.99,
"original_price_usd": 4.99,
"original_price_local": 4.99,
"discount_amount_usd": 0,
"discount_amount_local": 0,
"proceeds_usd": 4.2415,
"proceeds_local": 4.2415,
"net_revenue_usd": 4.2415,
"net_revenue_local": 4.2415,
"tax_amount_usd": 0,
"tax_amount_local": 0,
"profile_id": "00000000-0000-0000-0000-000000000000",
"environment": "Production",
"vendor_product_id": "100coins",
"transaction_id": "0000000000000000",
"original_transaction_id": "0000000000000000",
"purchase_date": "2024-11-15T10:45:36.181000+0000",
"original_purchase_date": "2024-11-15T10:45:36.181000+0000",
"subscription_expires_at": null,
"store_country": "US",
"profile_country": "US",
"profile_ip_address": "10.10.1.1",
"profile_has_access_level": false,
"profile_total_revenue_usd": 4.99,
"consecutive_payments": 1,
"rate_after_first_year": false,
"profile_event_id": "00000000-0000-0000-0000-000000000000"
},
"event_api_version": 1
} Access Level Updated eventi için
Access Level Updated eventi, yalnızca Webhook entegrasyonu etkin olduğunda ve bu event türü etkinleştirildiğinde oluşturulan özel bir webhook eventidir. Etkinleştirilmişse, yapılandırılmış Webhook’a gönderilir ve Event Feed’de görünür. Etkinleştirilmemişse event oluşturulmaz.
Access level paylaşımını etkinleştirdiyseniz, access level updated eventi, access level’ı paylaşan tüm profiller için gönderilir.
Bu etkinliği kullanarak veritabanınızdaki kullanıcının access level’ını güncelleyebilir, backend’inizde premium özellikleri etkinleştirip devre dışı bırakabilir ve erişimi cihazlar veya platformlar arasında senkronize tutabilirsiniz.
| Özellik | Tür | Açıklama |
|---|---|---|
| ab_test_name | String | İşlemin gerçekleştiği A/B testinin adı. |
| access_level_id | String | Access level’ın ID’si. |
| activated_at | ISO 8601 date | Erişimin en son etkinleştirildiği tarih ve saat. |
| active_introductory_offer_type | String | Uygulanan başlangıç teklifinin türü. Olası değerler: free_trial, pay_as_you_go ve pay_up_front. |
| active_promotional_offer_id | String | Adapty Kontrol Paneli’ndeki Ürün bölümünde belirtilen promosyon teklifinin ID’si. |
| active_promotional_offer_type | String | Uygulanan promosyon teklifinin türü. Olası değerler: free_trial, pay_as_you_go ve pay_up_front. |
| base_plan_id | String | Google Play Store’daki temel plan ID’si veya Stripe’taki fiyat ID’si. |
| billing_issue_detected_at | ISO 8601 date | Faturalama sorununun tarih ve saati. |
| cancellation_reason | String | Olası iptal nedenleri: voluntarily_cancelled, billing_error, price_increase, product_was_not_available, refund, cancelled_by_developer, new_subscription_replace, upgraded, unknown, adapty_revoked. |
| cohort_name | String | Profilin ait olduğu kitlenin adı. |
| currency | String | Yerel para birimi (varsayılan: USD). |
| developer_id | String | İşlemin gerçekleştiği placement’ın ID’si. |
| environment | String | Olası değerler: Sandbox veya Production. |
| event_datetime | ISO 8601 date | Etkinliğin tarih ve saati. |
| expires_at | ISO 8601 date | Erişimin sona erdiği tarih ve saat. Adapty, Ek süre boyunca ek sürenin bitiş zamanını; iade veya iptal sonrasında ise iptal tarihini tutar. Ek süre bitişi için ayrı bir alan yoktur. |
| is_active | Boolean | Access level’ın etkin olup olmadığını gösteren boolean. Etkinlik oluşturulduğunda expires_at (ayrıca starts_at ve is_lifetime ile birlikte) üzerinden hesaplanır. |
| is_in_grace_period | Boolean | Profilin ek sürede olup olmadığını gösteren boolean. true iken expires_at, ek sürenin bitiş zamanını tutar. |
| is_lifetime | Boolean | Access level’ın süresiz olup olmadığını gösteren boolean. |
| is_refund | Boolean | İşlemin iade olup olmadığını gösteren boolean. |
| original_purchase_date | ISO 8601 date | Yinelenen abonelikler için orijinal satın alma, zincirdeki ilk işlemdir; orijinal işlem ID’si adı verilen bu ID, yenilemeler zincirini birbirine bağlar; sonraki işlemler bunun uzantısıdır. Orijinal satın alma tarihi, bu ilk işlemin tarih ve saatidir. |
| original_transaction_id | String | Yinelenen abonelikler için bu, yenilemeler zincirini birbirine bağlayan orijinal işlem ID’sidir. Orijinal işlem zincirdeki ilk işlemdir; sonraki işlemler bunun uzantısıdır. Uzantı yoksa |
| paywall_name | String | İşlemin gerçekleştiği paywall’ın adı. |
| paywall_revision | String | İşlemin gerçekleştiği paywall’ın revizyonu. Varsayılan değer 1’dir. |
| profile_country | String | Adapty tarafından profil IP’sine göre belirlenir. |
| profile_event_id | UUID | Yinelenen kayıtları önlemek için kullanılabilecek benzersiz etkinlik ID’si. |
| profile_has_access_level | Boolean | Profilin etkin bir access level’a sahip olup olmadığını gösteren boolean. |
| profile_id | UUID | Adapty dahili kullanıcı profil ID’si. |
| profile_ip_address | String | Profil IP’si (IPv4 veya IPv6 olabilir; mevcut olduğunda IPv4 tercih edilir). Uygulama ayarlarında Collect users’ IP addresses devre dışıysa null. |
| profile_total_revenue_usd | Float | İadeler dahil profilin toplam geliri. |
| purchase_date | ISO 8601 date | Ürünün satın alındığı tarih ve saat. |
| renewed_at | ISO 8601 date | Mevcut ücretli erişim döneminin en son başladığı tarih ve saat. İlk yenilemeden önce activated_at ile aynı değeri taşır. |
| starts_at | ISO 8601 date | Access level’ın başladığı tarih ve saat. |
| store | String | Ürünün satın alındığı mağaza. Standart değerler: app_store, play_store, stripe, paddle. Sunucu taraflı API aracılığıyla özel mağaza işlemleri ayarladıysanız store parametresindeki değer kullanılır. |
| store_country | String | Uygulama mağazası tarafından Adapty’ye gönderilen ülke. |
| subscription_expires_at | ISO 8601 date | Aboneliğin sona erme tarihi. Bu etkinlikte expires_at ile aynı değeri taşır: ek süre boyunca ek sürenin sonu; iade veya iptal sonrasında iptal tarihi. |
| transaction_id | String | Bir işlem için benzersiz tanımlayıcı. |
| trial_duration | String | Deneme süresinin gün cinsinden uzunluğu (örneğin, “7 days”). |
| variation_id | UUID | Satın almaları bu paywall’a atfetmek için kullanılan varyant tanımlayıcısı. |
| vendor_product_id | String | Mağazadaki (Apple/Google/Stripe) ürün ID’si. 12 aylık taahhüt planı için değer Erişim gerçek bir mağaza işlemi olmadan verilmişse
|
| will_renew | Boolean | Ücretli access level’ın yenilenip yenilenmeyeceğini gösterir. |
Bu yapının zamanla büyüyebileceğini unutmayın — biz veya birlikte çalıştığımız üçüncü taraflar tarafından yeni veriler eklenebilir. Bu yapıyı işleyen kodunuzun yeterince sağlam olduğundan ve tüm yapıya değil, belirli alanlara dayandığından emin olun.