Draait je app nog op App Store Server Notifications V1? Dan vraagt Apple je nooit iets over terugbetalingen van abonnementen
Apple heeft App Store Server Notifications V1 in juni 2023 als verouderd gemarkeerd, en V1 heeft nooit de CONSUMPTION_REQUEST voor abonnementen, REFUND_DECLINED of REFUND_REVERSED gekregen. Dit mist een V1-server, dit kost het je, en zo stap je over naar V2 zonder een terugbetaling te missen.

Belangrijkste inzichten
- Apple heeft App Store Server Notifications V1 en het verifyReceipt-endpoint op 5 juni 2023 als verouderd gemarkeerd. Beide werken nog, krijgen geen nieuwe functies en hebben geen aangekondigde einddatum.
- De V1-documentatie van Apple noemt CONSUMPTION_REQUEST alleen voor verbruiksartikelen (consumables). Consumption requests voor automatisch verlengbare abonnementen zijn in april 2024 aan App Store Server Notifications V2 toegevoegd.
- REFUND_DECLINED en REFUND_REVERSED bestaan alleen in App Store Server Notifications V2. Een V1-server hoort dus nooit dat Apple een terugbetaling heeft afgewezen of teruggedraaid.
- Op V1 komt een terugbetaling door Apple van een automatisch verlengbaar abonnement binnen als CANCEL. Op V2 komt die binnen als REFUND, met een revocationDate en revocationReason op de ondertekende transactie.
- Apple probeert een mislukte V2-melding vijf keer opnieuw, verspreid over ongeveer een week, na 1, 12, 24, 48 en 72 uur. Een mislukte V1-melding krijgt drie nieuwe pogingen, na 6, 24 en 48 uur, en is niet terug te halen via Get Notification History.
- Zodra een app in App Store Connect naar V2 is overgezet, komen nieuwe meldingen meteen in V2-formaat binnen. V1-meldingen die al in een herhaalpoging zitten, kunnen nog ongeveer 78 uur blijven binnenkomen.
Version 1 van App Store Server Notifications levert nog steeds terugbetalingen af, maar laat precies de melding weg waarmee je een terugbetaling van een abonnement kunt betwisten. Apple heeft V1 op 5 juni 2023 samen met het verifyReceipt-endpoint als verouderd gemarkeerd en sindsdien elke nieuwe terugbetalingsfunctie alleen aan V2 toegevoegd. Staat er in je App Store Connect-instellingen nog Version 1, dan kan Apple over een terugbetaling van een abonnement beslissen zonder je server ooit een CONSUMPTION_REQUEST te sturen. Je verliest daar geen discussie. Je wordt er gewoon nooit voor uitgenodigd.
Wat het verouderen van App Store Server Notifications V1 betekent
Verouderd betekent niet uitgeschakeld. Een Apple-engineer schreef in juni 2023 op de ontwikkelaarsforums dat verifyReceipt en V1-meldingen blijven werken tot er een einddatum wordt aangekondigd, dat die datum nog niet vaststond en dat ontwikkelaars vooraf worden ingelicht. Meer dan drie jaar later biedt App Store Connect nog steeds "Version 1 (deprecated)" als keuze aan wanneer je een server-URL instelt.
Wat verouderd wel betekent, is stilstand. Elke wijziging in Apples changelog voor meldingen sinds juni 2023 is een V2-wijziging: nieuwe velden op de ondertekende transactie, nieuwe meldingstypen, de gegevens over 12-maands verplichtingen die in april 2026 zijn toegevoegd. Een V1-server ziet daar niets van.
Welke terugbetalingssignalen een V1-server nooit ontvangt
Zo bereiken dezelfde terugbetalingsgebeurtenissen een V1-server en een V2-server, volgens Apples documentatie voor elke versie.
| Terugbetalingsgebeurtenis | Version 1 | Version 2 |
|---|---|---|
| Klant vraagt Apple een verbruiksartikel terug te betalen | CONSUMPTION_REQUEST | CONSUMPTION_REQUEST |
| Klant vraagt Apple een automatisch verlengbaar abonnement terug te betalen | Niet vermeld in de V1-documentatie | CONSUMPTION_REQUEST, sinds april 2024 |
| Apple betaalt een automatisch verlengbaar abonnement terug | CANCEL | REFUND |
| Apple betaalt een verbruiksartikel, niet-verbruiksartikel of niet-verlengbaar abonnement terug | REFUND | REFUND |
| Apple wijst een terugbetaling af die de klant in je app heeft gestart | Niet beschikbaar | REFUND_DECLINED |
| Apple draait een al toegekende terugbetaling terug | Niet beschikbaar | REFUND_REVERSED |
| Je haalt meldingen op die tijdens een storing zijn gemist | Niet beschikbaar | Get Notification History |
Krijgt V1 eigenlijk nog wel CONSUMPTION_REQUEST?
Ja, voor verbruiksartikelen. Apples V1-referentie beschrijft CONSUMPTION_REQUEST als de melding die wordt verstuurd wanneer een klant een terugbetaling aanvraagt voor een verbruiksartikel. Een Apple-engineer bevestigde in 2023 op de forums dat V1-consumption requests worden verstuurd bij terugbetalingen die daarvoor in aanmerking komen. Het gat zit bij abonnementen. Apples changelog dateert consumption requests voor abonnementen op 11 april 2024, in V2, en volgens de documentatie van Send Consumption Information stuurt Apple het verzoek via je V2-endpoint.
Waarom CANCEL op V1 makkelijk verkeerd wordt gelezen
Als Apple op V1 een abonnement terugbetaalt, is het meldingstype CANCEL, vaak samen met DID_CHANGE_RENEWAL_STATUS. Veel servers behandelen elke cancel alsof de klant automatisch verlengen heeft uitgezet, waardoor de toegang doorloopt tot het einde van de periode. V2 neemt die dubbelzinnigheid weg. Een terugbetaling komt binnen als REFUND, en een klant die verlengen uitzet, komt binnen als DID_CHANGE_RENEWAL_STATUS met subtype AUTO_RENEW_DISABLED.
Wat op V1 blijven je aan geld kost
Apple beslist over elke terugbetaling in de App Store. De CONSUMPTION_REQUEST is het enige moment waarop je gebruiksgegevens die beslissing bereiken, en Apple vraagt je binnen 12 uur te antwoorden. Op V1 slaan terugbetalingen van abonnementen die stap over.
Hier een uitgewerkt voorbeeld met illustratieve cijfers. Stel dat je app een maandabonnement van $9.99 verkoopt met AI-beeldgeneraties. Een abonnee maakt in een maand 400 generaties, en elke generatie kost je echt geld aan modelinferentie. Daarna vraagt die abonnee Apple om een terugbetaling.
| Kostenpost | V1-server | V2-server |
|---|---|---|
| Jouw deel van de betaling | Terugbetaald als Apple akkoord gaat | Terugbetaald als Apple akkoord gaat |
| Rekenkracht, API-calls en opslag van die maand | Al betaald, niet terug te halen | Al betaald, niet terug te halen |
| Kans om Apple de 400 generaties te laten zien | Geen | Eén CONSUMPTION_REQUEST, 12 uur |
| Horen dat Apple de terugbetaling heeft afgewezen | Nooit | REFUND_DECLINED |
| Horen dat een terugbetaling is teruggedraaid | Nooit | REFUND_REVERSED |
De betaling die je kwijtraakt, is jouw deel, niet de verkoopprijs. Apple betaalt in het eerste jaar van betaalde service van een abonnee 70% van de abonnementsprijs uit, min toepasselijke belastingen, en daarna, of voor leden van het App Store Small Business Program, 85%. De rekening voor rekenkracht krimpt niet mee. Inferentie, API-calls naar derden en bestandsopslag waren al betaald toen de klant ze gebruikte.
De twee ontbrekende uitkomstmeldingen kosten ook geld. Zonder REFUND_REVERSED herstelt een server die bij een terugbetaling de toegang heeft ingetrokken die toegang nooit wanneer Apple de terugbetaling terugdraait. Een betalende klant blijft dan buitengesloten en mailt de support. Zonder REFUND_DECLINED kun je een terugbetaling die nog loopt niet onderscheiden van een die Apple heeft afgewezen.

Zo migreer je van V1 naar V2 zonder een terugbetaling te missen
Overstappen naar V2 is een serverwijziging plus één instelling. Apples eigen uitleg op de forums, van een App Store Commerce Engineer in december 2025, beschrijft wat er gebeurt op de dag dat je overschakelt.
Bouw het V2-endpoint voordat je de instelling omzet
- Accepteer een POST waarvan de body een signedPayload bevat. V2-payloads zijn JWS en door Apple ondertekend, dus controleer de handtekening voordat je iets van de inhoud vertrouwt. Apples App Store Server Library doet dit voor je.
- Zet je afhandeling van CANCEL om naar REFUND, en behandel REFUND_DECLINED en REFUND_REVERSED als nieuwe gevallen.
- Beantwoord CONSUMPTION_REQUEST voor abonnementen met Send Consumption Information, en alleen als de klant toestemming heeft gegeven om gegevens met Apple te delen. Apple zegt dat je zonder toestemming niet moet antwoorden.
- Geef bij succes HTTP 200 tot 206 terug. Elke 40x of 50x laat Apple het opnieuw proberen.
Zet de instelling om in App Store Connect
Open in App Store Connect je app, kies App-informatie onder Algemeen, zoek App Store Server Notifications en stel de Production Server URL in op je V2-endpoint, met Version 2 geselecteerd. Wil je eerst testen, doe dan hetzelfde voor de sandbox-URL en gebruik Request a Test Notification om te controleren of je server antwoordt.
Laat de V1-handler ongeveer drie dagen draaien
Na de overstap komen nieuwe meldingen meteen in V2-formaat binnen, voor elk abonnement, oud of nieuw. V1-meldingen die al in een herhaalpoging zitten, blijven in V1-formaat komen tot ze slagen of geen pogingen meer over hebben. Apple plaatst de laatst mogelijke V1-poging op ongeveer 78 uur, dat is 6 plus 24 plus 48. Laat de oude handler langer draaien dan dat en verwijder hem daarna.
Vervang meteen ook verifyReceipt
verifyReceipt werd op dezelfde dag als verouderd gemarkeerd. Het endpoint antwoordt nog, maar Apple verwijst servers in plaats daarvan naar de App Store Server API. Get Transaction Info geeft één ondertekende transactie terug, Get Transaction History geeft de geschiedenis van een klant terug, en Get Refund History toont elke terugbetaalde aankoop van een klant. Samen met V2-meldingen dekken ze af waar de meeste servers bonnetjes voor gebruikten, inclusief het veld cancellation_date dat vroeger een terugbetaling in een bonnetje markeerde.
RefundHalt koppelt met App Store Server Notifications V2 en beantwoordt elke CONSUMPTION_REQUEST binnen het venster van 12 uur, met het gebruik dat je app al registreert. Zit je nog op V1, dan is de overstap de stap die dat allemaal mogelijk maakt.
Veelgestelde vragen
- Wordt App Store Server Notifications V1 uitgeschakeld?
- Nog niet. Apple heeft V1 en verifyReceipt op 5 juni 2023 als verouderd gemarkeerd, en beide werken nog. Apple heeft gezegd dat er nog geen einddatum is en dat ontwikkelaars vooraf worden ingelicht. Tot die tijd krijgt V1 geen nieuwe functies.
- Krijg ik CONSUMPTION_REQUEST-meldingen op V1?
- Volgens Apples V1-documentatie alleen voor verbruiksartikelen. Consumption requests voor automatisch verlengbare abonnementen zijn in april 2024 aan V2 toegevoegd, en Apple stuurt ze via je V2-endpoint. Verkoop je abonnementen en blijf je op V1, dan kun je die terugbetalingsverzoeken niet beantwoorden.
- Hoe ziet een terugbetaling van een abonnement eruit op V1 en op V2?
- Op V1 komt die binnen als CANCEL, vaak samen met DID_CHANGE_RENEWAL_STATUS. Op V2 komt die binnen als REFUND, met een revocationDate en revocationReason op de ondertekende transactie. V2 stuurt ook REFUND_DECLINED wanneer Apple een in je app gestarte terugbetaling afwijst, en REFUND_REVERSED wanneer Apple een toegekende terugbetaling terugdraait.
- Wat gebeurt er met meldingen als ik van V1 naar V2 overstap?
- Nieuwe meldingen komen kort na de overstap in V2-formaat binnen, voor alle abonnementen. V1-meldingen die al opnieuw worden geprobeerd, blijven in V1-formaat komen tot ze slagen of hun pogingen op zijn, volgens Apple tot ongeveer 78 uur na de overstap. Laat beide handlers in die periode draaien.
- Kan ik na de overstap naar V2 terug naar V1?
- Ja, via het endpoint Modify an App van de App Store Connect API, zoals Apples technote TN3180 beschrijft. Apple noemt het een ongebruikelijk geval en markeert V1 nog steeds als verouderd. Teruggaan betekent dus dat je consumption requests voor abonnementen en de nieuwere terugbetalingsmeldingen opgeeft.
Bronnen en verder lezen
- Apple Developer Documentation: App Store Server Notifications changelog
- Apple Developer Documentation: notification_type (Version 1)
- Apple Developer Documentation: notificationType (Version 2)
- Apple Developer Documentation: Responding to App Store Server Notifications
- Apple Developer Documentation: Send Consumption Information V1
- Apple Developer Documentation: App Store Receipts (verifyReceipt deprecated)
- Apple Developer Documentation: TN3180, Reverting to App Store Server Notifications V1
- App Store Connect Help: Enter server URLs for App Store Server Notifications
- Apple Developer Forums: When will the verifyReceipt API be deprecated? (Apple staff reply, June 2023)
- Apple Developer Forums: Switching App Store Server Notifications from V1 to V2 (Apple staff reply, December 2025)
- Apple Developer: Auto-renewable subscriptions (net revenue after one year of paid service)
RefundHalt
De terugbetalingsautopiloot voor de App Store en Google Play
Lees verder
Een terugbetaling op Apples maandabonnement met 12 maanden looptijd kan het hele jaar beëindigen, of maar één maand ervan
Bij Apples maandabonnement met een verplichting van 12 maanden vallen terugbetalingen in twee gevallen uiteen. Wordt een eerdere maand terugbetaald, dan loopt de facturering door. Wordt de huidige maand terugbetaald, dan eindigt de verplichting direct. Zo komt elk geval bij je server binnen, dit kost het, en dit stuur je naar Apple.
Het terugbetalingsbeleid van je app kan Apple of Google niet overrulen, dus schrijf het beleid dat past bij wat er echt gebeurt
Een terugbetalingsbeleid voor je app bindt je alleen waar jij zelf terugbetaalt. Apple betaalt elke App Store-aankoop zelf terug, terwijl Google Play terugbetalingen na 48 uur aan jou overlaat. Dit staat er in elke overeenkomst, dit kost een onvoorzichtige belofte en deze clausules zijn de moeite waard.