De App Store order-ID op het bonnetje van een klant vertelt je wat die kocht en of Apple het al heeft terugbetaald
Apples endpoint Look Up Order ID zet de order-ID van een App Store bon om in ondertekende transacties, inclusief terugbetalingsdatum en reden. Zo gebruik je het bij terugbetalingsmails, dit kan het niet, en zo verhoudt de order-ID van Google Play zich ertoe.

Belangrijkste inzichten
- Apple mailt bij elke in-app-aankoop een bon met een order-ID, en klanten vinden hun order-ID's ook in hun aankoopgeschiedenis in de App Store.
- Apples App Store Server API endpoint Look Up Order ID (GET /inApps/v1/lookup/{orderId}) geeft bij een geldige order-ID een of meer ondertekende transacties terug, zodat support de productId en purchaseDate ziet zonder te gokken.
- Een gedecodeerde App Store transactie bevat revocationDate en revocationReason, dus een opzoeking van de order-ID laat zien of Apple de aankoop al heeft terugbetaald. Reden 1 betekent dat Apple heeft terugbetaald vanwege een werkelijk of vermeend probleem in de app.
- Look Up Order ID geeft OrderLookupStatus 1 en geen signedTransactions array terug als de order-ID niet geldig is voor jouw app. Dat wijst op een verkeerde bon of een aankoop uit een andere app.
- Look Up Order ID is niet beschikbaar in Apples sandbox-omgeving, en de rate limit in productie is 10 verzoeken per seconde per app, gehandhaafd per uur.
- Ontwikkelaars kunnen geen App Store terugbetalingen doen. Apple beslist erover op reportaproblem.apple.com, en de enige bewijsstap van de ontwikkelaar is binnen 12 uur een CONSUMPTION_REQUEST beantwoorden.
- Google Play mailt een order-ID voor elke eenmalige aankoop en elke abonnementsverlenging, en de ontwikkelaar kan die order-ID in Play Console opzoeken en direct terugbetalen. Volgens Play Console kan een terugbetaling niet worden teruggedraaid.
Voordat je de terugbetalingsmail van een iPhone-klant beantwoordt, vraag je om de App Store order-ID op het Apple-bonnetje. Die ene reeks tekens, door Apples endpoint Look Up Order ID gehaald, vertelt je welk product de klant kocht, wanneer, en of Apple het al heeft terugbetaald. Zonder die ID vergelijk je een screenshot en een e-mailadres met je database en hoop je er het beste van. Met die ID weet je binnen seconden of je praat met een betalende klant, met een klant die Apple al heeft terugbetaald, of met iemand die een bon van een andere app in handen heeft.
Waar de App Store order-ID vandaan komt
Apples documentatie is duidelijk. Als klanten een of meer in-app-aankopen in je app doen, mailt de App Store ze een bon, en die bon bevat een order-ID. Klanten vinden hun order-ID's ook in hun aankoopgeschiedenis in de App Store. Apples aankoopgeschiedenis staat op reportaproblem.apple.com en in de App Store app onder Apps en aankoopgeschiedenis, en toont standaard de laatste 90 dagen, met filters voor oudere aankopen.
De klant heeft de sleutel dus al. Je supportformulier hoeft er alleen om te vragen.
Waarom een e-mailadres niet genoeg is
Apple deelt het e-mailadres van het Apple Account van de klant niet met jou. Het adres dat naar je support mailt, heeft misschien niets te maken met het account dat betaalde. Als je bij de aankoop een appAccountToken instelt, kun je een transactie aan je eigen gebruikers-ID koppelen, maar alleen vanaf jouw kant. De order-ID werkt vanaf de kant van de klant, via een bon die met één tik door te sturen is.
Wat Look Up Order ID teruggeeft
Look Up Order ID hoort bij de App Store Server API en is beschikbaar vanaf versie 1.1.0. Je roept GET https://api.storekit.apple.com/inApps/v1/lookup/{orderId} aan met je ondertekende JWT. Volgens Apple is het antwoord gebaseerd op de in-app-aankoopgeschiedenis van de klant, ongeacht of die de app installeerde, verwijderde of opnieuw installeerde.
| Veld of gedrag | Wat Apples documentatie zegt | Wat support ermee doet |
|---|---|---|
| OrderLookupStatus 0 | Geldige order-ID. Het antwoord bevat een array met een of meer ondertekende transacties | Decodeer ze allemaal en lees de aankoop |
| OrderLookupStatus 1 | Het antwoord bevat geen signedTransactions array | Behandel de order-ID als ongeldig voor je app. Vraag om de juiste bon |
| productId en purchaseDate | Apple noemt deze velden voor klantenondersteuning | Bevestig wat er gekocht is en wanneer |
| revocationDate | Het moment waarop de App Store de transactie terugbetaalde of uit Delen met gezin haalde | Als het is ingevuld, heeft Apple de klant al terugbetaald |
| revocationReason | 0: terugbetaald om andere redenen, zoals een onbedoelde aankoop. 1: terugbetaald vanwege een werkelijk of vermeend probleem in je app | Een 1 is een productsignaal, niet alleen een supportticket |
| appAccountToken | De UUID die je bij de aankoop instelde, als je er een instelde | Koppel de bestelling aan je eigen gebruikersrecord |
| price en currency | Apple zegt ze niet te gebruiken voor omzetafstemming | Gebruik de rapporten in App Store Connect voor het geld |
| Sandbox | De endpoint is niet beschikbaar in de sandbox-omgeving | Test alleen met order-ID's uit productie |
| Rate limit | 10 verzoeken per seconde per app, per uur gehandhaafd. Daarboven volgt HTTP 429 met een Retry-After header | Ruim genoeg voor een supportdesk, niet voor bulkscans |
Is de bon geldig voor mijn app?
Dat is de vraag die OrderLookupStatus als eerste beantwoordt. Een 1 betekent dat de order-ID niet bij aankopen in je app hoort. De gewone gevallen zijn een typfout, een bon voor een andere app, of een bon die helemaal niet uit de App Store komt. Betaal niets terug, geef geen tegoed en herstel niets bij een 1. Vraag de klant de bon nog eens te controleren.
Heeft Apple deze aankoop al terugbetaald?
Controleer revocationDate in elke gedecodeerde transactie. Als het is ingevuld, heeft Apple de aankoop al terugbetaald of uit Delen met gezin gehaald, en heeft de klant zijn geld. Je App Store Server Notifications hadden voor dezelfde transactie een REFUND moeten sturen, dus dit is ook een goedkope manier om te bevestigen dat je server de toegang echt heeft ingetrokken.

Wat de order-ID in de App Store niet kan
Hij kan geen terugbetaling doen. Ontwikkelaars hebben geen terugbetaalknop in de App Store. Apple beslist over terugbetalingen, en Apples supportartikel stuurt klanten naar reportaproblem.apple.com, waar ze kiezen voor 'Ik wil graag', dan 'Om terugbetaling vragen', een reden opgeven en het item selecteren. Apple zegt ook dat een openstaande afschrijving pas kan worden terugbetaald als de klant de bon per e-mail heeft.
De enige plek waar je iets te zeggen hebt, is Apples CONSUMPTION_REQUEST. Als een klant Apple om terugbetaling vraagt, kan Apple die melding sturen, en heb je 12 uur om te antwoorden met Send Consumption Information. De opzoeking van de order-ID is een supporthulpmiddel. Ze opent dat venster niet en verlengt het niet.
Wat een terugbetalingsmail kost als je de opzoeking overslaat
Support zonder order-ID is waar geld stilletjes weglekt. Drie patronen komen steeds terug.
- Coulance bovenop een terugbetaling. Apple betaalt de aankoop terug, de klant mailt ook jou, en support geeft gratis credits of een extra maand. Elke credit die je weggeeft draait op rekenkracht, API-aanroepen en opslag die jij betaalt, op een account dat zijn geld al terug heeft.
- Toegang die nooit is ingetrokken. Als je REFUND-afhandeling faalde, blijft de terugbetaalde klant gebruik maken van je dienst. Een opzoeking die een revocationDate toont terwijl je database nog actief zegt, is een bugmelding met een prijskaartje.
- Verkeerd account, verkeerde oplossing. Als je het account achter een doorgestuurde mail herstelt of tegoed geeft terwijl de order-ID van iemand anders is, krijgt iemand betaalde dienstverlening die nooit iets kocht.
Geen van deze patronen heeft een chargeback of deadline nodig om pijn te doen. Het zijn gewoon supportantwoorden zonder feiten. Eén API-aanroep per ticket haalt het gokwerk weg.
Betekent revocationReason 1 dat ik iets fout heb gedaan?
Niet per se. Volgens Apple betekent reden 1 dat Apple de aankoop heeft terugbetaald vanwege een werkelijk of vermeend probleem in je app. Het woord vermeend doet daar veel werk. Maar een cluster van terugbetalingen met reden 1 op één product, na één release, is de duidelijkste productfeedback die Apple je geeft. Tel ze.
Hoe de order-ID van Google Play zich verhoudt
Google Play werkt precies andersom. Volgens Googles billing-documentatie krijgen gebruikers een mail met een unieke order-ID voor elke eenmalige productaankoop, voor de eerste abonnementsaankoop en voor elke terugkerende verlenging, en kun je de order-ID gebruiken om terugbetalingen te beheren in Play Console. Je zoekt in Orderbeheer op order-ID of op het volledige e-mailadres van de gebruiker, en betaalt dan zelf terug.
| Vraag | App Store order-ID | Google Play order-ID |
|---|---|---|
| Waar de klant hem vindt | Bon per e-mail en aankoopgeschiedenis in de App Store | Bon per e-mail voor elke aankoop en elke verlenging |
| Hoe je hem opzoekt | Look Up Order ID in de App Store Server API | Zoeken in Orderbeheer in Play Console |
| Kun je ermee terugbetalen | Nee. Apple beslist | Ja. Volledige terugbetalingen, en gedeeltelijke bij in-app-aankopen en abonnementen |
| Bewijsvenster voor de terugbetaling | CONSUMPTION_REQUEST, 12 uur, Apple beslist | Chargeback-beoordeling via orders.reviewrefund, 24 uur |
| Kan een terugbetaling worden teruggedraaid | Niet door jou | Nee. Volgens Play Console kan een terugbetaling niet worden teruggedraaid |
Op Google Play telt de order-ID zwaarder, omdat jij op de knop drukt. Volgens Play Console verwijdert het terugbetalen van de meest recente abonnementsbestelling het abonnement direct en annuleert het toekomstige verlengingen, terwijl het terugbetalen van een oudere bestelling alleen een terugbetaling is en het abonnement actief laat. Gedeeltelijke terugbetalingen worden alleen ondersteund voor bestellingen vanaf maart 2018, en een betaalde app kun je niet gedeeltelijk terugbetalen.
Zet de order-ID vooraan in je terugbetalingssupport
- Vraag in je supportformulier om de order-ID, met een hint van één regel: die staat in de bonmail van Apple of Google Play.
- Roep op iOS Look Up Order ID aan, decodeer elke transactie en toon support de productId, purchaseDate, revocationDate en revocationReason op één scherm.
- Is OrderLookupStatus 1, stop dan en vraag om de juiste bon. Geef niets.
- Is revocationDate ingevuld, bevestig dan dat de toegang op je server al is ingetrokken en sluit het ticket. Geen coulance erbovenop.
- Is het niet ingevuld en wil de klant zijn geld terug, stuur hem dan naar reportaproblem.apple.com en houd je CONSUMPTION_REQUEST handler klaar voor het venster van 12 uur. RefundHalt beantwoordt dat verzoek met de verbruiksgegevens waar Apple om vraagt.
- Zoek op Android de exacte bestelling op in Play Console voordat je terugbetaalt, en kies bewust tussen alleen terugbetalen en terugbetalen en intrekken.
Veelgestelde vragen
- Hoe zoek ik als ontwikkelaar een App Store order-ID op?
- Roep de App Store Server API endpoint Look Up Order ID aan, GET https://api.storekit.apple.com/inApps/v1/lookup/{orderId}, met je ondertekende JWT. Een geldige order-ID geeft OrderLookupStatus 0 en een of meer ondertekende transacties die je decodeert om de productId, purchaseDate en eventuele terugbetalingsdetails te lezen. De endpoint is niet beschikbaar in de sandbox.
- Waar vindt een klant zijn App Store order-ID?
- In de bon die Apple mailt bij elke in-app-aankoop, en in de aankoopgeschiedenis in de App Store op reportaproblem.apple.com of onder Apps en aankoopgeschiedenis in de App Store app. De aankoopgeschiedenis toont standaard de laatste 90 dagen, met filters voor oudere aankopen.
- Kan ik een App Store aankoop terugbetalen met de order-ID?
- Nee. Ontwikkelaars kunnen geen App Store terugbetalingen doen. Apple beslist als de klant op reportaproblem.apple.com om terugbetaling vraagt. Jouw inbreng is binnen 12 uur Apples CONSUMPTION_REQUEST beantwoorden met Send Consumption Information.
- Hoe zie ik of Apple een aankoop al heeft terugbetaald?
- Zoek de order-ID op en controleer revocationDate in elke gedecodeerde transactie. Als het is ingevuld, heeft Apple de aankoop terugbetaald of uit Delen met gezin gehaald. revocationReason 0 betekent andere redenen, zoals een onbedoelde aankoop, en 1 betekent een werkelijk of vermeend probleem in je app.
- Wat betekent OrderLookupStatus 1?
- Het betekent dat de order-ID niet geldig is voor je app, en het antwoord heeft geen signedTransactions array. Meestal stuurde de klant een bon van een andere app, typte de ID verkeerd, of stuurde een bon die niet uit de App Store komt. Vraag om de juiste bon voordat je iets toekent.
Bronnen en verder lezen
- Apple Developer Documentation: Look Up Order ID
- Apple Developer Documentation: orderId
- Apple Developer Documentation: revocationReason
- Apple Developer Documentation: Identifying rate limits
- Apple Support: See your purchase history for the App Store, iTunes Store, and more
- Apple Support: Request a refund for apps or content that you bought from Apple
- Play Console Help: Refund orders and subscriptions
- Android Developers: Integrate the Google Play Billing Library into your app
RefundHalt
De terugbetalingsautopiloot voor de App Store en Google Play
Lees verder
Terugbetalingen bij iOS-webcheckout komen bij jou terecht in plaats van bij Apple, en de bankgeschillen ook
Amerikaanse iPhone-apps mogen kopers nu naar een webcheckout sturen. Apple zegt dat het bij terugbetalingen voor die aankopen niet kan helpen, dus de terugbetalingen, de chargebacks en de geschilkosten van $15 komen bij jou te liggen. Dit is wat er verandert, wat het kost en hoe je geschillen beperkt.
Een terugbetaling van een betaalde app bereikt je server nooit, dus de app moet het zelf opmerken
Terugbetalingen van vooraf betaalde apps omzeilen elke melding waar je server naar luistert. Google geeft kopers twee uur om te retourneren en verwijdert de app, Apple kan onder jouw overeenkomst binnen 90 dagen terugbetalen, en geen van beide vraagt om bewijs. Dit is wat elke store je vertelt, wat het kost en hoe je het in de app controleert.