RefundHalt

Apple App Store setup

Connect App Store Connect with one In-App Purchase key and one notification URL.

The dashboard walks you through all of this visually (with recreated App Store Connect screens and animated pointers), so the fastest path is Dashboard → Apps → your app. This page is the reference version.

1. Create an In-App Purchase key

  1. Sign in to App Store Connect as Admin or Account Holder and open Users and Access.
  2. Go to Integrations → In-App Purchase (careful: this is not the "App Store Connect API" key — In-App Purchase is its own entry in the Keys menu).
  3. Click next to "Active", name the key (e.g. RefundHalt), and click Generate.
  4. Grab three values: the Issuer ID (top of the page), the Key ID (your key's row), and the .p8 file (download it immediately — Apple lets you download it exactly once).

Drop the .p8 into the dashboard's upload zone — we read the Key ID straight out of the AuthKey_XXXXXXXX.p8 filename, verify the key against Apple's servers on the spot, and store it encrypted with AES-256-GCM.

2. Point Server Notifications at RefundHalt

Apple announces refund requests through App Store Server Notifications V2, and allows exactly one URL per app.

  1. In App Store Connect open My Apps → your app → App Information (General section) and scroll to App Store Server Notifications.
  2. Click Set Up URL under Production Server URL, paste your app's RefundHalt notification URL (shown in the dashboard), and select Version 2 Notifications. Save.
  3. Repeat for the Sandbox Server URL — same URL, same version.

Was that field already pointing at your backend, RevenueCat, or Adapty? Nothing has to break — see Notification forwarding. You can also keep RevenueCat, Adapty, or Apphud primary and have them forward raw events to RefundHalt; the dashboard has a visual guide for each path.

3. Verify

Click Verify setup in the dashboard. We sign a request with your key and fire a sandbox test notification through Apple; when it lands on your webhook (directly or through your forwarder) the app flips to verified and protected.

Optional: evidence-grade consumption data

Out of the box we estimate consumption from days-since-purchase. For stronger evidence, register purchases and stream usage events through the API — refund responses then carry real usage counts instead of estimates.

On this page