Setup guide

App Store setup

Updated September 24, 2026.

Plucker coupons for App Store subscriptions are Apple offer codes. A few App Store Connect settings and one change in your app make sure every code you send is honoured.

1.Checklist

  • Connect App Store Connect with an API key that has the App Manager or Admin role.
  • Offer auto-renewable subscriptions that App Store review has approved, with a current price in the United States.
  • Select the subscriptions you want to make offers for on the Products page, and create an offer for each in Plucker.
  • Make sure your app grants access for purchases it did not start. Give your developer, or your coding agent, the brief below.

2.How an offer code reaches your buyer

Plucker turns an App Store offer into codes. When your buyer opens their link, Plucker sends them to Apple’s redemption page with the code filled in. The App Store shows the offer, the buyer confirms with their Apple Account, and the subscription starts on Apple’s terms.

Your app is not involved in that purchase. It learns about it the next time it checks its transactions, which is why it has to listen for purchases it did not start. See below.

3.Connecting App Store Connect

In App Store Connect, open Users and Access, then Integrations, and create a team API key with the App Manager or Admin role. Plucker needs its issuer ID, key ID and the downloaded .p8 private key. With it, Plucker lists your apps and subscriptions, reads their prices, creates offers and generates codes. Plucker needs to know which app each subscription belongs to so it can open the right redemption page; syncing the connection refreshes that.

4.Approved subscriptions

Apple creates offer codes only for auto-renewable subscriptions it has approved. Plucker lists your other subscriptions too, but can issue coupons for them only once App Store review approves them.

5.Prices and offers

Plucker shows each offer as a percentage of the subscription’s United States price, so keep a current US price. A paid offer uses one of Apple’s price points in one country; a free offer can cover every country.

Apple sets the limits: at most ten active offers per subscription, codes that expire within six months, new code batches that take up to an hour to activate, and shared codes that need at least 500 redemptions. Apple cannot cancel one individual code once it is issued; Plucker can disable its link.

6.What your app must do

A code redeemed on Apple’s page is a purchase your app did not start. Your app has to honour it:

  • Listen for new transactions from the moment it launches, and grant access from any verified transaction for your subscription.
  • Check current entitlements when it opens, so a code redeemed while the app was closed works straight away.
  • If your server tracks subscriptions, link a redeemed subscription to an account by its original transaction when the signed-in app reports it. It carries no account token of yours.
  • Never let an offer-code purchase replace a subscription the account already pays for.

7.For your coding agent

Paste this into your coding agent, or hand it to your developer.

For your coding agent
# Make this app compatible with Plucker coupons (App Store offer codes)

Plucker issues App Store subscription offer codes for this app's auto-renewable subscriptions. Buyers redeem a code on Apple's redemption page (apps.apple.com/redeem) or inside the app. The App Store runs that purchase, not this app's paywall, so the resulting transaction can reach the app without the app having started it.

## In the app (StoreKit)

1. Listen for transactions from launch. With StoreKit 2, iterate `Transaction.updates` for the app's whole lifetime, started at launch. With StoreKit 1, attach the payment-queue observer at launch. A code redeemed on Apple's page arrives there, not through the app's own purchase call.
2. Grant access from any verified transaction for the subscription, whatever started it, then finish the transaction.
3. Refresh entitlements from `Transaction.currentEntitlements` at launch and whenever the paywall or account screen opens, so a code redeemed while the app was closed is honoured.
4. Optional: let people enter a code inside the app with SwiftUI's `offerCodeRedemption(isPresented:)` modifier, or `AppStore.presentOfferCodeRedeemSheet(in:)` in UIKit.

## On the server (only if it tracks subscriptions)

5. Handle App Store Server Notifications V2 for the subscription. An offer-code purchase is a transaction whose `offerType` is 3 (offer code).
6. Do not require the app's own account token. A code redeemed outside the app carries none. Link the transaction to an account by its `originalTransactionId` when the signed-in app reports its current transactions (send the signed transactions to the server after sign-in and at launch).
7. Never let an offer-code transaction replace a different active subscription the account already pays for. Keep it unlinked until it can be attributed, and never discard it.

## App Store Connect

- Offer codes exist only for approved auto-renewable subscriptions.
- Keep a current price for the United States so offers can be shown as a percentage of it.

## Verify

- In Xcode, add the offer code to a StoreKit configuration file and redeem it with the app closed, then open the app: access must be granted from `Transaction.updates` or `Transaction.currentEntitlements` without going through the paywall.
- If the server tracks subscriptions, send it a notification or transaction with `offerType` 3 and no app account token for an account that exists, and check it is linked once the app reports its transactions.

8.What Plucker can and can’t confirm

Apple does not report who redeemed an individual code, so Plucker records that a buyer opened Apple’s redemption page, not that the purchase went through. Apple’s aggregate redemption counts appear in App Store Connect.

Questions? Write to support@mattmade.ai. For web checkouts, see the Dodo setup guide.