Zgodność konsumencka

Odstąpienie od umowy

Funkcja odstąpienia od umowy z dyrektywy 2023/2673 jako dwuetapowy proces w Store API, 14-dniowy termin liczony według polskich zasad, wyjątki ustawowe, potwierdzenie na trwałym nośniku i wzór formularza.

Konsument może odstąpić od umowy zawartej na odległość w ciągu 14 dni bez podania przyczyny (art. 27 ustawy o prawach konsumenta). Dyrektywa (UE) 2023/2673 dodaje do dyrektywy 2011/83/UE art. 11a: sklep, który zawiera umowy przez internet, musi udostępnić w swoim interfejsie funkcję odstąpienia od umowy. Obowiązuje od 19 czerwca 2026 r.

Stan w Polsce (19 października 2026 r.). Polska ustawa wdrażająca nie obowiązuje. Rządowy projekt UC169 (nowelizacja ustawy o prawach konsumenta z nowymi art. 30a i 30b) trafił do konsultacji 10 września 2026 r. i miałby wejść w życie 30 dni po ogłoszeniu, obejmując terminy na odstąpienie, które jeszcze biegną. Opisany niżej proces odpowiada dyrektywie i projektowi. Zob. Podstawa prawna.

Przebieg

konsument                        sklep                                plugin
---------                        -----                                ------
„Odstąp od umowy tutaj”  ──>  wyszukanie (zamówienie + e-mail lub logowanie) ──> pozycje, uprawnienie, terminy
imię, pozycje, e-mail    ──>  POST /withdrawals                      ──> rekord: pending_confirmation, token
„Potwierdź odstąpienie   ──>  POST /withdrawals/:id/confirm (token)  ──> rekord: confirmed, submitted_at
 od umowy”                                                              zdarzenie + e-mail z potwierdzeniem

Etap pierwszy zapisuje oświadczenie: imię i nazwisko konsumenta, umowę (zamówienie i pozycje) oraz e-mail do potwierdzenia, czyli trzy elementy z art. 11a ust. 2. Nic nie zostaje jeszcze złożone. Odpowiedź zawiera jednorazowy confirmation_token (przechowywany jest tylko jego skrót), ważny przez confirmationTtlMinutes (domyślnie 60).

Etap drugi to przycisk potwierdzenia. Jego chwila jest prawną chwilą złożenia oświadczenia, zapisywaną jako submitted_at; do zachowania terminu wystarczy złożenie przed jego upływem (art. 11a ust. 5, art. 30 ust. 2 ustawy). Plugin emituje wtedy consumer_compliance.withdrawal.confirmed i wysyła potwierdzenie.

Gość wskazuje zamówienie numerem i adresem e-mail z zamówienia, zalogowany klient może użyć dowolnego swojego zamówienia. Zły e-mail i nieznane zamówienie dają tę samą odpowiedź 404, więc wyszukiwania nie da się użyć do sprawdzania numerów zamówień. Trasy powinny być objęte limitem żądań.

To wybrana przez nas metoda identyfikacji (decyzja z 19 października 2026 r.): numer zamówienia i e-mail uznajemy za wystarczające i nieuciążliwe, bez linku z tokenem ani dodatkowego kroku.

Etykiety

ElementPolskiAngielski
Wejście do funkcji (na elemencie, który ją uruchamia)Odstąp od umowy tutajWithdraw from contract here
Przycisk potwierdzeniaPotwierdź odstąpienie od umowyConfirm withdrawal

To wartości domyślne i sklep zdecydował się używać ich bez zmian. Pochodzą z polskiej wersji dyrektywy i projektu UC169 (art. 30a ust. 3 i 6), więc trzeba je sprawdzić ponownie po ogłoszeniu ustawy w Dzienniku Ustaw. Endpoint GET /store/consumer-compliance/disclosures zwraca je jako withdrawal.labels. Uzasadnienie projektu dodaje: etykieta jest na samym przycisku, konsument może wybrać pozycje, wstępnie wypełnione dane muszą dać się zmienić, a konsument nie może być przekierowywany na inną stronę.

Termin

Dla każdej pozycji, według polskich zasad:

  • towary: 14 dni od objęcia w posiadanie; przy kilku towarach dostarczanych osobno od dostarczenia ostatniego (art. 28 pkt 1). Plugin czyta realizacje Medusy oznaczone jako doręczone. Dopóki nie doręczono wszystkich przesyłek, termin nie biegnie, a funkcja pozostaje dostępna;
  • pozycje bez wysyłki (treści cyfrowe, usługi): 14 dni od zawarcia umowy, czyli daty zamówienia (art. 28 pkt 2);
  • dnia zdarzenia nie wlicza się (art. 111 par. 2 Kodeksu cywilnego), a termin kończy się o 23:59:59 czasu polskiego ostatniego dnia;
  • ostatni dzień przypadający w sobotę, niedzielę lub święto przesuwa się na następny dzień roboczy (art. 115 Kodeksu cywilnego; UOKiK potwierdza, że ma to zastosowanie). Wigilia jest dniem wolnym od 2025 r. Ustawienie extendOverNonWorkingDays: false to wyłącza.

Oświadczenie złożone po terminie jest przyjmowane i oznaczane within_period: false, bo ocenić je musi przedsiębiorca (jednym z powodów jest wydłużenie do 12 miesięcy z art. 29). rejectOutsidePeriod: true zamiast tego je odrzuca.

Wyjątki (art. 38 ust. 1)

Każdy produkt może mieć jeden wyjątek ustawowy: według specyfikacji konsumenta, szybko się psujący, zapieczętowany ze względów higienicznych, nierozłącznie połączony, alkohol z ceną zależną od rynku, zapieczętowane nagrania lub oprogramowanie, czasopisma, treści cyfrowe. Większość wyłącza pozycję wprost. Dwa wymagają faktów, których sklep nie widzi:

  • towary zapieczętowane są wyłączone dopiero po otwarciu opakowania po dostarczeniu, więc pozostają do wybrania, a decyzję podejmuje przedsiębiorca;
  • treści cyfrowe są wyłączone tylko wtedy, gdy konsument zgodził się na natychmiastowe dostarczenie i przyjął do wiadomości utratę prawa. Zapisz tę chwilę jako datę ISO w metadanych zamówienia pod kluczem digital_content_consent_at (konfigurowalnym), gdy zamówienie zbiera zgodę.

Sklepy tylko z treściami cyfrowymi (klucze ESD)

Sklep, który sprzedaje wyłącznie treści cyfrowe niedostarczane na nośniku materialnym, na przykład klucze licencyjne wysyłane e-mailem, ustawia withdrawal.digitalOnly: true (w naszym backendzie CONSUMER_COMPLIANCE_DIGITAL_ONLY=true). Każda pozycja zamówienia jest wtedy traktowana jako treść cyfrowa, niezależnie od klasyfikacji produktu, a termin biegnie od zawarcia umowy.

Art. 38 ust. 1 pkt 13 wyłącza prawo odstąpienia tylko wtedy, gdy spełnianie świadczenia rozpoczęło się za wyraźną i uprzednią zgodą konsumenta, poinformowanego o utracie prawa, który przyjął to do wiadomości, a przedsiębiorca to potwierdził (art. 15 lub 21). Odpowiedź zależy więc od zamówienia:

Metadane zamówienia digital_content_consent_atOdpowiedź wyszukiwaniaRejestr w panelu
Są (znacznik czasu ISO)right_of_withdrawal: "excluded_digital_consent" z legal_basis (treść przepisu po polsku i angielsku); etap pierwszy jest odrzucany z tym samym uzasadnieniemBrak wpisu
Brakright_of_withdrawal: "applies", digital_consent_missing: true; zwykłe 14 dni od daty zamówieniaOznaczenie „Brak zgody na natychmiastowe dostarczenie”

W naszym własnym sklepie zgoda jest obowiązkowa i zbierana przez zgody przy zamówieniu: bez niej koszyka nie da się sfinalizować, a zamówienie dostaje zgodę i listę objętych nią produktów. W zamówieniu mieszanym prawo tracą tylko te produkty; pozostałe zachowują 14 dni. Oznaczenie braku zgody zostaje dla zamówień utworzonych poza tym procesem.

Zgodę musi zebrać ten, kto sprzedaje kody: niezaznaczone domyślnie pole z informacją o utracie prawa, przed pokazaniem lub wysłaniem kodu, oraz zapis znacznika czasu w metadanych zamówienia. Dziś kody sprzedaje Allegro, a zamówienia z Allegro podlegają procesowi odstąpień i zgód Allegro; funkcja pluginu dotyczy zamówień z naszego własnego sklepu, którego jeszcze nie ma. Przyszły sklep musi zapisywać digital_content_consent_at przy zamówieniu, inaczej każde zamówienie zachowa 14-dniowe prawo odstąpienia.

Zamówienia z Allegro

Zamówienia z Allegro (metadata.allegro_checkout_form_id) albo z kanału sprzedaży z listy externalSalesChannelIds podlegają procesowi zgód i odstąpień serwisu. Wyszukiwanie odpowiada external_marketplace_order, a etap pierwszy jest odrzucany z tym kodem; plugin niczego w tych zamówieniach nie zapisuje.

Potwierdzenie

Art. 11a ust. 4 wymaga potwierdzenia na trwałym nośniku, bez zbędnej zwłoki, z treścią oświadczenia oraz datą i godziną złożenia. Gdy zamówienie ma zgody z zamówienia, e-mail cytuje je też dosłownie z wersją i chwilą akceptacji. Plugin wysyła je przez moduł powiadomień Medusy kanałem email, z gotowym content (temat, HTML i tekst, po polsku lub angielsku) oraz template i data dla dostawców, którzy renderują własne szablony. Jeśli wysyłka się nie uda, odstąpienie pozostaje złożone, błąd zapisuje się w rekordzie, a panel pozwala wysłać potwierdzenie ponownie.

Rejestr w panelu

Odstąpienia w menu bocznym pokazują każde złożone oświadczenie z terminem, stanem potwierdzenia i pozycjami. Oświadczenie można oznaczyć jako obsłużone lub odrzucone, z notatką wewnętrzną, a strona zamówienia pokazuje jego odstąpienia.

Wzór formularza odstąpienia

Konsument może też skorzystać z wzoru z załącznika nr 2 do ustawy o prawach konsumenta (t.j. Dz.U. 2026 poz. 1244), który powinien trafić do potwierdzenia zamówienia. Aktualne brzmienie:

WZÓR FORMULARZA ODSTĄPIENIA OD UMOWY
(formularz ten należy wypełnić i odesłać tylko w przypadku chęci odstąpienia od umowy)

- Adresat [w tym miejscu przedsiębiorca powinien wpisać nazwę przedsiębiorcy,
  pełny adres pocztowy oraz adres e-mail]
- Ja/My(*) niniejszym informuję/informujemy(*) o moim/naszym odstąpieniu od umowy
  sprzedaży następujących towarów(*) umowy dostawy następujących towarów(*)
  umowy o dzieło polegającej na wykonaniu następujących towarów(*)/o świadczenie
  następującej usługi(*)
- Data zawarcia umowy(*)/odbioru(*)
- Imię i nazwisko konsumenta(-ów)
- Adres konsumenta(-ów)
- Podpis konsumenta(-ów) (tylko jeżeli formularz jest przesyłany w wersji papierowej)
- Data

(*) Niepotrzebne skreślić.

Po uchwaleniu polskiej ustawy pouczenie (załącznik nr 1, objaśnienie 3) zyska zdanie o odstąpieniu przez internet; brzmienie z projektu cytuje Podstawa prawna.

Spis treści