Повернення коштів в App Store: що бачить розробник
Автор: Mehdi Azizi
Опубліковано , 8 хв
Рішення про повернення коштів в App Store ухвалює лише Apple. Розробник отримує CONSUMPTION_REQUEST, може відповісти за 12 годин, а рішення дізнається з REFUND.
В App Store повернення коштів схвалює або відхиляє Apple, а не розробник. Клієнт подає запит на сайті Apple або просто з твого застосунку. Якщо ти підключив серверні сповіщення Apple, то в момент запиту отримаєш сповіщення CONSUMPTION_REQUEST, а коли буде рішення, прийде REFUND або REFUND_DECLINED. Між ними в тебе є 12 годин, щоб надіслати дані про споживання і свою перевагу. Але тільки якщо клієнт на це погодився.
Схвалене повернення прибирає покупку з активних прав клієнта і з'являється з мінусом у твоїх звітах про продажі. У цьому гайді я розбираю кожен крок, що саме можна надіслати Apple і що тобі дозволено робити проти зловживань. Правила взято зі сторінок Apple, які я перечитав 3 листопада 2026 року. Реальний випадок я взяв зі сповіщень, які налаштував для своїх застосунків у жовтні.
Хто вирішує, чи повернути кошти в App Store?
Apple, і тільки Apple. Сторінка підтримки Apple описує шлях клієнта: він заходить на reportaproblem.apple.com, вибирає «Request a refund», вказує причину, а потім саму покупку. Apple радить йому чекати на відповідь 24-48 годин.
Клієнт також може попросити повернення прямо з твого застосунку. Для цього в StoreKit є аркуш запиту, доступний починаючи з iOS 15. Apple радить відкривати його з налаштувань акаунта або з меню допомоги. Аркуш показує покупку і список причин, а Apple ухвалює рішення протягом 48 годин.
В обох випадках тобі нічого не треба підтверджувати. Ти можеш лише надати інформацію і свою перевагу. Для Apple це один із кількох критеріїв під час ухвалення рішення.
Що бачить кожна сторона, крок за кроком
| Етап | З боку клієнта | З боку розробника |
|---|---|---|
| Запит | Форма Apple або аркуш у застосунку | Сповіщення CONSUMPTION_REQUEST |
| Протягом 12 годин | Очікування | Можна надіслати дані про споживання |
| Протягом 48 годин | Відповідь Apple | Сповіщення REFUND або REFUND_DECLINED |
| Після схвалення | Гроші повертаються на спосіб оплати | Покупка зникає з активних прав, одиниці з мінусом |
| Після оскарження | Apple скасовує повернення | Сповіщення REFUND_REVERSED, доступ треба повернути |
App Store Connect показує тільки вже схвалені повернення, у розділі Sales and Trends. Сам запит приходить тільки через серверні сповіщення. Без них ти дізнаєшся про повернення вже постфактум.
Серверні сповіщення про повернення коштів
App Store Server Notifications V2 мають п'ять типів, які тут стануть у пригоді. Вони приходять на HTTPS-адресу, вказану в App Store Connect: одну для продакшену і одну для sandbox.
| Сповіщення | Про що повідомляє | Що ти робиш |
|---|---|---|
CONSUMPTION_REQUEST | Клієнт просить повернути кошти | Відповідаєш за 12 годин, якщо є згода |
REFUND | Apple повернула кошти за транзакцію | Забираєш повернений контент або доступ |
REFUND_DECLINED | Apple відхилила запит | Нічого, доступ залишається |
REFUND_REVERSED | Apple скасовує повернення після того, як клієнт його оскаржив | Відновлюєш те, що забрав |
REVOKE | Покупка, якою ділилися через Family Sharing, більше недоступна | Забираєш доступ у члена сім'ї |
Твій сервер має відповідати HTTP-кодом від 200 до 206. Згідно зі сторінкою про відповіді на сповіщення, інакше Apple повторює спробу п'ять разів: через 1, 12, 24, 48, а потім 72 години після попередньої спроби. У sandbox сповіщення надсилається лише раз.
Consumption API: що ти можеш сказати Apple
Коли приходить запит, ти можеш відповісти через Send Consumption Information. Apple вміщує правило в одне речення: «Respond within 12 hours of receiving the CONSUMPTION_REQUEST notification.» Версія 2 API працює для всіх типів продуктів, разом із підписками.
Поля запиту:
| Поле | Обов'язкове | Що воно каже Apple |
|---|---|---|
customerConsented | Так | Клієнт погодився передати свої дані |
deliveryStatus | Так | Покупку доставлено і вона працює, або чому її не доставлено |
sampleContentProvided | Так | Перед покупкою був пробний період, фрагмент або опис |
consumptionPercentage | Ні | Спожита частка, від 0 до 100 000, тобто від 0 до 100 % |
refundPreference | Ні | Твоя перевага: DECLINE, GRANT_FULL або GRANT_PRORATED |
Тут важливі дві речі. Якщо deliveryStatus не дорівнює DELIVERED, спожита частка має бути нульовою. А для пропорційного повернення за підписку спожиту частку не вказуй: Apple порахує її сама.
Згода клієнта: без неї нічого не працює. Apple пише: «You must obtain valid consent from the customer before sharing their personal data with Apple in the Send Consumption Information API.» Немає згоди, отже не відповідаєш. А ще Apple забороняє збирати цю згоду через вікно рекламного відстеження: «Don't use the AppTrackingTransparency prompt to obtain consent».
Якщо ти працюєш через RevenueCat
Із RevenueCat сповіщення Apple отримує саме він і він же відповідає на запит, через Refund Control. Ти вибираєш одну з чотирьох політик: віддавати перевагу повному поверненню, віддавати перевагу відмові, надсилати тільки дані про споживання або не відповідати взагалі.
Увімкнувши передачу даних, ти підтверджуєш, що маєш згоду своїх клієнтів. RevenueCat сам про це пише: «Enabling consumption data sharing confirms that you obtained consent from your Customers.» Він також радить застосовувати «Prefer no refund» лише до вибраної групи і попереджає, якщо ця перевага зачіпає більшість твоїх клієнтів.
Щоб сповіщення приходили ще й на твій власний сервер, у RevenueCat є поле «Apple Server Notification Forwarding URL» у налаштуваннях застосунку. Воно описане на його сторінці про сповіщення Apple. Я користуюся саме ним. Як налаштувати підписку з RevenueCat, я розповідаю в статті RevenueCat і підписка в застосунку iOS.
Як це впливає на дохід і на підписку
На доступ. Згідно з документацією currentEntitlements, «Products that the App Store has refunded or revoked don't appear in the current entitlements». Якщо твій застосунок перевіряє права через currentEntitlements, повернений доступ зникне сам. Дата і причина відкликання зберігаються в транзакції, у полях revocationDate і revocationReason.
На звіти. Згідно з довідкою щодо звіту про продажі, повернення відображається з від'ємною кількістю одиниць і від'ємною ціною для клієнта. Щодо підписок, сторінка про дані підписок зараховує повні й часткові повернення до подій і віднімає їх від щоденних одиниць.
На репутацію. Guideline 5.6.4 називає надмірну кількість запитів на повернення однією з ознак недостатньої якості. Високий відсоток повернень означає не лише втрату грошей: Apple може взяти його до уваги, коли оцінює, чи дотримуєшся ти кодексу поведінки.
Мій випадок: сповіщення для моїх застосунків
12 жовтня 2026 року я налаштував сповіщення для своїх застосунків. RevenueCat пересилає сповіщення Apple на маршрут devoria.fr. Той перевіряє підпис Apple, а потім надсилає мені сповіщення, без суми. Я хотів бачити запит у момент, коли він приходить, а не тільки результат.
18 жовтня надійшов перший справжній запит у TradaZen, мій симулятор трейдингу. Річна підписка, оплачена наприкінці 7-денного безкоштовного пробного періоду. Вказана причина: випадкова покупка. Три висновки:
- Один і той самий запит може прийти кілька разів. Того вечора я тричі отримав однакове сповіщення. Відтоді кожне сповіщення дедуплікується за типом сповіщення та ідентифікатором транзакції.
- Рішення прийшло менш ніж за добу. Apple відмовила приблизно через 22 години після запиту. Клієнт зберіг доступ.
- Відмова ще не кінець. Через два дні той самий клієнт подав запит ще раз, на ту саму транзакцію.
Запит через «випадкову покупку» наприкінці пробного періоду не виграєш відповіддю Apple. Його запобігають на paywall, ще до першої оплати.
Як обмежити зловживання і не порушити правил
Що дозволено:
- Відповідати на кожен запит точними даними, якщо клієнт дав згоду.
- Висловлювати вибіркову перевагу, наприклад відмову для вже спожитої покупки, а не відмову для всіх підряд.
- Пов'язувати кожен
REFUNDз акаунтом клієнта. Сторінка Apple про сповіщення щодо повернень радить це робити, щоб помічати повторні повернення. - Чітко пояснювати, що людина купує, ще до покупки. Guideline 3.1.2(c) вимагає описати, що користувач отримує за свої гроші, перш ніж пропонувати йому підписку.
Що заборонено:
- Надсилати неправдиві дані, щоб запит відхилили, або відповідати без згоди.
- Збирати згоду через вікно рекламного відстеження: Apple прямо це забороняє.
- Заманювати в покупку обманом. Guideline 5.6 забороняє підштовхувати клієнтів до небажаних покупок або брати гроші за те, що не надано.
- Тиснути на клієнта, який просить повернення. Те саме правило вимагає поваги в клієнтській підтримці, без залякування.
Найкращий важіль усе одно на початку шляху: paywall, де вказано ціну, дату першої оплати і як скасувати підписку. Яких помилок уникати, читай у статті про помилки paywall, а правила пробного періоду описано в статті про безкоштовний пробний період в App Store.
Тестування перед продакшеном
Згідно зі сторінкою про тестування запитів, sandbox і тести StoreKit у Xcode підтримують запити на повернення. У sandbox будь-яка причина автоматично веде до схвалення. Щоб змоделювати відмову, вибери «Other» і введи DECLINE. Для пропорційного повернення введи GRANT_PRORATED. У sandbox відповідь про споживання має піти протягом п'яти хвилин.
Підписка, за яку рідше просять повернення
iOS & Android Kit побудовано на коді моїх застосунків, де онбординг, paywall і підписки вже написано. Він веде тебе за чотири кроки аж до App Store, у твоєму темпі. Повне налаштування розписано на сторінці підписка в застосунку iOS, а правила Apple щодо підписок у статті про guideline 3.1.2.
Перш ніж запускати paywall, пройди безкоштовну діагностику: вона покаже, що насправді гальмує твій проєкт, і надішле тобі мій чекліст, як уникнути відмов Apple.
Поширені запитання
Чи може розробник відмовити в поверненні коштів в App Store?
Ні. Вирішує тільки Apple. Ти можеш надіслати дані про споживання і перевагу, наприклад DECLINE, і це буде один із кількох критеріїв. Останнє слово за Apple.
Чи дізнається розробник про запит на повернення коштів?
Так, якщо він підключив App Store Server Notifications V2. Apple надсилає CONSUMPTION_REQUEST у момент запиту, а потім REFUND або REFUND_DECLINED, коли є рішення. Без сповіщень ти бачиш у звітах тільки вже схвалені повернення.
Скільки часу Apple розглядає запит на повернення коштів?
Клієнтові Apple обіцяє 24-48 годин. У документації StoreKit ідеться про максимум 48 годин. А в тебе є 12 годин, щоб надіслати дані про споживання.
Що відбувається з доступом після повернення коштів?
Повернена покупка зникає з активних прав клієнта: StoreKit 2 більше не повертає її в currentEntitlements. Якщо потім Apple скасує повернення, ти отримаєш REFUND_REVERSED і маєш відновити доступ.
Чи потрібна згода клієнта, щоб відповісти Apple?
Так. Apple вимагає дійсної згоди, перш ніж ти передаси будь-які дані через Consumption API. Без неї ти не відповідаєш на сповіщення. І збирати її через вікно рекламного відстеження не можна.
Чи шкодять повернення коштів моєму застосунку?
Можуть. Guideline 5.6.4 називає надмірну кількість запитів на повернення однією з ознак недостатньої якості, і Apple може враховувати це, коли оцінює дотримання кодексу поведінки.

