offer_redeemed

Learn about the OFFER_REDEEMED App Store Server Notification V2. Fired when a customer redeems a promotional offer, an offer code, or a win-back offer.

App Store Server Notifications V2Offers
offer_redeemed

The OFFER_REDEEMED notification fires when a customer redeems a subscription offer — a promotional offer, an offer code, or a win-back offer. This event is key to measuring the effectiveness of your subscription acquisition and retention campaigns.


When does it fire?


This notification triggers when one of these offer types is redeemed:


  • Promotional offers (offerType 2) — targeted offers for existing or lapsed subscribers
  • Offer codes (offerType 3) — redeemable codes distributed through marketing campaigns
  • Win-back offers (offerType 4) — offers specifically targeting churned subscribers

Introductory offers are the exception. They do not produce OFFER_REDEEMED — a free trial or intro price on a first purchase arrives as SUBSCRIBED with offerType 1 in the transaction.


Payload highlights


The signed transaction info includes the offer type, the offer identifier, and the transaction details. This lets you track which specific offers are driving conversions.


How Yeethook helps


Yeethook formats offer redemption events to clearly show which offer was redeemed, the offer type, and the subscription product. This helps your marketing team measure campaign effectiveness in real-time.


Common use cases


  • Measure conversion rates for different offer types and codes
  • See which marketing campaign a redemption came from via the offer identifier
  • Monitor promotional offer redemption for retention campaigns
  • Analyze win-back offer effectiveness for re-engagement

Example payload

The decoded body for an offer code that started a new subscription. The offer identifier itself lives in signedTransactionInfo as offerIdentifier, so the decoded body alone does not tell you which campaign converted.

{
  "notificationType": "OFFER_REDEEMED",
  "subtype": "INITIAL_BUY",
  "notificationUUID": "b3e6810c-45d9-4a72-91f8-6c07d2534eab",
  "version": "2.0",
  "signedDate": 1789803361000,
  "data": {
    "appAppleId": 1234567890,
    "bundleId": "com.example.app",
    "bundleVersion": "142",
    "environment": "Production",
    "signedTransactionInfo": "eyJhbGciOiJFUzI1NiIsIng1YyI6...",
    "signedRenewalInfo": "eyJhbGciOiJFUzI1NiIsIng1YyI6...",
    "status": 1
  }
}

What it looks like in Slack

Success

Offer redeemed

Product
com.example.app.pro.yearly
Price
49.99 USD
Transaction
2000000841230987
Offer type
Offer code
Expires
2027-09-15T11:36:01.000Z
Auto-renew
On
Subscription status
Active
Environment
Production

The same event arrives with different values depending on what changed. Yeethook rewrites the headline to match:

  • UPGRADE→ Offer redeemed (upgrade)
  • DOWNGRADE→ Offer redeemed (downgrade)

Questions about offer_redeemed

Which kinds of offer produce OFFER_REDEEMED?

Promotional offers (offerType 2), offer codes (3) and win-back offers (4). Introductory offers are not included: those come through on the SUBSCRIBED notification with offerType 1, which is why trial starts and campaign redemptions are separate events.

How do I find out which specific offer code was used?

Decode data.signedTransactionInfo and read offerIdentifier, which holds the offer code or promotional offer ID. Yeethook's Offer type row only shows the category, because that is the one value that maps cleanly from the numeric offerType.

Which subtypes can OFFER_REDEEMED carry?

INITIAL_BUY when the offer starts a first-time subscription, RESUBSCRIBE when it revives a lapsed one, and UPGRADE or DOWNGRADE when it rides along with a plan change. Yeethook only rewrites the headline for UPGRADE and DOWNGRADE, so the other two arrive as a plain "Offer redeemed" and the subtype is what tells you whether you won a new customer or discounted an existing one.

Do offer codes for consumables show up here?

No. Offer code redemptions for consumables, non-consumables and non-renewing subscriptions arrive as ONE_TIME_CHARGE, so OFFER_REDEEMED is limited to auto-renewable subscriptions and always has renewal info attached.

Get this event in Slack or Discord

Connect Yeethook to receive offer_redeemed notifications in your team's Slack or Discord channels.

Get Started Free