Shape
What happened during each period
Chart · Churn and refunds
Refund Request Outcomes counts the App Store refund requests RevenueDot received in each period and sorts them by outcome: granted, declined, reversed or no resolution yet. A request with no grant after 2 days counts as declined. The chart covers Apple only, because Google sends no refund requests.
Shape
What happened during each period
API name
refund_request
Measures
Refund Granted (Count), Refund Declined (Count), Refund Reversed (Count), No Resolution (Count)
Filter and segment by
App, Store, Country
Definition
When a customer asks Apple for a refund, Apple can send your server a CONSUMPTION_REQUEST notification, and RevenueDot records it as a request. Later Apple sends the result: a refund (granted), a declined refund, or a reversal of a granted refund. RevenueDot matches each result to its request by transaction and counts the request in the period it was received.
The outcome is the latest one for the request. Granted then reversed is reversed. Granted is granted. A declined notice, or no grant after 2 days, is declined. A request under 2 days old with no outcome is no resolution. The chart also keeps the number of requests and the price of the purchases they were about.
The chart only knows about requests Apple sends to the App Store Server Notifications URL set up for your app. RevenueDot's Refund Control feature is what answers the request with consumption information, and nothing is sent without your project's customer-consent confirmation. Filters and segments: app, store and country. You can open it in the dashboard under Charts or fetch it with GET /v2/projects/{project_id}/charts/refund_request. The response has the same shape as RevenueCat's Charts API, so scripts written for that API keep working. The secret key needs the charts_metrics:charts:read permission. The Charts guide lists every parameter.
Worked example
Fifty requests received in one week.
| Outcome | Requests |
|---|---|
| Refund granted | 20 |
| Refund declined (or no grant after 2 days) | 22 |
| Refund reversed | 3 |
| No resolution yet (under 2 days old) | 5 |
The four outcomes add up to the 50 total requests.
Why it matters
A refund request is the moment you can still influence the result. Apple decides, but the consumption data you send is part of its decision. Watching granted against declined shows whether your answers help, and a change after you edit your Refund Control policies is the proof.
The amount behind the requests tells you the money at stake. A week with few requests and a high grant rate on annual plans can matter more than many small requests.
API
Same path and response shape as RevenueCat's Charts API, so existing scripts keep working.
curl "https://api.revenuedot.app/v2/projects/$PROJECT_ID/charts/refund_request?resolution=day" \
-H "Authorization: Bearer $SECRET_KEY" # sk_... with charts_metrics:charts:read Reference: Charts guide · REST API v2
FAQ
It is a customer asking Apple to refund a purchase. Apple can notify your server with a CONSUMPTION_REQUEST so that you can send usage data before it decides.
RevenueDot only counts requests Apple sends to your App Store Server Notifications URL. Check the URL and that Refund Control is set up.
No. Google sends no refund requests that RevenueDot can see, so the chart covers Apple only.
When Apple reports a decline, or when no grant arrives within 2 days of the request.
Get started
Connect your app to RevenueDot Cloud, free up to $10,000 a month in tracked revenue, and all 43 charts fill from your store history after import.
Already have an account? Sign in · Prefer your own servers? Self-host free