Apples Send Consumption Information fragt jetzt fünf Felder ab, nicht zwölf, und hier ist jedes einzelne
Wenn ein Kunde Apple um eine Rückerstattung bittet, ist die Send Consumption Information-Nutzlast Ihre Antwort. Apple hat sie von zwölf Feldern auf fünf gekürzt, drei erforderliche und zwei optionale. Hier ist jedes Feld, die Werte, die es akzeptiert, und das 12-Stunden-Fenster, in dem Sie es senden.

Wichtigste Erkenntnisse
- Apples Send Consumption Information-Nutzlast enthält jetzt fünf Felder, zuvor waren es zwölf. Drei sind erforderlich, customerConsented, deliveryStatus und sampleContentProvided, und zwei sind optional, consumptionPercentage und refundPreference.
- customerConsented ist eine harte Schranke. Apples eigene Vorgabe lautet, dass Sie die Nutzlast gar nicht erst senden, wenn der Kunde dem Teilen von Verbrauchsdaten nicht zugestimmt hat.
- deliveryStatus trägt Ihr stärkstes Signal. DELIVERED besagt, dass der Kauf funktioniert hat, und die vier UNDELIVERED-Werte teilen Apple mit, dass der Kunde nie ein funktionierendes Produkt erhalten hat.
- consumptionPercentage ersetzte das alte vierstufige consumptionStatus-Enum durch eine präzise Zahl in milliunits, wobei 100,000 milliunits bedeutet, dass der Artikel vollständig verbraucht wurde.
- refundPreference ist jetzt eine Zeichenkette, keine Zahl. Die drei Werte sind DECLINE, GRANT_FULL und GRANT_PRORATED, und es benennt eine Präferenz, keine Entscheidung. Apple entscheidet weiterhin.
- Sie senden die Nutzlast per PUT an den Send Consumption Information-Endpunkt, adressiert über die Transaktions-ID, und Apple antwortet mit 202 Accepted und einem leeren Body. Das Fenster beträgt 12 Stunden nach dem CONSUMPTION_REQUEST.
- Bei automatisch verlängerbaren Abonnements berechnet Apple den Verbrauch selbst aus der verstrichenen Zeit, sodass consumptionPercentage für Verbrauchsgüter und nicht verlängerbare Käufe gedacht ist.
Die Liste der Fakten, die Apple von Ihnen abfragt, wenn ein Kunde eine Rückerstattung möchte, ist deutlich kürzer geworden. Die Send Consumption Information-Nutzlast, die eine Antwort, die ein Entwickler in eine App Store-Rückerstattungsentscheidung einspeisen darf, hatte früher zwölf Felder. Jetzt hat sie fünf. Apple hat sie rund um die WWDC24 gekürzt und die meisten der alten Fragen zur Kontoprofilierung in zwei einfache Fragen und eine Zahl überführt. Weniger Felder ist keine kleine Änderung. Es verändert, welche Belege Apple gewichtet, und es verändert, bei welchen Feldern Sie sich keinen Fehler leisten können.
Hier ist, warum das Ihre Aufmerksamkeit verdient und nicht bloß eine Schema-Notiz ist. Diese Nutzlast ist der einzige Moment in einer Apple-Rückerstattung, in dem Ihre Version der Geschichte die Entscheidung erreicht. Eine Rückerstattung für Verbrauchsgüter macht Umsätze rückgängig, für deren Lieferung Sie bereits echtes Geld ausgegeben haben, und die fünf Felder sind die Art, wie Sie Apple mitteilen, dass das Produkt geliefert und genutzt wurde. Verpassen Sie das 12-Stunden-Fenster oder füllen Sie ein Feld falsch aus, entscheidet Apple allein auf Grundlage der Kundenreklamation.
Was Send Consumption Information ist
Send Consumption Information ist der App Store Server API-Endpunkt, den Sie aufrufen, nachdem Apple Ihrem Server eine CONSUMPTION_REQUEST-Benachrichtigung gesendet hat. Diese Benachrichtigung bedeutet, dass ein Kunde Apple um eine Rückerstattung für einen In-App-Kauf gebeten hat und Apple Ihre Eingabe möchte, bevor es entscheidet. Sie antworten, indem Sie einen kleinen JSON-Body, den ConsumptionRequest, per PUT an den Endpunkt senden. Apple liest ihn, wägt ihn gegen die Historie des Kunden ab und trifft die Entscheidung. Sie entscheiden nie über die Rückerstattung. Sie liefern Fakten.
Der Body ist die gesamte Schnittstelle. Es gibt kein separates Formular, keinen Einspruch und keine zweite Übermittlung, die zählt. Was auch immer Sie in dieser einen Nutzlast senden, ist Ihr gesamter Fall, sodass die Bedeutung jedes Feldes mehr zählt, als die Feldanzahl vermuten lässt.
Die fünf Felder, die Apple jetzt abfragt
Der aktuelle ConsumptionRequest hat fünf Mitglieder. Drei sind erforderlich und zwei sind optional. Alles, was Apple früher über das Konto des Kunden abfragte, seine Kontodauer, seine gesamten Ausgaben, seine gesamten Rückerstattungen, seine Spielzeit, wurde aus dem entfernt, was Sie senden.
| Feld | Erforderlich | Typ | Was es trägt |
|---|---|---|---|
| customerConsented | Ja | Boolean | Ob der Kunde zugestimmt hat, Verbrauchsdaten mit Apple zu teilen |
| deliveryStatus | Ja | String | Ob Ihre App ein funktionierendes Produkt geliefert hat |
| sampleContentProvided | Ja | Boolean | Ob Sie vor dem Kauf eine kostenlose Probe oder Testversion angeboten haben |
| consumptionPercentage | Nein | Integer | Wie viel des Kaufs verbraucht wurde, in milliunits |
| refundPreference | Nein | String | Ihr bevorzugtes Ergebnis für die Rückerstattungsanfrage |
customerConsented ist die Schranke
customerConsented ist ein Boolean, und es ist das Feld, das entscheidet, ob Sie überhaupt etwas senden. Es hält fest, ob der Kunde zugestimmt hat, dass Sie Verbrauchsdaten mit Apple teilen. Apples Vorgabe ist eindeutig: Wenn der Kunde nicht zugestimmt hat, senden Sie die Verbrauchsinformationen nicht. Das ist also kein Feld, das Sie auf true setzen, um Ihren Fall zu stärken. Es spiegelt ein echtes Ja oder Nein wider, das Ihnen bereits vorliegen muss, und ein false hier bedeutet, dass der Rest der Nutzlast nicht gesendet werden sollte.
deliveryStatus ist das Feld, das Rückerstattungen bewegt
deliveryStatus ist ein String-Enum, und es ist der stärkste Hebel, den Sie haben. Es teilt Apple mit, ob Ihre App tatsächlich einen funktionierenden In-App-Kauf geliefert hat. Ein Wert sagt ja. Die anderen vier sagen nein, jeder aus einem anderen Grund, und jeder teilt Apple mit, dass der Kunde eine berechtigte Beschwerde hat.
| Wert | Was es Apple mitteilt |
|---|---|
| DELIVERED | Die App hat einen funktionierenden In-App-Kauf geliefert |
| UNDELIVERED_QUALITY_ISSUE | Der Kauf wurde wegen eines Qualitätsproblems nicht geliefert |
| UNDELIVERED_WRONG_ITEM | Der Kunde hat den falschen Artikel erhalten |
| UNDELIVERED_SERVER_OUTAGE | Ein Serverausfall hat die Lieferung gestoppt |
| UNDELIVERED_OTHER | Der Kauf wurde aus einem anderen Grund nicht geliefert |
sampleContentProvided beantwortet eine Fairnessfrage
sampleContentProvided ist ein Boolean. Es hält fest, ob Sie dem Kunden eine kostenlose Probe, eine Testversion oder klare Informationen darüber gegeben haben, was der Kauf bewirkt, bevor er gekauft hat. Ein true hier ist ein kleines Fairnesssignal: Der Kunde hatte die Chance zu wissen, was er kaufte. Es entscheidet nichts für sich allein, aber es ist eines von nur drei erforderlichen Feldern, sodass Apple es eindeutig in jeder Antwort haben möchte.
consumptionPercentage ist jetzt eine Zahl, kein Status
Das ist das Feld, das sich am meisten verändert hat. Die alte Nutzlast hatte consumptionStatus, ein vierstufiges Enum: UNDECLARED, NOT_CONSUMED, PARTIALLY_CONSUMED, FULLY_CONSUMED. Die neue Nutzlast ersetzt es durch consumptionPercentage, eine ganze Zahl gemessen in milliunits. 100,000 milliunits bedeutet, dass der Artikel vollständig verbraucht wurde, also sind 50,000 die Hälfte und 0 unberührt. Eine präzise Zahl schlägt einen Vier-Wege-Eimer, denn sie erlaubt Ihnen zu sagen, dass ein Kunde 90 Prozent eines Guthabenpakets verbraucht hat, statt auf teilweise verbraucht abzurunden.
Ein Vorbehalt, über den viele stolpern. Bei automatisch verlängerbaren Abonnements ermittelt Apple den Verbrauch selbst aus der verstrichenen Zeit, sodass consumptionPercentage für Verbrauchsgüter und nicht verlängerbare Käufe gedacht ist. Senden Sie es, wo es zutrifft, und lassen Sie Apple es ableiten, wo es das nicht tut.

refundPreference benennt eine Präferenz, kein Urteil
refundPreference ist eine optionale Zeichenkette, und hier teilen Sie Apple mit, welches Ergebnis Sie bevorzugen würden. Auch dieses Feld hat seine Form geändert. Das alte Feld war eine Zahl mit Werten wie prefer-grant, prefer-decline und no-preference. Das neue ist eine benannte Zeichenkette mit drei Werten.
| Wert | Worum Sie bitten |
|---|---|
| GRANT_FULL | Sie würden bevorzugen, dass Apple eine volle Rückerstattung gewährt |
| GRANT_PRORATED | Sie würden eine teilweise Rückerstattung bevorzugen, die das Genutzte widerspiegelt |
| DECLINE | Sie würden bevorzugen, dass Apple die Rückerstattung ablehnt |
Was Apple gestrichen hat und warum es zählt
Der alte ConsumptionRequest hatte zwölf Felder. Sieben davon sind aus dem, was Sie senden, verschwunden. accountTenure, lifetimeDollarsPurchased, lifetimeDollarsRefunded, playTime, userStatus, platform und appAccountToken waren die kontoprofilierende Hälfte der Nutzlast, die Felder, die Sie baten, einen Kunden danach einzuordnen, wie lange er ein Konto hatte, wie viel er ausgegeben hatte, wie viel ihm rückerstattet worden war und wie lange er die App genutzt hatte.
Apple hat sie aus einem beachtenswerten Grund gestrichen. Diese Felder verlangten von Entwicklern, ein Profil des Kunden herauszugeben, und die meisten Entwickler ließen sie entweder undeklariert oder rieten. Die fünf, die bleiben, betreffen den Kauf und die Lieferung, Fakten, die Sie aus Ihren eigenen Systemen tatsächlich überprüfen können. Die Verschiebung geht davon weg, wer der Kunde ist, hin zu dem, was mit diesem konkreten Kauf geschah.
| Alte Nutzlast | Aktuelle Nutzlast | |
|---|---|---|
| Felder gesamt | 12 | 5 |
| Erforderliche Felder | Praktisch keine erzwungen | 3 |
| Verbrauchssignal | consumptionStatus, vier Eimer | consumptionPercentage, exakte milliunits |
| Rückerstattungspräferenz | Numerisches Enum | Benannte Zeichenkette, 3 Werte |
| Kontoprofilierung | Kontodauer, Lebensausgaben, Rückerstattungen, Spielzeit, Status | Entfernt |
Der Endpunkt und die Uhr
Sie senden die Nutzlast per HTTP PUT an den Send Consumption Information-Endpunkt, adressiert über die Transaktions-ID des strittigen Kaufs: PUT /inApps/v1/transactions/consumption/{transactionId}. Ein Erfolg gibt 202 Accepted zurück, und der Antwort-Body ist leer. Diese leere Antwort ist zu erwarten, kein Fehler. Sie bestätigt, dass Apple Ihre Daten in die Warteschlange gestellt hat, und sagt Ihnen nichts über das schließliche Ergebnis, das später als REFUND- oder REFUND_DECLINED-Benachrichtigung eintrifft.
Die Uhr ist der Teil, den Sie nicht dehnen können. Apple gibt Ihnen 12 Stunden ab dem CONSUMPTION_REQUEST zum Antworten. Nur Ihre erste Antwort wird verwendet, sodass die erste Nutzlast die vollständige und korrekte sein muss. Apple kann den CONSUMPTION_REQUEST für denselben Kauf mehr als einmal senden, aber die Frist ist bei jedem fest, und eine manuelle Prüfung passt über Zeitzonen und Wochenenden hinweg selten in 12 Stunden.
Was ein falsch behandeltes Feld Sie kostet
Das Geld hat das Haus verlassen, bevor es die Rückerstattung tat
Eine Rückerstattung für Verbrauchsgüter ist keine saubere Umkehrung. Bis ein Kunde sein Geld für ein Paket Guthaben oder eine Charge KI-Generierungen zurückverlangt, haben Sie bereits für die Lieferung ausgegeben: GPU-Inferenz bei jeder Anfrage, Modell-API-Aufrufe von Drittanbietern, die pro Token abgerechnet werden, Speicher für alles, was Sie produziert haben, und jede an diese Nutzung gebundene Ersteller- oder Partnerauszahlung. Der Store-Preis geht an den Kunden zurück. Ihre Lieferkosten kommen nicht zu Ihnen zurück. Eine Rückerstattung, die Sie hätten anfechten können, ist also kein Nullsummenereignis, sie ist ein Nettoverlust von allem, was Sie zur Bedienung des Kontos bezahlt haben.
Die fünf Felder sind die Art, wie Sie vermeiden, zweimal zu zahlen
deliveryStatus auf DELIVERED gesetzt und ein hoher consumptionPercentage sind die beiden Fakten, die Apple mitteilen, dass der Kunde das Produkt erhalten und genutzt hat. Sie sind Ihr Beleg, dass die Rechenleistung, die API-Aufrufe und der Speicher alle ihre Arbeit getan haben. Lassen Sie die Nutzlast ungesendet, und Apple erfährt das nie. Es entscheidet auf Grundlage der Kundenreklamation, die Rückerstattung geht eher durch, und Sie tragen sowohl den rückgängig gemachten Umsatz als auch die dahinterstehenden Lieferkosten.
Rückbuchungen sind die schlimmere Tür, und Schweigen weist auf sie hin
Ein Kunde, der über Apples Rückerstattungsablauf keine Zufriedenheit erlangt, kann die Belastung immer noch bei seiner Bank anfechten. Eine Karten-Rückbuchung ist endgültig, sie bringt eine pauschale Streitfallgebühr mit sich, und sie nimmt die Entscheidung aus Apples Händen und Ihren. Den CONSUMPTION_REQUEST gut zu beantworten hält den Streitfall innerhalb von Apples System, wo Sie ein Mitspracherecht haben. Ihn zu ignorieren schiebt Grenzfälle in den einen Kanal, in dem Sie keines haben.
Wie RefundHalt damit umgeht
Die fünf Felder sehen einfach aus, bis Sie sie korrekt ausfüllen müssen, innerhalb von 12 Stunden, bei jedem CONSUMPTION_REQUEST, adressiert an die richtige Transaktion. RefundHalt fängt die Benachrichtigung ab, liest Ihre eigenen Liefer- und Nutzungsaufzeichnungen für diesen Kauf und sendet die Nutzlast automatisch, bevor das Fenster schließt. deliveryStatus spiegelt wider, was Ihre Logs tatsächlich zeigen, consumptionPercentage stammt aus tatsächlicher Nutzung statt aus einer Schätzung, und refundPreference folgt der Richtlinie, die Sie einmal festgelegt haben. Sie erhalten die anfechtbare Rückerstattung mit Belegen geprüft, nicht eine verpasste Frist und eine ohne Sie getroffene Entscheidung.
Häufig gestellte Fragen
- Wie viele Felder hat Apples Send Consumption Information jetzt?
- Fünf. Drei sind erforderlich, customerConsented, deliveryStatus und sampleContentProvided, und zwei sind optional, consumptionPercentage und refundPreference. Die vorherige Version der Nutzlast hatte zwölf Felder, und Apple entfernte die kontoprofilierenden wie accountTenure, lifetimeDollarsPurchased und userStatus.
- Was bedeutet deliveryStatus in einem consumption request?
- deliveryStatus teilt Apple mit, ob Ihre App einen funktionierenden In-App-Kauf geliefert hat. DELIVERED bedeutet, dass sie es tat. Die vier UNDELIVERED-Werte, UNDELIVERED_QUALITY_ISSUE, UNDELIVERED_WRONG_ITEM, UNDELIVERED_SERVER_OUTAGE und UNDELIVERED_OTHER, sagen jeweils, dass sie es nicht tat, aus einem angegebenen Grund. Es ist das stärkste Signal in der Nutzlast, daher muss es zu Ihren eigenen Logs passen.
- Ist consumptionPercentage ein Prozentsatz oder eine rohe Zahl?
- Es ist eine ganze Zahl gemessen in milliunits, kein einfacher Prozentsatz. 100,000 milliunits bedeutet, dass der Kunde den Kauf vollständig verbraucht hat, also sind 50,000 die Hälfte und 0 unberührt. Es ersetzte das alte consumptionStatus-Enum, das nur vier Eimer von nicht verbraucht bis vollständig verbraucht hatte.
- Stoppt es die Rückerstattung, refundPreference auf DECLINE zu setzen?
- Nein. refundPreference benennt Ihr bevorzugtes Ergebnis, es entscheidet nichts. DECLINE teilt Apple mit, dass Sie es lieber nicht rückerstattet hätten, und GRANT_FULL oder GRANT_PRORATED sagen das Gegenteil, aber Apple wägt Ihre Präferenz gegen die Historie des Kunden und seine eigene Richtlinie ab und trifft die endgültige Entscheidung.
- Was, wenn der Kunde dem Teilen von Verbrauchsdaten nicht zugestimmt hat?
- Dann sollten Sie die Nutzlast nicht senden. customerConsented ist ein erforderlicher Boolean, und Apples Vorgabe lautet, dass Sie auf den CONSUMPTION_REQUEST gar nicht antworten, wenn der Kunde dem Teilen von Verbrauchsdaten nicht zugestimmt hat. Zustimmung ist ein echtes Ja oder Nein, das Ihnen bereits vorliegen muss, kein Wert, den Sie auf true setzen, um Ihrem Fall zu helfen.
- Wie lange habe ich Zeit, Verbrauchsinformationen zu senden?
- 12 Stunden ab dem Moment, in dem Apple die CONSUMPTION_REQUEST-Benachrichtigung sendet. Sie antworten mit einem PUT an den Send Consumption Information-Endpunkt, und ein Erfolg gibt 202 Accepted mit einem leeren Body zurück. Nur Ihre erste Antwort wird verwendet, sodass die erste Nutzlast vollständig sein muss, und ein manueller Prozess passt selten in das Fenster.
Quellen und weiterführende Informationen
- Apple Developer: ConsumptionRequest
- Apple Developer: Send Consumption Information
- Apple Developer: Send Consumption Information V1
- Apple Developer: deliveryStatus
- Apple Developer: consumptionPercentage
- Apple Developer: refundPreference
- Apple Developer: Explore App Store server APIs for In-App Purchase (WWDC24)
RefundHalt
Der Rückerstattungs-Autopilot für App Store und Google Play
Weiterlesen
Es gibt einen Endpunkt, der die komplette App Store refund history eines Kunden zurückgibt, und hier steht, was er liefert
Apples Get Refund History Endpunkt gibt die vollständige App Store refund history eines Kunden als signierte Transaktionen zurück. Hier finden Sie jedes Feld, wie das revision-Token paginiert, warum es pro Kunde und nicht pro App gilt, und was Sie ein übersehener Refund kostet.
Deine App kann ein In-App-Formular für Rückerstattungsanträge anzeigen, und das passiert bei Apple, nachdem ein Kunde auf Absenden tippt
Mit Apples In-App-Rückerstattungsantrag kann ein Kunde eine Rückerstattung anfordern, ohne deine App zu verlassen, über ein Formular, das Apple erstellt und prüft. Hier erfährst du, was beginRefundRequest zurückgibt, welche CONSUMPTION_REQUEST- und 48-Stunden-Uhren es auf deinem Server startet und ob sich der Button lohnt.