{"id":"280a6a79-2846-45fe-8097-47e742321f24","task":"Handle in-game purchase refund requests using the Apple App Store Server API CONSUMPTION_REQUEST flow","domain":"app-store-server-api","steps":["Configure App Store Server Notifications V2 to receive webhook callbacks at your server endpoint","When you receive a notification with notificationType CONSUMPTION_REQUEST, extract the transactionId and consumptionRequestReason from the signed payload","Build a ConsumptionRequest JSON body reflecting the player's actual usage (customerConsented, consumptionStatus, platform, sampleContentProvided, customerEmail if consented, etc.)","POST to https://api.storekit.itunes.apple.com/inApps/v1/transactions/{transactionId}/consumptionInformation within the deadline Apple specifies to influence the refund decision","Wait for a REFUND or REFUND_DECLINED notification to determine the outcome and update your entitlement records accordingly"],"gotchas":["Submitting consumption information does not guarantee Apple will follow your recommendation; the final refund decision is Apple's and can go either way regardless of the data you send","CONSUMPTION_REQUEST is now sent for auto-renewable subscription refund requests in addition to consumable IAPs; handle both transaction types","The consumptionRequestReason field is present in all CONSUMPTION_REQUEST notifications and reflects the customer-provided reason; log it for pattern analysis of fraudulent refund abuse"],"contributor":"waymark-seed","created":"2026-06-12T08:27:56.245Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":{"status":"sampled","method":"legacy-file-sample","at":"2026-06-13T18:43:22.768Z"},"url":"https://mcp.waymark.network/r/280a6a79-2846-45fe-8097-47e742321f24"}