consumption_request

Learn about the CONSUMPTION_REQUEST App Store Server Notification V2. Fired when Apple requests consumption data to help process a refund.

App Store Server Notifications V2Other
consumption_request

The CONSUMPTION_REQUEST notification fires when Apple is processing a customer's refund request and needs consumption data from your server to make a decision. Providing accurate consumption data can help Apple decline refund requests for content that has been fully consumed.


When does it fire?


This notification triggers when a customer requests a refund for an in-app purchase and Apple wants to know how much of the content the customer has used. You have 12 hours to respond with consumption data via the App Store Server API.


Payload highlights


The signed transaction info includes the transaction ID of the purchase being contested. You need to look up usage data for this transaction and send it back to Apple using the Send Consumption Information endpoint.


How Yeethook helps


Consumption requests have a strict 12-hour deadline. Yeethook alerts your team in Slack or Discord immediately so you can ensure the consumption data is submitted on time. Missing this window means Apple makes the refund decision without your input.


Common use cases


  • Get immediate alerts when Apple requests consumption data
  • Track consumption request volume and response rates
  • Ensure your team responds within the 12-hour deadline
  • Monitor the correlation between consumption responses and refund outcomes

Example payload

The decoded body of a consumption request. consumptionRequestReason is one of the few interesting values Apple puts directly in the data object rather than inside a nested JWS, and signedDate is the moment the 12-hour clock starts.

{
  "notificationType": "CONSUMPTION_REQUEST",
  "notificationUUID": "d94c7f15-3b82-40ae-97c6-5e18d0a24b73",
  "version": "2.0",
  "signedDate": 1790321899000,
  "data": {
    "appAppleId": 1234567890,
    "bundleId": "com.example.app",
    "bundleVersion": "142",
    "environment": "Production",
    "consumptionRequestReason": "UNINTENDED_PURCHASE",
    "signedTransactionInfo": "eyJhbGciOiJFUzI1NiIsIng1YyI6..."
  }
}

What it looks like in Slack

Critical

Consumption data requested (12h deadline)

Product
com.example.app.coins.500
Price
4.99 USD
Transaction
2000000856781234
Consumption reason
Unintended purchase
Environment
Production

Questions about consumption_request

Which reasons can Apple send with a consumption request?

consumptionRequestReason is one of UNINTENDED_PURCHASE, FULFILLMENT_ISSUE, UNSATISFIED_WITH_PURCHASE, LEGAL or OTHER. Yeethook maps them to a readable Consumption reason row, and LEGAL in particular is worth routing to a human rather than an automated responder.

What exactly do I have to send back to Apple?

A PUT to the Send Consumption Information endpoint at /inApps/v1/transactions/consumption/{transactionId} with fields such as consumptionStatus, deliveryStatus, lifetimeDollarsPurchased and playTime. customerConsented must be true, because Apple discards the submission if the customer has not agreed to share the data.

How do I know which purchase Apple is asking about?

The transactionId inside signedTransactionInfo is both the contested transaction and the path parameter for the consumption endpoint. That means you have to decode the inner JWS before you can even address the response, which is a real cost against a 12-hour budget.

Does responding mean the refund gets declined?

No. Apple weighs your data alongside its own signals and never reports how it used your answer. The outcome comes back later as either REFUND or REFUND_DECLINED for the same transaction, usually within a few days.

Related Events

Get this event in Slack or Discord

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

Get Started Free