---
title: " Web API objects"
description: ""
---

## Offer object

This object contains details about the applied offer.

```json showLineNumbers
{
  "category": "no_offer",
  "type": "free_trial",
  "id": "Offer Name"
}

```

### Properties

| Name     | Type   | Required | Description                                                  |
| -------- | ------ | -------- | ------------------------------------------------------------ |
| category | String | Yes      | Category of the applied offer. Possible values: `introductory`, `promotional`, `winback`. |
| type     | String | Yes      | Type of the applied offer. Possible values: `free_trial`, `pay_as_you_go`, `pay_up_front`. |
| Id       | String | Yes      | The **Offer name** of the applied offer as specified in the [**Products**](https://app.adapty.io/products) section of the Adapty Dashboard. |

## Paywall object

The object that contains information on a paywall.

#### Properties

| Name          | Type             | Required           | Description                                                  |
| ------------- | ---------------- | ------------------ | ------------------------------------------------------------ |
| placement_id  | String           | :heavy_plus_sign:  | The ID of the [Placement](placements) where this paywall is shown. This value is set when creating a placement in your Adapty Dashboard. |
| variation_id  | String(uuid)     | :heavy_plus_sign:  | The variation ID used to track purchases linked to this specific paywall. |
| paywall_id    | String(uuid)     | :heavy_plus_sign:  | The unique identifier of the paywall.                        |
| ab_test_name  | String           | :heavy_minus_sign: | The name of the parent A/B test.                             |
| paywall_name  | String           | :heavy_plus_sign:  | The name of the paywall, as defined in your Adapty Dashboard. |
| products      | Array of objects | :heavy_plus_sign:  | Array of [Products](server-side-api-objects#product) objects containing product information for the paywall. |
| remote_config | JSON             | :heavy_minus_sign: | A [RemoteConfig](web-api-objects#remoteconfig-object) object in JSON format containing the full [remote config](customize-paywall-with-remote-config) of the paywall. |

#### Example

```json showLineNumbers title="JSON"
{
  "placement_id": "PaywallPlacementId",
  "variation_id": "00000000-0000-0000-0000-000000000000",
  "paywall_id": "InternalPaywallId",
  "ab_test_name": "Existing Offer | Improved Offer",
  "paywall_name": "Used Paywall",
  "products": [
    {
      "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"
      }
    }
  ],
  "remote_config": {
    "lang": "en",
    "data": "RemoteConfigObject"
  }
}
```

## Products object

This object contains details about a product in Adapty.

### Properties

| Name                           | Type    | Required | Description                                                  |
| ------------------------------ | ------- | -------- | ------------------------------------------------------------ |
| title                          | String  | No       | **Product name** from the [**Products**](https://app.adapty.io/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](https://support.google.com/googleplay/android-developer/answer/12154973) for Google Play or [price ID](https://docs.stripe.com/products-prices/how-products-and-prices-work#use-products-and-prices) for Stripe. |
| offer                          | JSON    | No       | An [Offer](web-api-objects#offer-object) object as a JSON.   |

### Example

```json showLineNumbers
{
  "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 object

This object contains information about a [remote config](customize-paywall-with-remote-config) for a paywall.

```json showLineNumbers
{
  "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}}"
}

```

### Properties

| Name | Type   | Required          | Description                                                  |
| ---- | ------ | ----------------- | ------------------------------------------------------------ |
| lang | String | :heavy_plus_sign: | <p>Locale code for the [paywall localization. It uses language and region subtags separated by a hyphen (**-**).</p><p>Examples: `en` for English, `pt-br` for Brazilian Portuguese.</p><p>Refer to  [Localizations and locale codes](localizations-and-locale-codes) for more details.</p> |
| data | String | :heavy_plus_sign: | 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. |