API objects
Adapty API has JSON objects so you can understand a response structure and wrap it into your code.
All datetime values are ISO 8601, for example, “2020-01-15T15:10:36.517975+0000”.
Access level
Info about customer’s access level.
Access levels let you control what your app’s users can do in your mobile app without hardcoding specific product IDs. Each product defines how long the user gets a certain access level. So, whenever a user makes a purchase, Adapty grants access to the app for a specific period (for subscriptions) or forever (for lifetime purchases). Alternatively, you can grant specific access for a specified time to a user via server-side API.
You can do the following action via Adapty server-side API:
- Check users’s access level by retrieving their profile details
- Grant specific access to your end user without providing a transaction
- Set transaction and grant access level to your end user
- Revoke access level from your end user
| Parametre | Tür | Zorunlu | Null Olabilir | Açıklama |
|---|---|---|---|---|
| access_level_id | String | Evet | Hayır | Adapty Kontrol Paneli’nde ayarlanan Ücretli Access Level için ID. |
| store | String | Evet | Hayır | Ürünün satın alındığı mağaza. Seçenekler: app_store, play_store, stripe veya özel mağazanızın adı. |
| store_product_id | String | Evet | Hayır | Bu access level’ı açan ürünün uygulama mağazasındaki (App Store, Google Play, Stripe gibi) ID’si. |
| store_base_plan_id | String | Evet | Evet | Google Play’deki base plan ID veya Stripe’taki fiyat ID’si. |
| store_transaction_id | String | Evet | Hayır | Uygulama mağazasındaki (App Store, Google Play, Stripe vb.) işlem ID’si. |
| store_original_transaction_id | String | Evet | Hayır | Abonelikler için bu ID, yenileme zincirindeki orijinal işlemi bağlar. Sonraki işlemler yenileme olarak ilişkilendirilir. Yenileme yoksa store_original_transaction_id, store_transaction_id ile aynıdır. |
| offer | Object | Evet | Hayır | Offer nesnesi. Müşterinin access level’ı yoksa null olabilir. |
| environment | String | Hayır | Hayır | Erişim izni veren işlemin ortamı. Seçenekler: Sandbox, Production. |
| starts_at | ISO 8601 date | Evet | Evet | Access level’ın aktif hale geldiği tarih ve saat. Gelecekte bir tarih olabilir. |
| purchased_at | ISO 8601 date | Evet | Hayır | Access level için en son satın alma işleminin tarih ve saati. |
| originally_purchased_at | ISO 8601 date | Evet | Hayır | Abonelikler için store_original_transaction_id ile ilişkili zincirdeki ilk (orijinal) satın almanın tarih ve saati. |
| expires_at | ISO 8601 date | Evet | Evet | Access level’ın sona erdiği tarih ve saat. Geçmişte bir tarih olabilir ya da süresiz erişim için null olabilir. |
| renewal_cancelled_at | ISO 8601 date | Evet | Evet | Bir abonelik için otomatik yenilemenin kapatıldığı tarih ve saat. Abonelik hâlâ aktif olabilir; yalnızca otomatik olarak yenilenmez. Kullanıcı aboneliği yeniden etkinleştirirse null olarak ayarlanır. |
| billing_issue_detected_at | ISO 8601 date | Evet | Evet | Bir ödeme sorununun tespit edildiği tarih ve saat (örneğin başarısız kart ödemesi). Abonelik hâlâ aktif olabilir. Ödeme daha sonra gerçekleşirse bu alan temizlenir. |
| is_in_grace_period | Boolean | Evet | Hayır | Aboneliğin ek sürede olup olmadığını gösterir (yalnızca otomatik yenilenen abonelikler için). |
| cancellation_reason | String | Evet | Evet | İptal nedeni. Seçenekler: voluntarily_cancelled, billing_error, price_increase, product_was_not_available, refund, upgraded, unknown. |
Although the SDK includes the is_active parameter to check if a subscription is active, the server-side API does not provide this parameter. However, you can determine subscription status at any time by checking whether the current date falls between the starts_at and expires_at parameters.
Installation Meta
Information about installation of the app on a specific device.
You can do the following action via Adapty server-side API:
| Parameter | Type | Required | Nullable | Description |
|---|---|---|---|---|
| device_id | String | Yes | No | The device identifier is generated on the client side. |
| device | String | No | Yes | The end-user-visible device model name. |
| locale | String | No | Yes | The locale used by the end user. |
| os | String | No | Yes | The operating system used by the end user. |
| platform | String | No | Yes | The device platform used by the end user. |
| timezone | String | No | Yes | The timezone of the end user. |
| user_agent | String | No | Yes | Details about the end user environment: device, operating system, and browser information of the end user interacting with your application. |
| idfa | String | No | Yes | The Identifier for Advertisers, assigned by Apple to a user’s device. |
| idfv | String | No | Yes | The Identifier for Vendors (IDFV) is a code assigned to all apps by one developer and is shared across all apps by that developer on your device. |
| advertising_id | String | No | Yes | The Advertising ID is a unique identifier offered by the Android Operating System that advertisers might use to uniquely identify you. |
| android_id | String | No | Yes | On Android 8.0 (API level 26) and higher versions of the platform, a 64-bit number (expressed as a hexadecimal string), unique to each combination of app-signing key, user, and device. For more details, see Android developer documentation. |
| android_app_set_id | String | No | Yes | An AppSetId - unique, per-device, per developer-account user-resettable ID for non-monetizing advertising use cases. |
Non Subscription
Info about non-subscription purchases. These can be one-time (consumable) products, unlocks (like new map unlock in the game), etc.
You can do the following action via Adapty server-side API:
- Check user’s current non-subscriptions by retrieving their profile details
| Parameter | Type | Required | Nullable | Description |
|---|---|---|---|---|
| purchase_id | String | Yes | No | Identifier of the purchase in Adapty. You can use it to ensure that you’ve already processed this purchase, for example tracking one-time products. |
| store | String | Yes | No | Store where the product was purchased. Possible values are: app_store, play_store, stripe, name of your custom store. |
| store_product_id | String | Yes | No | Identifier of the product in the app store (App Store/Google Play/Stripe, etc.) that unlocked this access level. |
| store_base_plan_id | String | Yes | Yes | Base plan ID in the Google Play Store or price ID in Stripe. |
| store_transaction_id | String | Yes | No | The ID of the transaction in the app store (App Store/Google Play/Stripe, etc.). |
| store_original_transaction_id | String | Yes | No | In case of prolonged subscriptions, a chain of subscriptions is generated. The original transaction i the very first transaction in this chain and the chain is linked by it. Other transactions in the chain are prolongations. If no prolongation, |
| purchased_at | ISO 8601 date | Yes | No | The datetime when the access level was purchased the latest time. |
| environment | String | No | No | Environment of the transaction that provided the access level. Possible values: Sandbox, Production. |
| is_refund | Boolean | Yes | No | Indicates if the product has been refunded. |
| is_consumable | Boolean | Yes | No | Indicates whether the product is consumable. |
One-Time Purchase
| Parametre | Tür | Zorunlu | Null Olabilir | Açıklama |
|---|---|---|---|---|
| purchase_type | String | Evet | Hayır | Satın alınan ürünün türü. Olası değer: one_time_purchase. |
| store | String | Evet | Hayır | Ürünün satın alındığı mağaza. Olası değerler: app_store, play_store, stripe veya özel mağazanızın Store ID’si. |
| environment | String | Hayır | Hayır | Access level’ı sağlayan işlem ortamı. Seçenekler: Sandbox, Production. Varsayılan olarak Production kullanılır. |
| store_product_id | String | Evet | Hayır | Bu access level’ı açan ürünün uygulama mağazasındaki (App Store, Google Play, Stripe vb.) ürün ID’si. |
| store_transaction_id | String | Evet | Hayır | Uygulama mağazasındaki (App Store, Google Play, Stripe vb.) işlem ID’si. |
| store_original_transaction_id | String | Evet | Hayır | Yinelenen abonelikler için, yenileme zincirini birbirine bağlayan orijinal işlem ID’si. Orijinal işlem zincirdeki ilk işlemdir; sonraki işlemler yenilemelerdir. Yenileme yoksa |
| offer | Object | Hayır | Evet | Satın alma için kullanılan teklif; bir Offer nesnesi olarak. |
| is_family_shared | Boolean | Hayır | Hayır | Ürünün App Store Connect’te aile paylaşımını destekleyip desteklemediğini gösteren Boolean değer. Yalnızca iOS. iOS 14.0 altı ve macOS 11.0 altında her zaman false’tur. Varsayılan olarak false kullanılır. |
| price | Object | Evet | Hayır | Tek seferlik satın almanın fiyatı; bir Price nesnesi olarak. Sıfır maliyetli ilk abonelik satın alımı ücretsiz deneme, sıfır maliyetli yenileme ise ücretsiz yenilemedir. |
| purchased_at | ISO 8601 date | Evet | Hayır | Access level’ın en son satın alındığı tarih ve saat. |
| refunded_at | ISO 8601 date | Hayır | Hayır | İade edilmişse, iadenin tarih ve saatini gösterir. |
| cancellation_reason | String | Hayır | Hayır | Olası iptal nedenleri: voluntarily_cancelled, billing_error, price_increase, product_was_not_available, refund, cancelled_by_developer, new_subscription, unknown. |
| variation_id | String | Hayır | Hayır | Satın almaları yapıldıkları belirli paywall’a kadar izlemek için kullanılan varyasyon ID’si. |
Offer
Information on the applied offer. The Offer object is a part of the Subscription, and Access level objects.
You can do the following actions with offers via Adapty server-side API:
- Apply offer when setting a transaction to your user
| Parameter | Type | Required | Nullable | Description |
|---|---|---|---|---|
| category | String | Yes | No | The category of the applied offer. Options are: introductory, promotional, offer_code, win_back. |
| type | String | Yes | No | The type of active offer. Options are: free_trial, pay_as_you_go, pay_up_front, and unknown. If this isn’t null, it means the offer was applied in the current subscription period. |
| id | String | No | Yes | The ID of the applied offer. |
Price
Information about the cost of your product in local currency. The Price object is a part of the Subscription and Purchase objects.
You can do the following actions with product price via Adapty server-side API:
- Set transaction to your user and specify its price
| Parameter | Type | Required | Nullable | Description |
|---|---|---|---|---|
| country | String | Yes | No | The country where the price applies. |
| currency | String | Yes | No | The currency used for the price. |
| value | Float | Yes | No | The product’s cost in the local currency. |
Profile
Info about the customer and their subscription
You can do the following actions with user profiles via Adapty server-side API:
- Retrieve/get the end-user’s profile with their access levels, subscriptions, non-subscriptions, etc.
- Create a new end-user profile
- Update your end-user profile
- Delete your end-user
| Parametre | Tür | Boş olabilir | Açıklama |
|---|---|---|---|
| app_id | String | :heavy_minus_sign: | Uygulamanızın dahili ID’si. Adapty Kontrol Paneli’nde görüntüleyebilirsiniz: App Settings -> General tab. |
| profile_id | UUID | :heavy_minus_sign: | Adapty profil ID’si. Adapty Kontrol Paneli -> Profiles -> ilgili profil sayfasındaki Adapty ID alanında görüntüleyebilirsiniz. |
| customer_user_id | String | :heavy_plus_sign: | Kullanıcınızın kendi sisteminizdeki ID’si. Adapty Kontrol Paneli -> Profiles -> ilgili profil sayfasındaki Customer user ID alanında görüntüleyebilirsiniz. Bu alan yalnızca Adapty SDK aracılığıyla mobil uygulama kodunuzda kullanıcıları tanımladığınızda çalışır. |
| total_revenue_usd | Float | :heavy_minus_sign: | Profilde elde edilen toplam USD cinsinden geliri temsil eden float değer. |
| segment_hash | String | :heavy_minus_sign: | Dahili parametre. |
| timestamp | Integer | :heavy_minus_sign: | Milisaniye cinsinden yanıt süresi; yarış koşulunu çözmek için gereklidir. |
| custom_attributes | Array | :heavy_minus_sign: | Profile en fazla 30 özel attribute eklenebilir. Anahtar: Anahtar, en fazla 30 karakterden oluşan bir string olmalıdır. Yalnızca harf, rakam, tire, nokta ve alt çizgiye izin verilir. Değer: Attribute değeri en fazla 30 karakter olmalıdır. Değer olarak yalnızca string ve float kullanılabilir; boolean değerler float’a dönüştürülür. Attribute’u silmek için boş değer veya null gönderin. |
| access_levels | Array | :heavy_plus_sign: | Access level nesnelerinden oluşan dizi. Müşterinin hiç access level’ı yoksa null olabilir. |
| subscriptions | Array | :heavy_plus_sign: | Subscription nesnelerinden oluşan dizi. Müşterinin hiç aboneliği yoksa null olabilir. |
| non_subscriptions | Array | :heavy_plus_sign: | Non-Subscription nesnelerinden oluşan dizi. Müşterinin hiç satın alımı yoksa null olabilir. |
Product
This object contains details about a product in Adapty.
| Name | Type | Required | Description |
|---|---|---|---|
| title | String | No | Product name from the Products section in the Adapty Dashboard. |
| is_consumable | Boolean | Yes | Indicates whether the product is consumable. |
| adapty_product_id | UUID | No | Internal product ID as used in Adapty. |
| vendor_product_id | String | Yes | The product ID in app stores. |
| introductory_offer_eligibility | Boolean | No | Specifies if the user is eligible for an iOS introductory offer. |
| promotional_offer_eligibility | Boolean | No | Specifies if the user is eligible for a promotional offer. |
| base_plan_id | String | No | Base plan ID for Google Play or price ID for Stripe. |
| offer | JSON | No | An Offer object as a JSON. |
{
"title": "Monthly Subscription w/o Trial",
"is_consumable": true,
"adapty_product_id": "InternalProductId",
"vendor_product_id": "onemonth_no_trial",
"introductory_offer_eligibility": false,
"promotional_offer_eligibility": true,
"base_plan_id": "B1",
"offer": {
"category": "promotional",
"type": "pay_up_front",
"id": "StoreOfferId"
}
}
RemoteConfig
This object contains information about a remote config for a paywall.
{
"lang": "en",
"data": "{\"bodyItems\":[{\"spacerValue\":{\"height\":20,\"style\":{\"type\":\"emptySpace\"}},\"type\":\"spacer\"},{\"mediaValue\":{\"ratio\":\"1:1\",\"source\":{\"fileType\":\"image\",\"reference\":{\"en\":\"bundle/images/new1.png\"}},\"widthStyle\":\"full\"},\"type\":\"media\"},{\"titleValue\":{\"alignment\":\"center\",\"subtitleConfig\":{\"fontSize\":17,\"text\":\"\",\"color\":\"#FFFFFF\"},\"titleConfig\":{\"fontSize\":22,\"text\":\"\"}},\"type\":\"title\"},{\"productListValue\":{\"items\":[{\"productId\":\"exampleapp.oneWeek\",\"promoText\":\"paywall.promo-1.title\",\"backgroundColor\":\"#0B867D\"},{\"discountRate\":80,\"productId\":\"exampleapp.oneYear\",\"promoText\":\"paywall.promo-2.title\",\"backgroundColor\":\"#0B867D\"}],\"layout\":\"vertical\"},\"type\":\"productList\"}],\"defaultProductId\":\"exampleapp.oneWeek\",\"footer\":{\"singleProductValue\":{\"customTitles\":{\"exampleapp.oneWeek\":\"Subscribe\",\"exampleapp.oneYear\":\"Subscribe\"},\"productId\":\"exampleapp.oneWeek\"},\"type\":\"singleProduct\"},\"id\":\"exampleapp\",\"isFullScreen\":true,\"settings\":{\"backgroundColor\":\"#000000\",\"closeButtonAlignment\":\"left\",\"closeButtonIconStyle\":\"light\",\"colorScheme\":{\"accent\":\"#007566\",\"background\":\"#001B0D\",\"label\":\"#FFFFFF\",\"primary\":\"#10C6B6\",\"secondaryLabel\":\"#FFFFFF\",\"seperator\":\"#FFFFFF\"},\"isFullScreen\":true,\"shouldShowAlertOnClose\":false,\"showCloseButtonAfter\":1,\"triggerPurchaseWithAlert\":false,\"triggerPurchaseWithProductChange\":false}}"
}
| Name | Type | Required | Description |
|---|---|---|---|
| lang | String | Yes | Locale code for the paywall localization. It uses language and region subtags separated by a hyphen (-). Examples: Refer to Localizations and locale codes for more details. |
| data | String | Yes | Serialized JSON string representing the remote config of your paywall. You can find it in the Remote Config tab of a specific paywall in the Adapty Dashboard. |
Subscription
Info about your end user subscription. You can do the following action via Adapty server-side API:
- Check the user’s current subscription by retrieving their profile details
- Set transaction to your user and grant a subscription to them
| Parametre | Tür | Zorunlu | Null Olabilir | Açıklama |
|---|---|---|---|---|
| purchase_type | String | Evet | Hayır | Satın alınan ürünün türü. Olası değer: subscription. |
| store | String | Evet | Hayır | Ürünün satın alındığı mağaza. Seçenekler: app_store, play_store, stripe veya özel mağazanızın Store ID’si. |
| environment | String | Hayır | Hayır | İşlemin gerçekleştiği ortam. Sandbox veya Production olabilir. Varsayılan olarak Production kullanılır. |
| store_product_id | String | Evet | Hayır | Bu access level’ı açan ürünün uygulama mağazasındaki (App Store, Google Play, Stripe vb.) ID’si. |
| store_transaction_id | String | Evet | Hayır | Uygulama mağazasındaki (App Store, Google Play, Stripe vb.) işlem ID’si. |
| store_original_transaction_id | String | Evet | Hayır | Abonelikler için bu ID, yenileme zincirindeki ilk işleme bağlantı sağlar. Her yenileme bu orijinal işleme bağlıdır. Yenileme yoksa |
| offer | Object | Hayır | Evet | Satın almada kullanılan teklif; Offer nesnesi olarak sağlanır. |
| is_family_shared | Boolean | Hayır | Hayır | Ürünün App Store Connect’te aile paylaşımını destekleyip desteklemediğini gösteren Boolean değer. Yalnızca iOS. iOS 14.0 altı ve macOS 11.0 altında her zaman false döner. Varsayılan değer false’tur. |
| price | Object | Evet | Hayır | Aboneliğin veya satın almanın fiyatı; Price nesnesi olarak belirtilir. Sıfır maliyetli ilk abonelik satın alımı ücretsiz deneme, sıfır maliyetli yenileme ise ücretsiz yenileme anlamına gelir. |
| purchased_at | ISO 8601 date | Evet | Hayır | En son access level satın alımının tarihi ve saati. |
| refunded_at | ISO 8601 date | Hayır | Hayır | Aboneliğin iade edildiği tarih ve saat (varsa). |
| cancellation_reason | String | Hayır | Hayır | Olası iptal nedenleri: voluntarily_cancelled, billing_error, price_increase, product_was_not_available, refund, upgraded veya unknown. |
| variation_id | String | Hayır | Hayır | Satın alımları yapıldıkları belirli paywall’a izlemek için kullanılan varyasyon ID’si. |
| originally_purchased_at | ISO 8601 date | Evet | Hayır | Abonelik zincirlerinde, store_original_transaction_id ile bağlantılı orijinal işlemin satın alma tarihi. |
| expires_at | ISO 8601 date | Evet | Hayır | Access level’ın sona ereceği tarih ve saat. Geçmişte bir tarih olabilir; süresiz erişim için null döner. |
| renew_status | Boolean | Evet | Hayır | Abonelik için otomatik yenilemenin etkin olup olmadığını gösterir. |
| renew_status_changed_at | ISO 8601 date | Hayır | Hayır | Otomatik yenilemenin etkinleştirildiği veya devre dışı bırakıldığı tarih ve saat. |
| billing_issue_detected_at | ISO 8601 date | Hayır | Hayır | Bir ödeme sorununun (örn. başarısız kart işlemi) tespit edildiği tarih ve saat. Abonelik hâlâ aktif olabilir. Ödeme başarılı olursa bu alan temizlenir. |
| grace_period_expires_at | ISO 8601 date | Hayır | Hayır | Abonelik şu anda ek süre içindeyse bu sürenin sona ereceği tarih ve saat. |
Although the SDK includes the is_active parameter to check if a subscription is active, the server-side API does not provide this parameter. However, you can determine subscription status at any time by checking whether the current date falls between the starts_at and expires_at parameters of the Access Level object.