> ## Documentation Index
> Fetch the complete documentation index at: https://docs.encorekit.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Add Subscription Product

> Pick the App Store subscription Encore purchases when a user accepts an offer.

## Overview

<Note>
  This step applies to **Reduce Churn** placements only. A [reward placement](/publishers/guides/reward-placements) never runs a purchase, so an app that presents only reward placements can skip it.
</Note>

Now that placements are presenting, choose the subscription product Encore offers. When a user accepts an offer, Encore hands the configured product id to your registered [`EncorePurchaseController`](../sdk-reference/purchase-controller), which performs the purchase through your billing code and owns the resulting entitlement state.

<Note>
  **Using a third-party subscription manager?** How the purchase completes changes: see [Superwall](/publishers/ios/guides/managers/superwall/add-subscription-product), [RevenueCat](/publishers/ios/guides/managers/revenuecat/add-subscription-product), [Adapty](/publishers/ios/guides/managers/adapty/add-subscription-product), or [multiple managers](/publishers/ios/guides/managers/multiple-managers).
</Note>

The setup itself is store-console work, done once in App Store Connect and your app's **Entitlements** step:

<Card title="App Store Subscription Product" icon="apple" href="/publishers/ios/platform-setup/subscription-product">
  Connect your App Store Connect catalog and pick the subscription Encore offers, let Encore create one for you, or enter a Product ID manually.
</Card>

***

## What the SDK does with the Product ID at runtime

You never hard-code the Product ID in your app; Encore delivers it to the SDK as **remote configuration**:

* The SDK fetches your app's config (including the configured subscription Product ID) on `configure()` and again on each `identify()` that actually changes the user id or attributes.
* That config is **disk-cached**, so it's available immediately on cold start; the SDK refreshes it in the background on the next launch. The very first launch (before the first fetch completes) is the only time the Product ID may be momentarily unavailable.
* When a user accepts an offer, the SDK passes the configured Product ID to your registered [`EncorePurchaseController`](../sdk-reference/purchase-controller) as `request.productId`. Your controller performs the purchase; the SDK never purchases on its own.

Because it's remote config, changing the product in the Encore Dashboard takes effect without an app update.

***

## Next Steps

* [Configure Analytics](../quickstart/configure-analytics) - Forward App Store subscription events so Encore can measure offer impact


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.