# Zwrot pieniędzy w App Store: co widzi deweloper

> O zwrocie w App Store decyduje tylko Apple. Deweloper dostaje CONSUMPTION_REQUEST, może odpowiedzieć w 12 h, a o decyzji dowiaduje się z REFUND.

Oryginalna strona: [Zwrot pieniędzy w App Store: co widzi deweloper](https://devoria.fr/pl/blog/zwrot-pieniedzy-app-store-deweloper)
Autor: [Mehdi Azizi](https://devoria.fr/pl/mehdi-azizi)
Publikacja: 2026-11-04
Ostatnia aktualizacja treści: 2026-11-04


W App Store **to Apple przyznaje albo odrzuca zwrot pieniędzy, nigdy deweloper.** Klient składa wniosek na stronie Apple albo z poziomu twojej aplikacji. Jeśli podłączyłeś powiadomienia serwerowe Apple, w momencie złożenia wniosku dostajesz powiadomienie `CONSUMPTION_REQUEST`, a po decyzji `REFUND` albo `REFUND_DECLINED`. Pomiędzy nimi masz 12 godzin na wysłanie danych o wykorzystaniu i swojej preferencji, pod warunkiem że klient się na to zgodził.

Przyznany zwrot usuwa zakup z aktywnych uprawnień klienta i pojawia się na minusie w twoich raportach sprzedaży. Ten poradnik opisuje każdy krok, to, co możesz wysłać do Apple, i to, co wolno ci zrobić przeciw nadużyciom. Zasady pochodzą ze stron Apple sprawdzonych 3 listopada 2026. Prawdziwy przypadek pochodzi z alertu, który podłączyłem do moich aplikacji w październiku.

## Kto decyduje o zwrocie w App Store?

Apple i tylko Apple. [Strona pomocy Apple](https://support.apple.com/en-us/118223) opisuje ścieżkę klienta: loguje się na reportaproblem.apple.com, wybiera „Request a refund”, podaje powód, a potem wskazuje zakup. Apple radzi mu poczekać na odpowiedź 24 do 48 godzin.

Klient może też poprosić o zwrot z poziomu twojej aplikacji. StoreKit oferuje do tego [arkusz wniosku](https://developer.apple.com/documentation/storekit/transaction/beginrefundrequest%28in%3A%29-9k0pj), dostępny od iOS 15. Apple radzi wywoływać go z ustawień konta albo z menu pomocy. Arkusz pokazuje zakup i listę powodów, a Apple potrzebuje do 48 godzin na decyzję.

**W obu przypadkach niczego nie zatwierdzasz.** Możesz tylko przekazać informacje i preferencję, które są jednym z kilku kryteriów w decyzji Apple.

## Co widzi każda ze stron, krok po kroku

| Etap                | Po stronie klienta                         | Po stronie dewelopera                                   |
| ------------------- | ------------------------------------------ | ------------------------------------------------------- |
| Wniosek             | Formularz Apple albo arkusz w aplikacji    | Powiadomienie `CONSUMPTION_REQUEST`                     |
| W ciągu 12 godzin   | Czekanie                                   | Możliwość wysłania danych o wykorzystaniu               |
| W ciągu 48 godzin   | Odpowiedź Apple                            | Powiadomienie `REFUND` albo `REFUND_DECLINED`           |
| Po zgodzie          | Pieniądze wracają na jego metodę płatności | Zakup usunięty z aktywnych uprawnień, ujemne jednostki  |
| Po zakwestionowaniu | Zwrot anulowany przez Apple                | Powiadomienie `REFUND_REVERSED`, dostęp do przywrócenia |

App Store Connect pokazuje ci tylko już przyznane zwroty, w Sales and Trends. **Sam wniosek dociera wyłącznie przez powiadomienia serwerowe.** Bez nich o zwrocie dowiadujesz się po fakcie.

## Powiadomienia serwerowe przy zwrocie

[App Store Server Notifications V2](https://developer.apple.com/documentation/appstoreservernotifications/notificationtype) wysyłają tu pięć przydatnych typów. Odbierasz je pod adresem HTTPS podanym w App Store Connect, jednym dla produkcji i jednym dla sandboxa.

| Powiadomienie         | Co oznacza                                                   | Co robisz                                 |
| --------------------- | ------------------------------------------------------------ | ----------------------------------------- |
| `CONSUMPTION_REQUEST` | Klient prosi o zwrot                                         | Odpowiadasz w 12 godzin, jeśli jest zgoda |
| `REFUND`              | Apple zwróciło pieniądze za transakcję                       | Odbierasz zwróconą treść albo dostęp      |
| `REFUND_DECLINED`     | Apple odrzuciło wniosek                                      | Nic, dostęp trwa dalej                    |
| `REFUND_REVERSED`     | Apple anuluje zwrot po zakwestionowaniu przez klienta        | Przywracasz to, co odebrałeś              |
| `REVOKE`              | Zakup udostępniony w Chmurze rodzinnej nie jest już dostępny | Odbierasz dostęp członkowi rodziny        |

Twój serwer musi odpowiedzieć kodem HTTP od 200 do 206. Według [strony o odpowiadaniu na powiadomienia](https://developer.apple.com/documentation/appstoreservernotifications/responding-to-app-store-server-notifications) w przeciwnym razie Apple ponawia próbę pięć razy: 1, 12, 24, 48, a potem 72 godziny po poprzedniej próbie. W sandboxie wysyła tylko raz.

## Consumption API: co możesz powiedzieć Apple

Gdy wniosek dotrze, możesz odpowiedzieć przez [Send Consumption Information](https://developer.apple.com/documentation/appstoreserverapi/send-consumption-information). Zasada mieści się w jednym zdaniu Apple: „Respond within 12 hours of receiving the `CONSUMPTION_REQUEST` notification.” Wersja 2 API obejmuje wszystkie typy produktów, łącznie z subskrypcjami.

Pola [żądania](https://developer.apple.com/documentation/appstoreserverapi/consumptionrequest):

| Pole                    | Wymagane | Co mówi Apple                                                    |
| ----------------------- | -------- | ---------------------------------------------------------------- |
| `customerConsented`     | Tak      | Klient zgodził się na udostępnienie swoich danych                |
| `deliveryStatus`        | Tak      | Zakup został dostarczony i działa albo dlaczego nie został       |
| `sampleContentProvided` | Tak      | Przed zakupem był dostępny okres próbny, fragment albo opis      |
| `consumptionPercentage` | Nie      | Wykorzystana część, od 0 do 100 000 dla 0 do 100%                |
| `refundPreference`      | Nie      | Twoja preferencja: `DECLINE`, `GRANT_FULL` albo `GRANT_PRORATED` |

Dwie rzeczy są ważne. Jeśli `deliveryStatus` nie ma wartości `DELIVERED`, wykorzystana część musi wynosić zero. A przy proporcjonalnym zwrocie za subskrypcję pomijasz wykorzystaną część: Apple oblicza ją samo.

**Zgoda to warunek wszystkiego.** Apple pisze: „You must obtain valid consent from the customer before sharing their personal data with Apple in the Send Consumption Information API.” Bez zgody nie odpowiadasz. Apple zabrania też używania okna śledzenia reklamowego do zbierania tej zgody: „Don't use the AppTrackingTransparency prompt to obtain consent”.

## Jeśli korzystasz z RevenueCat

Z RevenueCat to on odbiera powiadomienia Apple i odpowiada na wniosek, przez [Refund Control](https://www.revenuecat.com/docs/customers/refund-control). Wybierasz jedną z czterech polityk: preferuj pełny zwrot, preferuj odmowę, wysyłaj tylko dane o wykorzystaniu albo nie odpowiadaj.

Włączenie udostępniania danych oznacza potwierdzenie, że masz zgodę klientów. RevenueCat sam to pisze: „Enabling consumption data sharing confirms that you obtained consent from your Customers.” Radzi też, żeby „Prefer no refund” stosować tylko do wybranej grupy, i ostrzega, gdy ta preferencja dotyczy większości twoich klientów.

Żeby dostawać powiadomienia także na własny serwer, RevenueCat oferuje w ustawieniach aplikacji pole „Apple Server Notification Forwarding URL”. Jest opisane na [jego stronie o powiadomieniach Apple](https://www.revenuecat.com/docs/platform-resources/server-notifications/apple-server-notifications). Ja z tego korzystam. Konfiguracja subskrypcji z RevenueCat jest w [RevenueCat i subskrypcja in-app na iOS](https://devoria.fr/pl/blog/revenuecat-subskrypcja-in-app-ios).

## Wpływ na przychody i subskrypcję

**Na dostęp.** Według [dokumentacji `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”. Jeśli twoja aplikacja sprawdza uprawnienia przez `currentEntitlements`, zwrócony dostęp znika sam. Transakcja zawiera datę i powód odebrania w `revocationDate` i `revocationReason`.

**Na raporty.** Według [pomocy do raportu sprzedaży](https://developer.apple.com/help/app-store-connect/reference/reporting/summary-sales-report) zwrot pojawia się z ujemnymi jednostkami i ujemną ceną dla klienta. W przypadku subskrypcji [strona o danych subskrypcji](https://developer.apple.com/help/app-store-connect/measure-app-performance/view-subscription-data) liczy pełne i częściowe zwroty jako zdarzenia i odejmuje je od dziennych jednostek.

**Na reputację.** [Wytyczna 5.6.4](https://developer.apple.com/app-store/review/guidelines/#5.6.4) wymienia nadmierną liczbę wniosków o zwrot wśród oznak niewystarczającej jakości. Wysoki odsetek zwrotów to nie tylko strata pieniędzy: Apple może go wziąć pod uwagę, oceniając, czy przestrzegasz kodeksu postępowania.

## Mój przypadek: alert podłączony do moich aplikacji

12 października 2026 podłączyłem alert do moich aplikacji. RevenueCat przekazuje powiadomienia Apple do endpointu na devoria.fr. Ten weryfikuje podpis Apple, a potem wysyła mi alert, bez kwoty. Chciałem widzieć wniosek w chwili, gdy przychodzi, a nie tylko wynik.

18 października przyszedł pierwszy prawdziwy wniosek, w TradaZen, moim symulatorze tradingu. Subskrypcja roczna, opłacona po zakończeniu 7-dniowego darmowego okresu próbnego. Podany powód: niezamierzony zakup. Trzy lekcje:

1. **Ten sam wniosek może przyjść kilka razy.** Tego samego wieczoru dostałem ten sam alert trzy razy. Od tamtej pory każdy alert jest deduplikowany po typie powiadomienia i identyfikatorze transakcji.
2. **Decyzja przyszła w mniej niż dobę.** Apple odmówiło około 22 godzin po wniosku. Klient zachował dostęp.
3. **Odmowa to nie koniec.** Ten sam klient złożył nowy wniosek dwa dni później, dotyczący tej samej transakcji.

> Wniosku z powodu „niezamierzonego zakupu” na koniec okresu próbnego nie wygrywa się odpowiedzią do Apple. Zapobiega mu się na paywallu, przed pierwszą płatnością.

## Jak ograniczyć nadużycia bez łamania zasad

**Co wolno:**

- **Odpowiadać na każdy wniosek prawdziwymi danymi**, gdy klient wyraził zgodę.
- **Wyrażać preferencję celowo**, na przykład odmowę dla już wykorzystanego zakupu, zamiast odmowy dla wszystkich.
- **Łączyć każdy `REFUND` z kontem klienta.** [Strona Apple o powiadomieniach o zwrotach](https://developer.apple.com/documentation/storekit/handling-refund-notifications) zaleca to, żeby wychwytywać powtarzające się zwroty.
- **Jasno mówić przed zakupem, co się kupuje.** [Wytyczna 3.1.2(c)](https://developer.apple.com/app-store/review/guidelines/#3.1.2) wymaga opisania, co użytkownik dostaje za tę cenę, zanim zaproponujesz mu subskrypcję.

**Czego nie wolno:**

- **Wysyłać fałszywych danych**, żeby wniosek został odrzucony, ani odpowiadać bez zgody.
- **Zbierać zgody przez okno śledzenia reklamowego**, co Apple wprost wyklucza.
- **Zastawiać pułapek przy zakupie.** [Wytyczna 5.6](https://developer.apple.com/app-store/review/guidelines/#5.6) zabrania nakłaniania klientów do niechcianych zakupów i pobierania opłat za coś, co nie zostało dostarczone.
- **Wywierać presji na klienta**, który prosi o zwrot. Ta sama zasada wymaga szacunku w obsłudze klienta, bez zastraszania.

Najlepsza dźwignia działa wcześniej: paywall, który podaje cenę, datę pierwszej płatności i sposób anulowania. Błędy, których warto unikać, są w [błędach na paywallu](https://devoria.fr/pl/blog/paywall-ios-bledy-blokujace-sprzedaz), a zasady okresu próbnego w [darmowym okresie próbnym w App Store](https://devoria.fr/pl/blog/introductory-offer-app-store-darmowy-okres-probny-ios).

## Testowanie przed produkcją

Według [strony o testowaniu wniosków](https://developer.apple.com/documentation/storekit/testing-refund-requests) sandbox i testy StoreKit w Xcode obsługują wnioski o zwrot. W sandboxie dowolny powód skutkuje automatyczną zgodą. Żeby zasymulować odmowę, wybierz „Other” i wpisz `DECLINE`. Dla zwrotu proporcjonalnego wpisz `GRANT_PRORATED`. W sandboxie twoja odpowiedź z danymi o wykorzystaniu musi zostać wysłana w ciągu pięciu minut.

## Subskrypcja, za którą rzadziej proszą o zwrot

[iOS & Android Kit](https://devoria.fr/pl/kits/ios) bazuje na kodzie moich aplikacji, z gotowym onboardingiem, paywallem i subskrypcjami, i prowadzi cię przez cztery etapy aż do App Store, w twoim tempie. Pełna konfiguracja jest opisana na stronie [subskrypcja in-app na iOS](https://devoria.fr/pl/expertise/subskrypcja-w-aplikacji-ios), a zasady Apple dotyczące subskrypcji w [wytycznej 3.1.2](https://devoria.fr/pl/blog/guideline-3-1-2-odrzucenie-subskrypcja-paywall).

Zanim uruchomisz paywall, [zrób darmową diagnozę](https://devoria.fr/pl/diagnostic): powie ci, co naprawdę blokuje twój projekt, i wyśle ci moją checklistę przeciw odrzuceniom przez Apple.

## Najczęściej zadawane pytania

### Czy deweloper może odmówić zwrotu w App Store?

Nie. Decyduje tylko Apple. Możesz wysłać dane o wykorzystaniu i preferencję, na przykład `DECLINE`, które są jednym z kilku kryteriów. Ostatnie słowo należy do Apple.

### Czy deweloper dostaje informację o wniosku o zwrot?

Tak, jeśli podłączył App Store Server Notifications V2. Apple wysyła `CONSUMPTION_REQUEST` w chwili złożenia wniosku, a potem `REFUND` albo `REFUND_DECLINED` po decyzji. Bez powiadomień widzisz w raportach tylko przyznane zwroty.

### Ile czasu Apple potrzebuje na rozpatrzenie wniosku o zwrot?

Apple podaje klientowi 24 do 48 godzin. Dokumentacja StoreKit mówi o maksymalnie 48 godzinach. Ty masz 12 godzin na wysłanie danych o wykorzystaniu.

### Co dzieje się z dostępem po zwrocie?

Zwrócony zakup znika z aktywnych uprawnień klienta: StoreKit 2 nie zwraca go już w `currentEntitlements`. Jeśli Apple później anuluje zwrot, dostajesz `REFUND_REVERSED` i musisz przywrócić dostęp.

### Czy potrzebuję zgody klienta, żeby odpowiedzieć Apple?

Tak. Apple wymaga ważnej zgody przed jakimkolwiek udostępnieniem danych przez Consumption API. Bez niej nie odpowiadasz na powiadomienie. Do jej zebrania nie można użyć okna śledzenia reklamowego.

### Czy zwroty działają na niekorzyść mojej aplikacji?

Mogą. Wytyczna 5.6.4 wymienia nadmierną liczbę wniosków o zwrot wśród oznak niewystarczającej jakości, co Apple może wziąć pod uwagę, oceniając przestrzeganie kodeksu postępowania.


## Twój projekt

[iOS & Android Kit](https://devoria.fr/pl/kits/ios): Stwórz swoją aplikację na iPhone'a i Androida z Claude Code: kod startowy moich aplikacji, droga aż do sklepów i wszystkie kity. 439 zł.

[Diagnoza: co dzieli cię od twojej aplikacji na iPhone'a](https://devoria.fr/pl/diagnostic): 7 pytań, 60 sekund: wiesz, co naprawdę blokuje publikację twojej aplikacji na iPhone'a, masz plan w 4 krokach i kit dopasowany do ciebie.
