Four policy templates
First purchase date, platform, recent renewal, or any condition the audience builder knows.
Feature
When a customer asks Apple for a refund, Apple sends your server a CONSUMPTION_REQUEST and gives you 12 hours to answer. RevenueDot's Refund Control answers for you. Ordered policies on customer conditions pick your refund preference, RevenueDot sends Apple the consumption data from its own records, and cards show refund rate, amounts and counts.
Free up to $10,000 a month in tracked revenue. Works with the RevenueCat SDK you already ship.
First purchase date, platform, recent renewal, or any condition the audience builder knows.
Failed sends retry after 5 minutes, 15 minutes and then hourly, and stop 5 minutes before the deadline.
Nothing goes to Apple until you confirm customers agreed to share consumption data.
Refund rate, amounts and counts include Google Play voids and chargebacks, Stripe refunds and Amazon refunds.
Steps
Connect the App Store with the app's In-App Purchase key and turn on App Store Server Notifications version 2. RevenueDot sends the answer with the same key.
Open Lifecycle, then Refund control, and tick that customers agreed to share consumption data with Apple. Apple requires the consent, and RevenueDot sends nothing until you confirm it.
Start from First purchase date, Platform, Recent renewal or Create your own. Recent renewal covers customers who renewed or converted from a free trial in the last 24 hours.
Pick Prefer full refund, Prefer no refund, Send consumption data only, or Do not respond for each policy and for the default policy.
Drag policies into order. The first policy whose conditions match the customer decides. Each card shows how many of your customers it would decide for.
Select Save. The next CONSUMPTION_REQUEST is answered with these rules.
For each request RevenueDot builds Apple's ConsumptionRequestV1 body from its own records and sends it with Send Consumption Information. A repeated notification for the same purchase is never answered twice.
| Field | How it is set |
|---|---|
| customerConsented | true, and only sent after you confirm consent |
| consumptionStatus | Subscriptions: 3 when the period is over, 2 when the customer opened the app after buying, 1 when they never did |
| sampleContentProvided | true when the customer had a free trial of the product |
| accountTenure | Days since the customer was first seen, in Apple's buckets |
| lifetimeDollarsPurchased, lifetimeDollarsRefunded | The customer's USD purchases and refunds, in Apple's buckets |
| playTime, userStatus | 0 and 1 unless your app sets the custom attributes rd_play_time_minutes or rd_user_status |
| refundPreference | From the policy: 1 full refund, 2 no refund, 0 no preference |
Apple tells you the result: REFUND when it refunds and REFUND_DECLINED when it does not. The cards show the last 28 days, and the table lists each request with the policy used and the outcome.
# Refund rate, amounts and counts
curl -s "$REVENUEDOT_URL/v2/projects/$PROJECT_ID/refund_control/stats" \
-H "Authorization: Bearer $SECRET_KEY"
# Each request, newest first, with the policy and the outcome
curl -s "$REVENUEDOT_URL/v2/projects/$PROJECT_ID/refund_requests" \
-H "Authorization: Bearer $SECRET_KEY" Google Play has no consumption API. A refund or chargeback arrives as a voided purchase and there is nothing to answer. RevenueDot records it as an approved refund request, with the policy that would have applied, so the cards cover every store. Stripe and Amazon refunds are recorded the same way.
FAQ
It is an App Store Server Notification sent when a customer asks Apple for a refund. Your server has 12 hours to answer with consumption information, such as how long the customer used the purchase and whether you prefer a refund. Apple uses the answer when it decides.
Turn on Refund Control in RevenueDot, confirm customer consent, and set policies. RevenueDot builds the consumption data from its records and sends it with your In-App Purchase key, with a refund preference picked by the first policy that matches the customer.
No. Apple decides. Your answer gives Apple facts and a preference of full refund, no refund or none. REFUND and REFUND_DECLINED notifications then show the outcome in the cards.
Google Play has no equivalent API, so there is nothing to answer. RevenueDot records Google voids and chargebacks as refund requests so your refund rate covers every store.
Yes. Apple requires customer consent to send consumption data. Make sure your terms or privacy policy say so. RevenueDot sends nothing until you tick the consent box in Refund control.
Get started
Start free on RevenueDot Cloud, free up to $10,000 a month in tracked revenue, or move an existing RevenueCat app with one line of code.
Already have an account? Sign in · Prefer your own servers? Self-host free