# Возврат денег в App Store: что видит разработчик

> Возврат в App Store одобряет только Apple. Разработчик получает CONSUMPTION_REQUEST, может ответить за 12 часов, а решение узнаёт из REFUND.

Оригинальная страница: [Возврат денег в App Store: что видит разработчик](https://devoria.fr/ru/blog/app-store-refund-developer)
Автор: [Mehdi Azizi](https://devoria.fr/ru/mehdi-azizi)
Опубликовано: 2026-11-04
Последняя правка контента: 2026-11-04


В App Store **возврат денег одобряет или отклоняет Apple, а не разработчик.** Клиент подаёт запрос на сайте Apple или прямо из твоего приложения. Если ты подключил серверные уведомления Apple, в момент запроса приходит уведомление `CONSUMPTION_REQUEST`, а после решения `REFUND` или `REFUND_DECLINED`. Между ними у тебя есть 12 часов, чтобы отправить данные о потреблении и своё предпочтение. Но только если клиент дал на это согласие.

Одобренный возврат убирает покупку из активных прав клиента и попадает в отчёты о продажах с минусом. В этом гайде я разбираю каждый шаг, что можно отправить Apple и что тебе разрешено делать против злоупотреблений. Правила взяты со страниц Apple, которые я перечитал 3 ноября 2026 года. Реальный случай взят из алерта, который я подключил к своим приложениям в октябре.

## Кто решает, вернуть ли деньги в App Store?

Apple, и только Apple. На [странице поддержки Apple](https://support.apple.com/en-us/118223) описан путь клиента: он заходит на reportaproblem.apple.com, выбирает «Request a refund», указывает причину и нужную покупку. Apple советует ему ждать ответа 24-48 часов.

Клиент может запросить возврат и из твоего приложения. Для этого в StoreKit есть [специальный лист запроса](https://developer.apple.com/documentation/storekit/transaction/beginrefundrequest%28in%3A%29-9k0pj), доступный начиная с 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://developer.apple.com/documentation/appstoreservernotifications/notificationtype) присылают пять полезных здесь типов. Они приходят на HTTPS-адрес, указанный в App Store Connect: один для продакшена, другой для sandbox.

| Уведомление           | О чём сообщает                                             | Что делаешь ты                           |
| --------------------- | ---------------------------------------------------------- | ---------------------------------------- |
| `CONSUMPTION_REQUEST` | Клиент запрашивает возврат                                 | Ответить за 12 часов, если есть согласие |
| `REFUND`              | Apple вернула деньги за транзакцию                         | Убрать возвращённый контент или доступ   |
| `REFUND_DECLINED`     | Apple отклонила запрос                                     | Ничего, доступ сохраняется               |
| `REFUND_REVERSED`     | Apple отменяет возврат после того, как клиент его оспорил  | Вернуть то, что ты убрал                 |
| `REVOKE`              | Покупка, доступная через Family Sharing, больше недоступна | Убрать доступ у члена семьи              |

Твой сервер должен отвечать HTTP-кодом от 200 до 206. Согласно [странице об ответах на уведомления](https://developer.apple.com/documentation/appstoreservernotifications/responding-to-app-store-server-notifications), иначе Apple повторяет попытку пять раз: через 1, 12, 24, 48 и 72 часа после предыдущей. В sandbox уведомление отправляется только один раз.

## Consumption API: что ты можешь сказать Apple

Когда приходит запрос, ответить можно через [Send Consumption Information](https://developer.apple.com/documentation/appstoreserverapi/send-consumption-information). Правило Apple умещается в одну фразу: «Respond within 12 hours of receiving the `CONSUMPTION_REQUEST` notification.» Версия 2 API работает для всех типов продуктов, включая подписки.

Поля [запроса](https://developer.apple.com/documentation/appstoreserverapi/consumptionrequest):

| Поле                    | Обязательное | Что оно сообщает 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](https://www.revenuecat.com/docs/customers/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](https://www.revenuecat.com/docs/platform-resources/server-notifications/apple-server-notifications). Я пользуюсь именно им. Как настроить подписку с RevenueCat, я рассказал в статье [RevenueCat и встроенная подписка на iOS](https://devoria.fr/ru/blog/revenuecat-podpiska-ios-prilozhenie).

## Как это влияет на доход и подписку

**На доступ.** Согласно [документации `currentEntitlements`](https://developer.apple.com/documentation/storekit/transaction/currententitlements), «Products that the App Store has refunded or revoked don't appear in the current entitlements». Если твоё приложение проверяет права через `currentEntitlements`, возвращённый доступ исчезнет сам. В транзакции указаны дата и причина отзыва, в `revocationDate` и `revocationReason`.

**На отчёты.** Согласно [справке по отчёту о продажах](https://developer.apple.com/help/app-store-connect/reference/reporting/summary-sales-report), возврат отображается с отрицательными единицами и отрицательной ценой для клиента. Для подписок [страница о данных подписок](https://developer.apple.com/help/app-store-connect/measure-app-performance/view-subscription-data) учитывает полные и частичные возвраты среди событий и вычитает их из ежедневных единиц.

**На репутацию.** [Guideline 5.6.4](https://developer.apple.com/app-store/review/guidelines/#5.6.4) называет чрезмерное число запросов на возврат одним из признаков недостаточного качества. Высокий процент возвратов означает не только потерю денег: Apple может учитывать его, оценивая, соблюдаешь ли ты кодекс поведения.

## Мой случай: алерт на моих приложениях

12 октября 2026 года я подключил алерт к своим приложениям. RevenueCat пересылает уведомления Apple на маршрут devoria.fr. Он проверяет подпись Apple и шлёт мне алерт, без суммы. Я хотел видеть запрос в момент его появления, а не только результат.

18 октября пришёл первый настоящий запрос, в TradaZen, моём симуляторе трейдинга. Годовая подписка, оплаченная после 7-дневного бесплатного пробного периода. Указанная причина: случайная покупка. Три урока:

1. **Один и тот же запрос может прийти несколько раз.** В тот вечер я получил один и тот же алерт трижды. С тех пор каждый алерт дедуплицируется по типу уведомления и идентификатору транзакции.
2. **Решение пришло меньше чем за сутки.** Apple отказала примерно через 22 часа после запроса. Клиент сохранил доступ.
3. **Отказ ещё не конец.** Тот же клиент через два дня снова запросил возврат по той же транзакции.

> Запрос с причиной «случайная покупка» в конце пробного периода не выигрывается ответом Apple. Его предотвращают на paywall, до первого платежа.

## Как ограничить злоупотребления и не нарушить правила

**Что разрешено:**

- **Отвечать на каждый запрос точными данными**, если клиент дал согласие.
- **Выражать точечное предпочтение**, например отказ для уже использованной покупки, а не отказ для всех подряд.
- **Связывать каждый `REFUND` с аккаунтом клиента.** [Страница Apple об уведомлениях о возврате](https://developer.apple.com/documentation/storekit/handling-refund-notifications) рекомендует это, чтобы замечать повторные возвраты.
- **Чётко объяснять до покупки, что именно покупают.** [Guideline 3.1.2(c)](https://developer.apple.com/app-store/review/guidelines/#3.1.2) требует описать, что пользователь получает за эту цену, прежде чем предлагать подписку.

**Что запрещено:**

- **Отправлять ложные данные**, чтобы добиться отказа, или отвечать без согласия.
- **Получать согласие через окно рекламного трекинга**: Apple исключает это прямым текстом.
- **Подстраивать ловушки при покупке.** [Guideline 5.6](https://developer.apple.com/app-store/review/guidelines/#5.6) запрещает подталкивать клиентов к нежелательным покупкам или брать деньги за то, что не доставлено.
- **Давить на клиента**, который просит вернуть деньги. То же правило требует уважительной поддержки, без запугивания.

Лучший рычаг всё равно находится раньше: paywall, на котором указаны цена, дата первого платежа и способ отмены. Каких ошибок избегать, читай в статье [ошибки paywall](https://devoria.fr/ru/blog/ios-paywall-oshibki-novichka), а правила пробного периода в статье [бесплатный пробный период в App Store](https://devoria.fr/ru/blog/introductory-offer-app-store-connect-free-trial).

## Тестирование до продакшена

Согласно [странице о тестировании запросов](https://developer.apple.com/documentation/storekit/testing-refund-requests), sandbox и StoreKit-тесты в Xcode принимают запросы на возврат. В sandbox любая причина автоматически приводит к одобрению. Чтобы симулировать отказ, выбери «Other» и введи `DECLINE`. Для пропорционального возврата введи `GRANT_PRORATED`. В sandbox твой ответ о потреблении должен уйти в течение пяти минут.

## Подписка, за которую реже просят вернуть деньги

[iOS & Android Kit](https://devoria.fr/ru/kits/ios) построен на коде моих приложений, где онбординг, paywall и подписки уже написаны, и проводит тебя через четыре шага до App Store в твоём темпе. Полная настройка подробно описана на странице [встроенная подписка на iOS](https://devoria.fr/ru/expertise/ios-in-app-subscription), а правила Apple о подписках в статье [guideline 3.1.2](https://devoria.fr/ru/blog/guideline-3-1-2-app-rejected-subscription).

Прежде чем запускать paywall, [пройди бесплатную диагностику](https://devoria.fr/ru/diagnostic): она покажет, что на самом деле тормозит твой проект, и пришлёт тебе мой чек-лист против отказов 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 может учитывать это, оценивая соблюдение кодекса поведения.


## Твой проект

[iOS & Android Kit](https://devoria.fr/ru/kits/ios): Создай своё приложение для iPhone и Android с Claude Code: стартовый код моих приложений, путь до публикации в сторах и все киты. 109 $.

[Диагностика: что отделяет тебя от твоего iPhone-приложения](https://devoria.fr/ru/diagnostic): 7 вопросов, 60 секунд: ты узнаешь, что на самом деле мешает тебе опубликовать iPhone-приложение, получишь путь из 4 этапов и подходящий тебе кит.
