Jede Rückerstattung im App Store ist Apples Entscheidung, doch Apple möchte diese Entscheidung ungern uninformiert treffen. Ein Rückerstattungsantrag pausiert den Vorgang, stellt Ihrem Server eine Anfrage und eröffnet ein festes Zeitfenster, in dem Sie mit Fakten zum Kauf antworten können. Antworten Sie inhaltlich fundiert, werden unbegründete Forderungen abgelehnt. Bleiben Sie stumm, ist die Darstellung des Kunden die einzige Version, die Apple hört.
Die wichtigsten Punkte
Rückerstattungsanträge im App Store veranlassen Apple, Ihrem Server eine CONSUMPTION_REQUEST-Benachrichtigung zu senden, und warten anschließend bis zu 12 Stunden auf Beweise, bevor eine Entscheidung fällt.
Antworten bedeutet, den Send-Consumption-Information-Endpunkt mit einem kompakten Payload aufzurufen: Einwilligung, Lieferstatus, ob eine Testversion vorlag, wie viel genutzt wurde, und das gewünschte Ergebnis.
Nichts zu senden ist selbst bereits eine Antwort. Apple verfährt dann ausschließlich nach dem, was der Kunde behauptet hat, zusammen mit dessen Kontoverlauf.
Die Einwilligung wirkt als harte Schranke. Apples Dokumentation besagt ausdrücklich, dass Sie überhaupt nicht antworten sollten, wenn der Kunde der Weitergabe seiner Nutzungsdaten nicht zugestimmt hat.
Bei automatisch verlängerbaren Abonnements leitet Apple den Nutzungsanteil aus der verstrichenen Zeit ab, ein eigener angegebener Wert führt zu einem Fehler.
Kein manueller Prozess passt in dieses Zeitfenster. Profitieren können nur die Entwickler, deren Antwort automatisch zusammengestellt und eingereicht wird.
Jede Rückerstattung im App Store beginnt identisch: Jemand besucht reportaproblem.apple.com, wählt einen Kauf aus und gibt einen Grund an.
Die Benachrichtigung, die meist unbeantwortet bleibt
Apps, die für App Store Server Notifications V2 konfiguriert sind, erhalten eine CONSUMPTION_REQUEST-Benachrichtigung, sobald die Rückerstattung beantragt wird. In diesem Payload stecken die Transaktion, das Produkt und, seit 2024, der vom Kunden gewählte Grund: UNINTENDED_PURCHASE, FULFILLMENT_ISSUE, UNSATISFIED_WITH_PURCHASE, LEGAL oder OTHER.
Ab diesem Zeitpunkt laufen zwölf Stunden, in denen Sie den Send-Consumption-Information-Endpunkt aufrufen und Ihre Darstellung zu Protokoll geben können. Dieser Endpunkt verlangt bewusst minimale Angaben: fünf Felder, die nichts als Flags und Zahlen enthalten.
customerConsented teilt Apple mit, ob der Kunde der Weitergabe seiner Nutzungsdaten zugestimmt hat. Ein typischer Wert ist true.
deliveryStatus teilt Apple mit, ob der Kauf angekommen ist und funktioniert hat. Ein typischer Wert ist DELIVERED.
sampleContentProvided teilt Apple mit, ob vorab eine kostenlose Testversion verfügbar war. Ein typischer Wert ist true.
consumptionPercentage teilt Apple den genutzten Anteil mit, ausgedrückt in Milliunits, wobei 100000 für 100 Prozent steht. Ein typischer Wert ist 67500.
refundPreference teilt Apple das von Ihnen bevorzugte Ergebnis mit, ob Zustimmung, Ablehnung oder keine Präferenz. Ein typischer Wert ist DECLINE.
consumptionPercentage hat einen begrenzten Geltungsbereich: Verbrauchsgüter, einmalige Käufe und nicht automatisch verlängerbare Abonnements. Bei automatisch verlängerbaren Abonnements errechnet Apple den Wert selbst aus der verstrichenen Zeit innerhalb des Abrechnungszeitraums, jeder von Ihnen angegebene Wert wird abgelehnt.
Was Apple mit Ihren Angaben macht
Consumption-Informationen werden von Apple ausdrücklich als Grundlage dafür genutzt, wie die Rückerstattung entschieden wird. Senden Sie nichts, basiert die Entscheidung allein auf den Behauptungen des Kunden und dessen Kontoverlauf. Senden Sie Beweise, werden umstrittene Rückerstattungen mit nennenswerter Häufigkeit abgelehnt.
Den Antwortpfad selbst aufbauen, von A bis Z
Nichts an diesem Ablauf ist geheim. Allerdings muss alles davon unbeaufsichtigt um drei Uhr morgens funktionieren.
1. Benachrichtigungen empfangen
Öffnen Sie in App Store Connect die Seite „App Information" Ihrer App und richten Sie unter App Store Server Notifications eine Production Server URL ein, wobei Sie Version 2 wählen. Consumption-Anfragen werden nicht über V1 übertragen. Jede Benachrichtigung, Rückerstattungen eingeschlossen, trifft dann als signiertes JWS-Payload per POST an dieser URL ein.
2. Den richtigen Schlüssel erzeugen
Die Authentifizierung für Antworten nutzt einen In-App Purchase Key, der unter Users and Access im Bereich Integrations erstellt wird. Es handelt sich um einen eigenen Schlüsseltyp, und der daneben liegende App Store Connect API Key authentifiziert diese Aufrufe nicht. Die .p8-Datei lässt sich genau einmal herunterladen, danach erstellen Sie für jede Anfrage ein kurzlebiges ES256-JWT.
3. Prüfen, zuordnen, dann entscheiden
Eingehende CONSUMPTION_REQUEST-Benachrichtigungen müssen anhand ihrer JWS-Signaturkette gegen Apples Root-Zertifikate validiert werden, bevor Sie irgendeinem Teil des Inhalts vertrauen. Als Nächstes ordnen Sie die Transaktion einem Nutzer zu, idealerweise über das beim Kauf angehängte appAccountToken-UUID, und rufen dessen tatsächliche Nutzung ab. Legen Sie anschließend eine Präferenz fest: Entgegenkommen in den Kulanzfällen, Widerspruch dort, wo das Produkt eindeutig genutzt wurde.
4. Einreichen, bevor das Zeitfenster schließt
Übermitteln Sie diese fünf Felder per PUT an den Send-Consumption-Information-Endpunkt für diese Transaktions-ID, innerhalb der 12 Stunden. Zwei Fehler passieren fast allen. Milliunits bestimmen den Prozentsatz, also bedeutet 100 % den Wert 100000 statt eine Million. Und die Einwilligung ist die Grundvoraussetzung für das Ganze, denn Apples eigene Dokumentation besagt, dass Sie ohne Einwilligung des Kunden überhaupt nicht antworten sollten. Verankern Sie diese Einwilligungsklausel in Ihren Nutzungsbedingungen, bevor Sie irgendetwas davon ausliefern.
Warum so viele Entwickler verzichten
Ein halber Tag ist für alles, was von Menschen bedient wird, gnadenlos knapp. Benachrichtigungen treffen samstags um 3 Uhr morgens ein. Verlangt wird ein Server, der Apples JWS-Signaturkette validieren, die Transaktion einem Nutzer zuordnen, einen Nutzungsanteil in Milliunits berechnen und eine JWT-authentifizierte API aufrufen kann. Für jede einzelne Anfrage. Unbegrenzt.
In der Praxis sieht die Checkliste so aus:
App Store Server Notifications V2 einrichten, ohne die Sie die Anfrage nie erreicht.
Das signierte Payload gegen Apples Zertifikatskette validieren, bevor Sie ihm irgendein Vertrauen entgegenbringen.
Die Transaktion in Ihrem eigenen System einem Nutzer zuordnen, typischerweise über das beim Kauf angehängte appAccountToken.
Einen Nutzungsanteil aus tatsächlich erfasster Nutzung ableiten statt aus Schätzung.
Send Consumption Information mit einem In-App Purchase Key aufrufen, solange das Zeitfenster noch offen ist.
Refund Sensor übernimmt genau diese Last und reicht eine vollständige, belegte Antwort deutlich innerhalb des Zeitfensters ein, ohne dass jemand geweckt werden muss.
Wo diese Regeln dokumentiert sind
Häufig gestellte Fragen
Über die Rückerstattung wird trotzdem entschieden, nur jetzt ausschließlich anhand der Behauptung des Kunden und dessen Kontoverlauf. Sie verschenken die einzige Gelegenheit zu belegen, dass der Kauf angekommen ist und ausgiebig genutzt wurde. Unbeantwortete Anfragen werden in der Praxis deutlich häufiger genehmigt.
Ja. customerConsented muss true sein, und die Zustimmung hinter diesem Flag muss echt sein, üblicherweise festgehalten in dem Ihrer Rechtsdokumente, das die Datenweitergabe regelt. Apples eigene Richtlinien weisen Entwickler an, die Benachrichtigung vollständig unbeantwortet zu lassen, wenn keine solche Einwilligung vorliegt.
Nur für die nicht automatisch verlängerbare Art. Bei automatisch verlängerbaren Abonnements leitet Apple den Nutzungsanteil aus der verstrichenen Zeit innerhalb des aktuellen Abrechnungszeitraums ab, und die API weist jeden von Ihnen angegebenen Prozentsatz zurück. Ihre Rückerstattungspräferenz zählt trotzdem.
Ein In-App Purchase Key, erzeugt in App Store Connect unter Users and Access, im Bereich Integrations. Dieser unterscheidet sich vom App Store Connect API Key, und seine .p8-Datei lässt sich nur einmal herunterladen, im Moment der Erstellung.
In der Produktionsumgebung bleiben 12 Stunden ab der Benachrichtigung. Die Sandbox erlaubt nur 5 Minuten, was ein recht deutliches Signal dafür ist, was Apple erwartet: Automatisierung statt eine Person.



