# Products & Plans

## Creating *`Products`* in the Purchasely Console

![](https://3348776246-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHAzdlUVqKyZvwTnNIE%2F-Mb6lRpLU6AtEbQYhpL1%2F-Mb6lg21YH5_V888Oehg%2Fimage.png?alt=media\&token=50c352da-40b8-4141-af08-22beb42f770d)

***`Products`*** already created for this application are visible in the block Products

![](https://3348776246-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHAzdlUVqKyZvwTnNIE%2F-Mb6lRpLU6AtEbQYhpL1%2F-Mb6lpFsow1bmlOTYGoc%2Fimage.png?alt=media\&token=c9b8fe4b-3788-47e7-a0c6-34b39cd06b19)

By clicking on the **`+ Add new product`** button in the upper right corner, you can add a new ***`Product`*** to your Mobile Application.

![](https://3348776246-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHAzdlUVqKyZvwTnNIE%2F-Mb6lRpLU6AtEbQYhpL1%2F-Mb6mBeXk0gI-RswwZck%2Fimage.png?alt=media\&token=0ca2e87b-0484-45b8-a699-18f2799f3533)

A ***`Product`*** is composed of the following parameters :

* The `Product name` : this parameter is used to display the ***`Product`*** in the Purchasely Console, but is also displayed to the user in the section "My Subscriptions" (which allows users to manage their subscription directly into the Mobile App).<br>
* The `Product Vendor ID` : this parameters allows you to set your own identifier for the ***`Product`***. \
  \
  This `Product Vendor ID` will be useful at the Webhook level, when receiving `Events` about a particular `Subscription`, the `Product Vendor ID` corresponding to the `Subscription` will always be present.

{% hint style="danger" %}
The Product Vendor ID cannot be changed after its creation, so choose it carefully
{% endhint %}

* The `Description` : this parameter is only used for your own internal purposes. It is a note that you can use for recording whatever information you want. It is not displayed in the Mobile App.<br>
* The `Icon` : this icon is displayed in the Purchasely Console and in the section "My Subscriptions"

**Editing&#x20;*****`Products`*****&#x20;in the Purchasely Console**

1. To edit a ***`Product`***, click on the **`Edit`** entry in the upper right corner

![](https://3348776246-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHAzdlUVqKyZvwTnNIE%2F-Mb6lRpLU6AtEbQYhpL1%2F-Mb6oMteBRs5jG1H9lCe%2Fimage.png?alt=media\&token=c68d12d0-13b0-40c7-9f16-91751ff773e2)

Except the `Product Vendor ID`, all the other parameters can be modified when editing a ***`Product`***

## About *`Plans`*

In Purchasely model, ***`Plans`*** correspond to items users can actually purchase. They correspond to :

* `in-app purchases` in the App Store Connect&#x20;
* `in-app products` in the Play Store Console

{% hint style="info" %}
A ***`Plan`*** must be understood as an item, granting a certain level of access (e.g.: Bronze, Silver, Gold or Platinium), associated to a set of entitlements (e.g.: HD, 4K, family - 4 simultaneous streams for a SVOD service). If the ***Plan*** is a renewing subscription, it is associated to a renewal periodicity.\
\
The purpose of the ***`Plan`*** is to aggregate a same in-app item, distributed over various Mobile Applications Store, into a same object, with a shared identifier, that you can define yourself. This contributes to simplify the follow-up of your subscribers.
{% endhint %}

In Purchasely Console, a ***`Product`***, can be associated to several ***`Plans`***.

## Creating *`Plans`* in the Purchasely Console

![](https://3348776246-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHAzdlUVqKyZvwTnNIE%2F-Mb6lRpLU6AtEbQYhpL1%2F-Mb6p3k09IaUkBQV_R4g%2Fimage.png?alt=media\&token=76cedb1d-2ce5-4eb5-b2e8-af2f0469a30e)

To create a ***`Plan`***, click on the button **`+ Add new plan`**&#x20;

![](https://3348776246-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHAzdlUVqKyZvwTnNIE%2F-Mb6lRpLU6AtEbQYhpL1%2F-Mb6pHFoQIKlrJHTAdCn%2Fimage.png?alt=media\&token=7e88697e-fd48-425f-9c6e-636f783a305e)

A ***`Plan`*** is composed of the following parameters :

* `Plan name` : this parameter is used to display the ***`Plan`*** in the Purchasely Console, but is also displayed to the user in the section "My Subscriptions" (which allows users to manage their subscription directly into the Mobile App).<br>

  `Plan Vendor ID` : this parameter allows you to set your own identifier for the ***`Plan`***. \
  When receiving ***`Events`*** about a particular `Subscription`, the `Plan Vendor ID` corresponding the `Subscription` will always be present. It will inform you about the ***`Plan`*** associated to the subscription and thus allow you to define the matching entitlements. The ***`Plan`*** has a common identifier for all the ***`Platforms`*** on which it is distributed.<br>
* `Plan type` : this parameter allows you to define the type of in-app item corresponding to the Plan. If a plan is mapped with several in-app purchases from several stores, it should be consistent and have the same type on all the stores. \
  &#x20;
* `Level` : this parameter allows you organise ***`Plans`*** within the ***`Product`***. Subscriptions should be arranged in descending order, starting with the option that offers the highest level of service. This order defines the migration policies (see [below](#ordering-plans-inside-a-product))<br>

### Binding Store Product ID together

To bind the Plan with the Store Product ID, you must first ensure that the [Application has been correctly plugged with the stores](https://purchasely.gitbook.io/purchasely/2.8/quick-start/installation#2-plug-it-with-the-stores).

![](https://3348776246-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHAzdlUVqKyZvwTnNIE%2F-Mb6lRpLU6AtEbQYhpL1%2F-Mb6rgXmvnOmjmf6mdhJ%2Fimage.png?alt=media\&token=89212ee1-ebce-446e-9964-3f32d49d7ed0)

* Check the Stores on which your Plan is distributed<br>
* Report the `Product ID` from the corresponding in-app purchase retrieved from the App Store Connect Console in the field `App Store Product id`\
  \&#xNAN;*App Store Connect Console > My Apps > \[YOUR APP] > In-App Purchases > Manage > In-App Purchases > \[YOUR IN-APP PURCHASE]*

![](https://3348776246-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHAzdlUVqKyZvwTnNIE%2F-MHmEL_ZwIf0pejfBL-w%2F-MHoyH_ILX95rMamh5aX%2Fimage.png?alt=media\&token=33375fce-bf50-42a2-9a1c-f10196ef387d)

* Report the `Product ID` from the corresponding in-app product retrieved from the Play Store Console in the field `Play Store Product id`\
  \&#xNAN;*Play Store Console > \[YOUR APP] > Store presence > In-App products > Subscriptions > \[YOUR IN-APP SUBSCRIPTION]*

![](https://3348776246-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHAzdlUVqKyZvwTnNIE%2F-MHmEL_ZwIf0pejfBL-w%2F-MHoxN2KhfVxKU8Egoau%2Fimage.png?alt=media\&token=b5c8ba17-c311-42d1-83d4-621e8e193f23)

### Ordering Plans inside a Product

The `Level` parameter is used to rank ***`Plans`*** inside a ***`Product`***.

On iOS, the App Store Connect Console provides the `Subscription Groups`, that are the exact equivalent of `Products` in Purchasely. The order in which `Subscriptions` are organised inside a `Subscription Groups` defines the migration policies (up-sell | down-sell | cross-sell). The policies are managed directly by the App Store.

***`Plans`*** inside a ***`Product`*** should be organised in the same order as Subscriptions inside a Subscription Group. If they are ordered differently, the Subscription Group ordering will prevail over the ***`Product`*** ordering in the Purchasely Console.

![](https://3348776246-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHAzdlUVqKyZvwTnNIE%2F-Mb6sgRDK-0GqIs2nt5a%2F-Mb6zpWVD1zciGwT_kb7%2Fimage.png?alt=media\&token=dfb53f14-78e9-40b1-880c-eafd4ee49983)

On the Play Store, `Subscription Groups` do not exist. Therefore, this is the order in which ***`Plans`*** are organized inside a ***`Product`*** in the Purchasely Console, which will define the migration policies between the ***`Plans`***. The policies are thus managed by the Purchasely Cloud Platform.

### About migrations policies

When a subscriber change his subscription (A) to another one (B), a migration is applied. The migration results in the auto-cancellation of subscription A, when subscription B is purchased.

#### App Store

On iOS, the migration is directly applied by the App Store. The condition to meet is to have the 2 `in-app purchases` belong to the same `Subscription Group`

3 different policies can be applied by the App Store :

* **Downgrade** : if subscription A has a higher rank than subscription B in the `Subscription Group`, the migration will be considered as a downgrade. In this case, subscription A will remain active until the end of the current billing period, and subscription B (with its own price and periodicity), will replace it automatically and become active only for the next billing cycle. Subscription A will then be automatically resigned.\
  \
  \&#xNAN;*Example : migration from the Yearly plan to the Monthly plan (screenshot above 👆) or from the Gold plan to a Silver plan in a multi-tiers subscription group.*\
  \
  Inside the app, the user flow looks like this :

![User flo on iOS when ](https://3348776246-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHAzdlUVqKyZvwTnNIE%2F-MHp-B8GQCQ_D0m55DSJ%2F-MHpGVAwNSEA7iW2uUQe%2Fimage.png?alt=media\&token=4487f42f-b485-40bd-824c-15c040f300e7)

* **Upgrade** : if subscription A has a lower rank than subscription B in the `Subscription Group`, the migration will be considered as an upgrade. In this case, subscription B will immediately replace subscription A a new billing cycle will start right away. Subscription B will be refund *prorata temporis* (for the time remaining before the end of the current billing period) to the user.<br>
* **Crossgrade** : if subscription A has the same rank as subscription B in the Subscription Groups, the policy applied will depend on the duration of each subscription. If they have the same duration, the policy applied will be the same as an upgrade (effective immediately + pro-rata refund), and the user flow will be the one of an upgrade. If they have different durations, the policy applied will look like a dowgrade (subscription B will become effective at the next renewal date).

More information about the all this is accessible directly on [Apple Help Center](https://help.apple.com/app-store-connect/#/dev7f2d6b652)

#### Play Store

* On the Play Store, since Subscription Groups do not exist, and migration are directly managed by the Purchasely Cloud Platform. To achieve this, it relies on `Products` and `Plans`. If `Plans` A & B belong to the same Product, Purchasely will apply a migration.
* For simplicity towards users, the exact same rules as on iOS have been implemented (downgrade / upgrade & crossgrade). Purchasely Cloud Platform relies on the parameter `Level` to determine which Plan has the highest rank and apply the corresponding migration policy.

## Editing *`Plans`* in the Purchasely Console

To edit a ***`Plan`***,  click on the **`Edit`** button in the upper right corner.

![](https://3348776246-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHAzdlUVqKyZvwTnNIE%2F-Mb6sgRDK-0GqIs2nt5a%2F-Mb6tX0GBjqEgTsIsOPo%2Fimage.png?alt=media\&token=68493dad-b48e-4180-a588-81a38daea787)
