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.

Event nameDescription
subscription_startedKullanıcı deneme süresi olmaksızın ücretli bir abonelik etkinleştirdiğinde, yani anında ücretlendirildiğinde tetiklenir.
subscription_renewedAbonelik yenilendiğinde ve kullanıcı ücretlendirildiğinde gerçekleşir. Bu olay, deneme süreli veya deneme süresiz aboneliklerde ikinci ödemeden itibaren başlar.
subscription_renewal_cancelledKullanıcı abonelik otomatik yenilemesini kapattığında tetiklenir. Kullanıcı, ücretli abonelik süresi sonuna kadar premium özelliklere erişmeye devam eder.
subscription_renewal_reactivatedKullanıcı abonelik otomatik yenilemesini yeniden etkinleştirdiğinde tetiklenir.
subscription_expiredİptal edilen bir abonelik tamamen sona erdiğinde tetiklenir. Örneğin, kullanıcı aboneliğini 12 Aralık’ta iptal etmiş ancak abonelik 31 Aralık’a kadar aktif kalmaya devam ediyorsa, olay aboneliğin sona erdiği 31 Aralık’ta kaydedilir.
subscription_pausedKullanıcı abonelik duraklatma özelliğini etkinleştirdiğinde gerçekleşir (yalnızca Android).
subscription_deferredAbonelik satın alımı ertelendiğinde tetiklenir; 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 mali güçlük yaşayan kullanıcılara destek sağlamak amacıyla kullanılabilir.
non_subscription_purchaseSüresiz erişim veya oyun içi coin gibi consumable ürünler dahil, abonelik dışındaki tüm satın almalar.
trial_startedKullanıcı deneme aboneliği etkinleştirdiğinde tetiklenir.
trial_convertedDeneme süresi sona erdiğinde ve kullanıcı ücretlendirildiğinde (ilk satın alma) gerçekleşir. Örneğin, kullanıcının denemesi 14 Ocak’a kadar sürüyor ancak 7 Ocak’ta ücretlendiriliyorsa, bu olay 7 Ocak’ta kaydedilir.
trial_renewal_cancelledKullanıcı deneme süresi boyunca abonelik otomatik yenilemesini kapattığında tetiklenir. Kullanıcı deneme süresi sonuna kadar premium özelliklere erişmeye devam eder; ancak ücretlendirilmez ve abonelik başlatılmaz.
trial_renewal_reactivatedKullanıcı deneme süresi boyunca abonelik otomatik yenilemesini yeniden etkinleştirdiğinde gerçekleşir.
trial_expiredDeneme 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 gerçekleşir (etkinleştirilmişse). Kullanıcı bu süre boyunca premium erişimini korur.
billing_issue_detectedÜcretlendirme girişimi sırasında bir ödeme sorunu oluştuğunda (örn. yetersiz kart bakiyesi) tetiklenir.
subscription_refundedBir abonelik iade edildiğinde (örn. Apple Support tarafından) tetiklenir.
non_subscription_purchase_refundedAbonelik dışı bir satın alma iade edildiğinde tetiklenir.
access_level_updatedKullanıcının access level’ı güncellendiğinde gerçekleşir.
Note

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.

Note

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.

AlanTürAçıklama
advertising_idUUIDReklam kimliği (yalnızca Android).
attributionsJSONAttribution verisi. Webhook ayarları’nda Send Attribution etkinleştirilmişse eklenir.
customer_user_idStringKullanı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.
emailStringAdapty 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_versionIntegerAdapty API sürümü (güncel: 1).
event_datetimeISO 8601Etkinliğ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_propertiesJSONEtkinlik özellikleri.
event_typeStringAdapty formatındaki etkinlik adı. Tam liste için Webhook etkinlik türleri’ne bakın.
idfaUUIDReklam 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.
idfvUUIDGeliştirici başına benzersiz Vendor Tanımlayıcısı (IDFV). Adapty Kontrol Paneli’ndeki profilde IDFV.
integration_idsJSONAdapty 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_tokenJSONPlay Store satın alma token’ı; Webhook ayarları’nda Send Play Store purchase token etkinleştirilmişse eklenir.
profile_idUUIDAdapty’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_datetimeISO 8601ISO 8601 formatında kurulum zaman damgası (ör. 2020-07-10T15:00:00.000000+0000).
profiles_sharing_access_levelJSONMevcut 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:
  • profile_id: (UUID) Adapty kimliği
  • customer_user_id: (String) Sağlanmışsa Customer User ID
user_agentStringCihaz tarayıcısı user-agent bilgisi.
user_attributesJSONKullanı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.

Note

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_setStringAttribution reklam seti.
statusStringorganic, non_organic, veya unknown olabilir.
channelStringPazarlama kanalı adı.
ad_groupStringAttribution reklam grubu.
campaignStringPazarlama kampanyası adı.
creativeStringAttribution yaratıcı anahtar kelimesi.
created_atISO 8601 dateAttribution kaydının oluşturulma tarihi ve saati.
network_user_idStringAttribution kaynağının kullanıcıya atadığı ID.

Entegrasyon ID’leri

Aşağıdaki entegrasyon ID’leri artık etkinliklerde kullanılmaktadır:

  • adjust_device_id
  • airbridge_device_id
  • amplitude_device_id
  • amplitude_user_id
  • appmetrica_device_id
  • appmetrica_profile_id
  • appsflyer_id
  • branch_id
  • facebook_anonymous_id
  • firebase_app_instance_id
  • mixpanel_user_id
  • pushwoosh_hwid
  • one_signal_player_id
  • one_signal_subscription_id
  • tenjin_analytics_installation_id
  • posthog_distinct_user_id

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.

AlanTürAçıklama
product_idStringPlay Store’da satın alınan ürünün benzersiz tanımlayıcısı (SKU).
purchase_tokenStringGoogle Play tarafından bu satın alma işlemini benzersiz şekilde tanımlamak için oluşturulan token.
is_subscriptionBooleanSatı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.

Note

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.

AlanTürAçıklama
ab_test_nameStringİşlemin gerçekleştiği Adapty A/B testinin adı.
ab_test_revisionIntegerİşlemin gerçekleştiği A/B testinin revizyonu.
base_plan_idStringGoogle Play Store’daki temel plan ID’si veya Stripe’taki fiyat ID’si.
cancellation_reasonString

Olası iptal nedenleri: voluntarily_cancelled, billing_error, price_increase, product_was_not_available, refund, cancelled_by_developer, new_subscription_replace, upgraded, unknown, adapty_revoked.

Aşağıdaki etkinlik türlerinde bulunur:

subscription_cancelled, subscription_refunded ve trial_cancelled.
cohort_nameStringKullanıcıya hangi paywall’ın gösterileceğini belirleyen kitlenin adı.
consecutive_paymentsIntegerKullanıcının kesintisiz olarak abone olduğu dönem sayısı. Mevcut dönemi de içerir.
currencyStringYerel para birimi.
developer_idStringİşlemin gerçekleştiği placement’ın ID’si.
discount_amount_localFloatİşleme uygulanan indirim: standart fiyat eksi gerçekte tahsil edilen tutar; Apple/Google payı düşülmeden önce, yerel para biriminde. Tam fiyatlı satın almalarda 0. Ücretsiz deneme sürümlerinde hiçbir şey tahsil edilmediğinden standart fiyatın tamamına (original_price_local) eşittir. Bir teklif uygulandığında ancak standart fiyat bilinmediğinde null (bkz. original_price_local). App Store’un peşin ödeme teklifleri için her zaman null’dur: tek seferlik peşin ödeme birden fazla fatura dönemini kapsadığından dönem başına standart fiyatla karşılaştırılamaz.
discount_amount_usdFloatdiscount_amount_local değerinin USD cinsinden karşılığı.
environmentStringOlası değerler: Sandbox veya Production.
event_datetimeISO 8601 dateEtkinliğin tarihi ve saati. Etkinliğin kök düzeyindeki değerle aynıdır.
original_price_localFloatÜrünün Apple/Google payı düşülmeden önceki standart, indirimsiz fiyatı; yerel para biriminde. Abonelikler için bu, yenileme fiyatıdır. Tam fiyatlı satın almalarda price_local değerine eşittir; mağazalar tek seferlik satın almalar için ayrı bir standart fiyat bildirmediğinden tek seferlik satın almalarda her zaman price_local değerine eşittir. Mağazanın güvenilir bir standart fiyat bildirmediği indirimli satın almalarda null (örneğin otomatik yenileme kapalıysa, yenileme hâlâ bir teklif taşıyorsa veya ürün değişikliği bekleniyorsa).
original_price_usdFloatoriginal_price_local ile aynı, USD cinsinden.
original_purchase_dateISO 8601 dateYinelenen aboneliklerde orijinal satın alma, zincirdeki ilk işlemdir; orijinal işlem ID’si olarak adlandırılan ID’si yenileme zincirini birbirine bağlar; sonraki işlemler bunun uzantılarıdır. Orijinal satın alma tarihi, bu ilk işlemin tarih ve saatidir.
original_transaction_idString

Yinelenen aboneliklerde bu, yenileme zincirini birbirine bağlayan orijinal işlem ID’sidir. Orijinal işlem zincirdeki ilkidir; sonraki işlemler bunun uzantılarıdır.

Uzantı yoksa original_transaction_id, store_transaction_id ile eşleşir.

paywall_nameStringİşlemin gerçekleştiği paywall’ın adı.
paywall_revisionStringİşlemin gerçekleştiği paywall’ın revizyonu. Varsayılan değer 1’dir.
price_localFloatApple/Google payı düşülmeden önce işlem için tahsil edilen tutar; yerel para biriminde. Ücretsiz denemelerde hiçbir şey tahsil edilmediğinden null.
price_usdFloatApple/Google payı düşülmeden önce işlem için tahsil edilen tutar; USD cinsinden. Ücretsiz denemelerde hiçbir şey tahsil edilmediğinden null.
profile_countryStringAdapty tarafından profil IP’sine göre belirlenir.
profile_event_idUUIDTekilleştirme amacıyla kullanılabilecek benzersiz etkinlik ID’si.
profile_has_access_levelBooleanProfilin aktif bir access level’ı olup olmadığını gösteren boolean değer.
profile_idUUIDAdapty tarafından oluşturulan profil ID’si. Etkinliğin kök düzeyindeki değerle aynıdır.
profile_ip_addressStringProfil 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_usdFloatİadeler düşüldükten sonra profil için toplam gelir.
promotional_offer_idStringKullanılan promosyon teklifinin Adapty ID’si. Bu ID’yi kontrol panelinde teklif oluştururken siz belirlersiniz.
purchase_dateISO 8601 dateÜrün satın alma işleminin tarih ve saati.
rate_after_first_yearBooleanAboneliğin bir yıllık kesintisiz yenilemeden sonra indirimli komisyon oranına (genellikle %15) hak kazanıp kazanmadığını gösteren boolean değer. Komisyon oranları programa uygunluk durumuna ve ülkeye göre değişir. Ayrıntılar için Mağaza komisyonu ve vergiler bölümüne bakın.
storeStringÜ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_countryStringUygulama mağazası tarafından bize gönderilen ülke.
store_offer_categoryStringUygulanan teklif kategorisi. Olası değerler: introductory, promotional, winback.
store_offer_discount_typeStringUygulanan teklif türü. Olası değerler: free_trial, pay_as_you_go ve pay_up_front.
store_offer_number_of_periodsIntegerBir teklifin indirim uyguladığı temel fatura dönemi sayısı (1 veya daha fazla). Yalnızca bir teklif geçerliyse bulunur. App Store’un peşin ödeme teklifleri için ve mağaza teklif süresini bildirmediğinde null.
subscription_expires_atISO 8601 date

Aboneliğin sona erme tarihi.

İade, fatura sorunu, ek süre ve access level etkinliklerinde, varsa iptal tarihini veya ek süre bitiş tarihini tutar. Satın alma ve yenileme etkinliklerinde ise normal abonelik sona erme tarihini tutar.

transaction_idStringİşlem için benzersiz tanımlayıcı.
trial_durationStringDeneme süresinin gün cinsinden uzunluğu. ” days” biçiminde gönderilir; örneğin “7 days”. Yalnızca denemeyle ilgili etkinlik türlerinde bulunur: trial_started, trial_converted, trial_cancelled.
variation_idUUIDSatın almanın yapıldığı paywall’ın benzersiz ID’si.
vendor_product_idString

Apple App Store, Google Play Store veya Stripe’taki ürün ID’si.

Erişim gerçek bir mağaza işlemi olmadan verilmişse vendor_product_id şunlardan biri olur:

Ek vergi ve gelir olayı özellikleri

Aşağıdaki vergi ve gelirle ilgili olay özellikleri, yalnızca belirli olay türleri için geçerli olan ek alanlardır. Yani listelenen olay türleri, Çoğu olay türü için olay özellikleri bölümündeki alanların yanı sıra aşağıda listelenen ek alanları da içerir.

Vergi ve gelir olay özelliklerine sahip olay türleri:

  • subscription_renewed
  • subscription_initial_purchase (subscription_started olarak da bilinir — aynı olaydır)
  • subscription_refunded
  • non_subscription_purchase
AlanTürAçıklama
net_revenue_localFloatNet gelir (Apple/Google payı ve vergiler düşüldükten sonraki gelir) yerel para biriminde.
net_revenue_usdFloatNet gelir (Apple/Google payı ve vergiler düşüldükten sonraki gelir) ABD doları cinsinden.
proceeds_localFloatApple/Google payı düşüldükten sonraki ürün fiyatı yerel para biriminde.
proceeds_usdFloatApple/Google payı düşüldükten sonraki ürün fiyatı.
tax_amount_localFloatKesilen vergi tutarı yerel para biriminde.
tax_amount_usdFloatKesilen vergi tutarı ABD doları cinsinden.

non_subscription_purchase örnek payload’u

non_subscription_purchase, abonelik etkinlikleriyle aynı yapıyı izler ancak tek seferlik veya consumable bir satın almayı 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 bulunmaz. subscription_expires_at mevcut olsa da değeri null’dır. Vergi ve gelir alanları (net_revenue_*, proceeds_*, tax_amount_*) dahil edilmiştir.

Ö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.

Tip

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.

ÖzellikTürAçıklama
ab_test_nameStringİşlemin kaynaklandığı A/B testi adı.
access_level_idStringAccess level’ın ID’si.
activated_atISO 8601 dateErişimin en son etkinleştirildiği tarih ve saat.
active_introductory_offer_typeStringUygulanan başlangıç teklifinin türü. Olası değerler: free_trial, pay_as_you_go ve pay_up_front.
active_promotional_offer_idStringAdapty Kontrol Paneli’nin Ürün bölümünde belirtilen promosyon teklifinin ID’si.
active_promotional_offer_typeStringUygulanan promosyon teklifinin türü. Olası değerler: free_trial, pay_as_you_go ve pay_up_front.
base_plan_idStringGoogle Play Store’daki temel plan ID’si veya Stripe’taki fiyat ID’si.
billing_issue_detected_atISO 8601 dateFaturalandırma sorununun tarih ve saati.
cancellation_reasonStringOlası iptal nedenleri: voluntarily_cancelled, billing_error, price_increase, product_was_not_available, refund, cancelled_by_developer, new_subscription_replace, upgraded, unknown, adapty_revoked.
cohort_nameStringProfilin ait olduğu kitlenin adı.
currencyStringYerel para birimi (varsayılan USD).
developer_idStringİşlemin kaynaklandığı placement’ın ID’si.
environmentStringOlası değerler: Sandbox veya Production.
event_datetimeISO 8601 dateEtkinliğin tarih ve saati.
expires_atISO 8601 date

Erişimin sona erdiği tarih ve saat. Adapty, is_active değerini bu alandan hesaplar.

Ek süre boyunca ek sürenin bitiş anını; iade veya iptal sonrasında iptal tarihini içerir. Ek süre bitişi için ayrı bir alan yoktur.

is_activeBooleanAccess level’ın aktif olup olmadığını gösteren boolean değer. Etkinlik oluşturulurken expires_at (ayrıca starts_at ve is_lifetime) alanından hesaplanır.
is_in_grace_periodBooleanProfilin ek sürede olup olmadığını gösteren boolean değer. true iken expires_at, ek sürenin bitiş anını içerir.
is_lifetimeBooleanAccess level’ın süresiz olup olmadığını gösteren boolean değer.
is_refundBooleanİşlemin iade olup olmadığını gösteren boolean değer.
original_purchase_dateISO 8601 dateYinelenen aboneliklerde 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_idString

Yinelenen aboneliklerde, 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 original_transaction_id, store_transaction_id ile aynıdır.

Orijinal satın almanın işlem tanımlayıcısı.
paywall_nameStringİşlemin kaynaklandığı paywall’un adı.
paywall_revisionStringİşlemin kaynaklandığı paywall’un revizyonu. Varsayılan değer 1’dir.
profile_countryStringAdapty tarafından profil IP’sine göre belirlenir.
profile_event_idUUIDTekilleştirme için kullanılabilecek benzersiz etkinlik ID’si.
profile_has_access_levelBooleanProfilin aktif bir access level’a sahip olup olmadığını gösteren boolean değer.
profile_idUUIDAdapty dahili kullanıcı profil ID’si.
profile_ip_addressStringProfil 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_usdFloatProfil için iadeler dahil toplam gelir.
purchase_dateISO 8601 dateÜrün satın alma tarihi ve saati.
renewed_atISO 8601 dateÜcretli erişimin mevcut döneminin en son başladığı tarih ve saat. İlk yenilemeden önce activated_at ile aynıdır.
starts_atISO 8601 dateAccess level’ın başladığı tarih ve saat.
storeStringÜrünün satın alındığı mağaza. Standart değerler: app_store, play_store, stripe, paddle.
Sunucu tarafı API’yi kullanarak özel mağaza işlemleri ayarlarsanız, store parametresindeki değer kullanılır.
store_countryStringUygulama mağazası tarafından Adapty’e gönderilen ülke.
subscription_expires_atISO 8601 dateAboneliğin sona erme tarihi. Bu etkinlikte expires_at ile aynı değeri içerir: ek süre boyunca ek sürenin bitiş anını; iade veya iptal sonrasında iptal tarihini.
transaction_idStringBir işlem için benzersiz tanımlayıcı.
trial_durationStringDeneme süresinin gün cinsinden süresi (örneğin “7 days”).
variation_idUUIDSatın almaları bu paywall’a atfetmek için kullanılan varyant tanımlayıcısı.
vendor_product_idString

Mağazadaki ürün ID’si (Apple/Google/Stripe).

Erişim gerçek bir mağaza işlemi olmadan sağlandıysa vendor_product_id şunlardan biri olur:

will_renewBooleanÜcretli access level’ın yenilenip yenilenmeyeceğini gösterir.
Warning

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.