Skip to main content

Overview

Promotional offers let you give existing or lapsed subscribers a discounted or free period when they accept an Encore offer at a churn moment. You create the offer in App Store Connect, link it through your Encore dashboard, and apply it in your purchase controller when it runs the purchase.
A promotional offer is a targeted discount or free period you extend to a specific existing or lapsed subscriber at a moment you choose.

Prerequisites

  • An auto-renewable subscription product configured in Encore (see App Store Subscription Product: connect your App Store Connect catalog and pick the product)
  • Access to App Store Connect with the Admin or App Manager role

Step 1: Create the promotional offer

1

Open your subscription

Go to App Store ConnectApps → your app → Subscriptions. Select the subscription product you want to add a promotional offer to.
2

Add a promotional offer

Scroll down to the Subscription Prices section and click the ”+” button. Then click Create Promotional Offer
3

Configure the offer

Fill in the following fields:
For churn moments, a Free period of a few months tends to perform best. This gives a churning user a compelling reason to stay without requiring immediate payment.
4

Save

Click Create to save the promotional offer. The Promotional Offer Identifier you entered above is the value you’ll enter as the Promotional Offer ID in the Encore dashboard.

Step 2: Generate an In-App Purchase key

Promotional offers require a server-generated signature. If you’re using StoreKit directly (not a third-party manager), the signature is generated with a separate In-App Purchase key, which you upload to Encore.
This is a different key from the one you uploaded to connect your store catalog. The App Store Connect API key from App Store Subscription Product (Key ID + Issuer ID + .p8, App Manager role) is read-only for product setup and pricing display: Encore uses it to sync your subscription catalog and show your products. It does not sign promotional offers.Promotional-offer signing uses a dedicated In-App Purchase key, generated on a different App Store Connect page (below) and uploaded separately under Entitlements → Promotional Offer Setup. Keep the two distinct: the catalog-sync key never signs offers, and the In-App Purchase key is only needed when you sign offers with StoreKit directly.
2

Generate a key

Click “Generate In-App Purchase Key” and give it a descriptive name (e.g., Encore Signing Key).
3

Copy the Key ID

Copy the Key ID shown in the table (e.g., WHJ3V7RXNW). You’ll need this in the Encore dashboard.
4

Download the .p8 file

Click Download to save the .p8 private key file. You can only download this file once, so store it securely.
The .p8 key file can only be downloaded once. If you lose it, you’ll need to generate a new key.
If you use a third-party subscription manager (RevenueCat, Adapty), it handles offer signing through its own SDK. You do not need to upload the .p8 key to Encore, but you still need the promotional offer created in App Store Connect.

  1. Go to your app in the Encore Dashboard
  2. Navigate to EntitlementsPromotional Offer Setup
  3. Enter the Promotional Offer ID (the Promotional Offer Identifier from Step 1)
  4. If using StoreKit directly, also provide your Key ID and upload the .p8 file
  5. Select your Subscription Manager and follow the integration instructions shown

Naming convention

Use a consistent naming pattern for your promotional offer IDs:

Handling the offer in code

PurchaseRequest.promoOfferId is reserved and is always nil on iOS SDK 2.0, so Encore does not drive promotional-offer selection. Your EncorePurchaseController decides when a promotional offer applies and signs it with your own billing code. How you apply it depends on your subscription manager:
Encore-driven promotional offers are not yet available in the iOS SDK. Until they are, keep the promotional offer id in your own code.
With StoreKit 2, applying a promotional offer requires a server-generated signature: sign the offer with the In-App Purchase key from Step 2, then pass the signed offer to product.purchase(options:) via Product.PurchaseOption.promotionalOffer. See Apple’s Implementing promotional offers for the signing flow.
See EncorePurchaseController for the full controller contract.

Next steps