Якщо ваш застосунок досі працює на App Store Server Notifications V1, Apple ніколи не питає вас про повернення коштів за підписки
Apple визнала App Store Server Notifications V1 застарілою версією в червні 2023 року, і вона так і не отримала CONSUMPTION_REQUEST для підписок, REFUND_DECLINED чи REFUND_REVERSED. Розповідаємо, що пропускає сервер на V1, скільки це коштує і як перейти на V2, не втративши жодного повернення.

Головне
- Apple визнала застарілими App Store Server Notifications V1 та ендпоінт verifyReceipt 5 червня 2023 року. Обидва досі працюють, не отримують нових функцій, і дату припинення підтримки не оголошено.
- У документації Apple до V1 CONSUMPTION_REQUEST зазначено лише для витратних внутрішніх покупок. Запити на споживання для автоматично поновлюваних підписок додали в App Store Server Notifications V2 у квітні 2024 року.
- REFUND_DECLINED і REFUND_REVERSED існують лише в App Store Server Notifications V2, тому сервер на V1 ніколи не дізнається, що Apple відхилила повернення коштів або скасувала вже надане.
- У V1 повернення коштів Apple за автоматично поновлювану підписку надходить як CANCEL. У V2 воно надходить як REFUND із revocationDate і revocationReason у підписаній транзакції.
- Apple повторює невдале сповіщення V2 п'ять разів протягом приблизно тижня, через 1, 12, 24, 48 і 72 години. Невдале сповіщення V1 отримує три повторні спроби, через 6, 24 і 48 годин, і його не можна відновити через Get Notification History.
- Після перемикання застосунку на V2 в App Store Connect нові сповіщення одразу надходять у форматі V2, тоді як сповіщення V1, що вже перебувають у повторних спробах, можуть надходити ще приблизно 78 годин.
Version 1 App Store Server Notifications досі повідомляє про повернення коштів, але пропускає те єдине сповіщення, яке дає змогу відстояти свою позицію щодо повернення за підписку. Apple визнала V1 застарілою 5 червня 2023 року разом з ендпоінтом verifyReceipt і відтоді додавала кожну функцію, пов'язану з поверненнями, лише у V2. Якщо в налаштуваннях App Store Connect у вас досі вказано Version 1, Apple може ухвалити рішення про повернення коштів за підписку, жодного разу не надіславши вашому серверу CONSUMPTION_REQUEST. Ви не програєте суперечку. Вас просто ніколи до неї не запрошують.
Що означає визнання App Store Server Notifications V1 застарілою
Застаріла не означає вимкнена. Інженер Apple написав на форумах для розробників у червні 2023 року, що verifyReceipt і сповіщення V1 працюватимуть, доки не буде оголошено дату припинення підтримки, що цю дату ще не визначено і що розробників попередять заздалегідь. Понад три роки потому App Store Connect досі пропонує "Version 1 (deprecated)" як варіант під час налаштування URL сервера.
Насправді застарілість означає заморожування. Кожна зміна в журналі змін сповіщень Apple з червня 2023 року стосується V2: нові поля в підписаній транзакції, нові типи сповіщень, дані про 12-місячне зобов'язання, додані у квітні 2026 року. Сервер на V1 не бачить нічого з цього.
Яких сигналів про повернення коштів сервер на V1 не отримує ніколи
Ось як ті самі події повернення коштів доходять до сервера на V1 і сервера на V2, згідно з документацією Apple для кожної версії.
| Подія повернення коштів | Version 1 | Version 2 |
|---|---|---|
| Клієнт просить Apple повернути кошти за витратну покупку | CONSUMPTION_REQUEST | CONSUMPTION_REQUEST |
| Клієнт просить Apple повернути кошти за автоматично поновлювану підписку | Не зазначено в документації V1 | CONSUMPTION_REQUEST, з квітня 2024 року |
| Apple повертає кошти за автоматично поновлювану підписку | CANCEL | REFUND |
| Apple повертає кошти за витратну, невитратну покупку або непоновлювану підписку | REFUND | REFUND |
| Apple відхиляє повернення, яке клієнт ініціював у вашому застосунку | Недоступно | REFUND_DECLINED |
| Apple скасовує вже надане повернення коштів | Недоступно | REFUND_REVERSED |
| Ви відновлюєте сповіщення, пропущені під час збою | Недоступно | Get Notification History |
Чи отримує V1 CONSUMPTION_REQUEST взагалі?
Так, для витратних покупок. Довідник Apple до V1 описує CONSUMPTION_REQUEST як сповіщення, яке надсилається, коли клієнт ініціює запит на повернення коштів за витратну внутрішню покупку. Інженер Apple підтвердив на форумах у 2023 році, що запити на споживання у V1 надходять для придатних повернень. Прогалина стосується підписок. Журнал змін Apple датує запити на споживання для підписок 11 квітня 2024 року, у V2, а документація Send Consumption Information зазначає, що Apple надсилає запит через ваш ендпоінт V2.
Чому CANCEL у V1 легко неправильно зрозуміти
У V1, коли Apple повертає кошти за підписку, тип сповіщення CANCEL, часто разом із DID_CHANGE_RENEWAL_STATUS. Чимало серверів трактують будь-яке скасування як вимкнення клієнтом автопоновлення, і доступ залишається активним до кінця періоду. V2 усуває цю неоднозначність. Повернення коштів надходить як REFUND, а вимкнення клієнтом поновлення надходить як DID_CHANGE_RENEWAL_STATUS з підтипом AUTO_RENEW_DISABLED.
Скільки грошей коштує залишатися на V1
Кожне рішення про повернення коштів в App Store ухвалює Apple. CONSUMPTION_REQUEST є єдиною точкою, де ваші дані про використання потрапляють до цього рішення, і Apple просить відповісти протягом 12 годин. У V1 повернення коштів за підписки оминають цей крок.
Ось розрахунковий приклад з умовними цифрами. Припустімо, ваш застосунок продає щомісячну підписку за $9.99, що включає генерацію зображень за допомогою ШІ. Підписник виконує 400 генерацій за місяць, і кожна коштує вам реальних грошей на інференс моделі. Потім він просить Apple повернути кошти.
| Стаття витрат | Сервер на V1 | Сервер на V2 |
|---|---|---|
| Ваша частка платежу | Повертається, якщо Apple схвалить | Повертається, якщо Apple схвалить |
| Обчислення, виклики API та сховище, використані за той місяць | Уже оплачено, не повертається | Уже оплачено, не повертається |
| Можливість показати Apple 400 генерацій | Немає | Один CONSUMPTION_REQUEST, 12 годин |
| Дізнатися, що Apple відхилила повернення | Ніколи | REFUND_DECLINED |
| Дізнатися, що повернення скасовано | Ніколи | REFUND_REVERSED |
Платіж, який ви втрачаєте, це ваша частка, а не роздрібна ціна. Apple виплачує 70% ціни підписки за вирахуванням застосовних податків протягом першого року платного обслуговування підписника і 85% після цього або для учасників App Store Small Business Program. Рахунок за обчислення разом із цим не зменшується. Інференс, виклики сторонніх API і зберігання файлів були оплачені тоді, коли клієнт ними користувався.
Два відсутні сповіщення про результат теж коштують грошей. Без REFUND_REVERSED сервер, який відкликав доступ після повернення коштів, ніколи не відновить його, коли Apple скасує повернення, тож клієнт, який платить, залишається без доступу і пише в підтримку. Без REFUND_DECLINED ви не відрізните повернення, яке ще розглядається, від того, яке Apple відхилила.

Як перейти з V1 на V2, не втративши жодного повернення
Перехід на V2 це зміна на сервері плюс одне налаштування. Власні рекомендації Apple на форумах від App Store Commerce Engineer у грудні 2025 року пояснюють, що відбувається в день перемикання.
Створіть ендпоінт V2, перш ніж змінювати налаштування
- Приймайте POST, тіло якого містить signedPayload. Корисні навантаження V2 мають формат JWS і підписані Apple, тож перевіряйте підпис, перш ніж довіряти будь-чому всередині. App Store Server Library від Apple робить це за вас.
- Замініть обробку CANCEL на REFUND, а REFUND_DECLINED і REFUND_REVERSED обробляйте як нові випадки.
- Відповідайте на CONSUMPTION_REQUEST для підписок через Send Consumption Information і лише тоді, коли клієнт дав згоду на передавання даних Apple. Apple зазначає, що без згоди відповідати не слід.
- У разі успіху повертайте HTTP від 200 до 206. Будь-який код 40x або 50x змушує Apple повторити спробу.
Змініть налаштування в App Store Connect
В App Store Connect відкрийте свій застосунок, виберіть App Information у розділі General, знайдіть App Store Server Notifications і вкажіть свій ендпоінт V2 як Production Server URL, вибравши Version 2. Якщо хочете протестувати, спершу зробіть те саме для sandbox URL і скористайтеся Request a Test Notification, щоб переконатися, що ваш сервер відповідає.
Залиште обробник V1 працювати приблизно три дні
Після перемикання нові сповіщення одразу надходять у форматі V2 для кожної підписки, старої чи нової. Сповіщення V1, що вже перебувають у повторних спробах, і далі надходять у форматі V1, доки не будуть успішно доставлені або не вичерпають спроби. Apple оцінює останню можливу повторну спробу V1 приблизно у 78 годин, тобто 6 + 24 + 48. Залиште старий обробник працювати довше за цей час, а потім видаліть його.
Заодно замініть verifyReceipt
verifyReceipt визнали застарілим того ж дня. Він досі відповідає, але Apple спрямовує сервери до App Store Server API. Get Transaction Info повертає одну підписану транзакцію, Get Transaction History повертає історію клієнта, а Get Refund History перелічує всі покупки клієнта, за які було повернено кошти. Разом зі сповіщеннями V2 вони покривають усе, для чого більшість серверів використовували квитанції, зокрема поле cancellation_date, яке колись позначало повернення коштів у квитанції.
RefundHalt підключається до App Store Server Notifications V2 і відповідає на кожен CONSUMPTION_REQUEST у межах 12-годинного вікна, використовуючи дані про використання, які ваш застосунок уже записує. Якщо ви досі на V1, саме перемикання робить усе це можливим.
Поширені запитання
- Чи вимикають App Store Server Notifications V1?
- Поки що ні. Apple визнала V1 і verifyReceipt застарілими 5 червня 2023 року, і обидва досі працюють. Apple заявила, що дати припинення підтримки ще немає і що розробників повідомлять заздалегідь. Тим часом V1 не отримує нових функцій.
- Чи отримую я сповіщення CONSUMPTION_REQUEST на V1?
- Лише для витратних покупок, згідно з документацією Apple до V1. Запити на споживання для автоматично поновлюваних підписок додали у V2 у квітні 2024 року, і Apple надсилає їх через ваш ендпоінт V2. Якщо ви продаєте підписки і залишаєтеся на V1, ви не можете відповідати на ці запити на повернення коштів.
- Як виглядає повернення коштів за підписку у V1 порівняно з V2?
- У V1 воно надходить як CANCEL, часто разом із DID_CHANGE_RENEWAL_STATUS. У V2 воно надходить як REFUND із revocationDate і revocationReason у підписаній транзакції. Також V2 надсилає REFUND_DECLINED, коли Apple відхиляє повернення, ініційоване у вашому застосунку, і REFUND_REVERSED, коли Apple скасовує надане повернення.
- Що відбувається зі сповіщеннями, коли я перемикаюся з V1 на V2?
- Невдовзі після перемикання нові сповіщення надходять у форматі V2 для всіх підписок. Сповіщення V1, які вже повторюються, і далі надходять у форматі V1, доки не будуть доставлені або не вичерпають повторні спроби, на що, за оцінкою Apple, іде приблизно 78 годин після перемикання. Тримайте обидва обробники активними протягом цього часу.
- Чи можна повернутися на V1 після переходу на V2?
- Так, через ендпоінт Modify an App в App Store Connect API, як описано в технічній нотатці Apple TN3180. Apple називає це нетиповим випадком і досі позначає V1 як застарілу, тож повернення означає відмову від запитів на споживання для підписок і новіших сповіщень про повернення коштів.
Джерела та додаткове читання
- 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
Автопілот повернень для App Store і Google Play
Читайте далі
Одне повернення коштів за місячною підпискою Apple із 12-місячним зобов'язанням може завершити весь рік або лише один його місяць
Місячна підписка Apple із 12-місячним зобов'язанням ділить повернення коштів на два випадки. Якщо повернути минулий місяць, оплата триває. Якщо повернути поточний місяць, зобов'язання завершується одразу. Розповідаємо, як кожен випадок доходить до вашого сервера, скільки він коштує і що надсилати Apple.
Політика повернення коштів у вашому застосунку не переважає правила Apple чи Google, тож пишіть ту, що відповідає реальності
Політика повернення коштів у застосунку зобовʼязує вас лише там, де повернення справді здійснюєте ви. Apple сама повертає кошти за кожну покупку в App Store, а Google Play передає повернення вам через 48 годин. Ось що кажуть угоди обох магазинів, чого коштує необережна обіцянка і які пункти варто прописати.