Якщо ваш застосунок досі працює на 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
Читайте далі
Збори Google Play за альтернативну оплату в США діють з 1 жовтня, а повернення коштів за цими продажами досі на вас
З 1 жовтня 2026 року Google Play стягує сервісний збір із покупок у США, здійснених через альтернативну оплату або зовнішні посилання на контент. Жодних повернень коштів Google при цьому не веде. Розбираємо, що кажуть таблиці зборів, як повідомляти Google про повернення і скільки вам коштує кожне з них.
DeviceCheck від Apple пам'ятає телефон зловмисника, який зловживає поверненнями, навіть після реєстрації з новим акаунтом
Блокування акаунтів та ідентифікатори покупок перестають працювати, щойно зловмисник створює новий акаунт. DeviceCheck від Apple і функція пригадування пристрою (device recall) у Google Play зберігають кілька бітів для кожного пристрою на серверах магазину. Ось що вони зберігають, коли їх встановлювати і скільки вони вам заощаджують.