Specyfikacja techniczna integracji
Instrukcja integracji dla platform e-commerce, marketplace’ów i sklepów integrujących się bezpośrednio z Wygodnymi Zwrotami.
1. Cel integracji
Integracja pozwala na automatyczną obsługę zwrotów za pośrednictwem Wygodnych Zwrotów - samodzielnie albo przez platformę typu marketplace. Ty przechowujesz dane sklepu, adres zwrotów i statusy w swoim panelu, a Wygodne Zwroty dostarczają formularz zwrotów, logistykę przesyłki zwrotnej oraz webhooki.
2. Główne identyfikatory
mailbox_hid
Identyfikator formularza/sklepu. Zapisujesz go u siebie i używasz w komunikacji z API.
orderNumber
Identyfikator zamówienia po Twojej stronie.
3. Autoryzacja
API korzysta z nagłówka
x-api-key.
Do pracy z API wystarczy Merchant Key, który dostajesz razem z
mailbox_hid.
Poprawność klucza możesz sprawdzić przez GET /partner-api/v1/auth/check.
4. Reguły biznesowe
- Draft to nie zwrot: draft tylko przygotowuje formularz; kolejne wywołanie dla tego samego zamówienia nadpisuje poprzednie.
- Wiele zwrotów do zamówienia: jedno
orderNumbermoże mieć więcej niż jeden zwrot. - Adres jest po Twojej stronie: konfigurujesz go u siebie, a zmiany aktualizujesz w Wygodnych Zwrotach.
- Wyszukiwarka zamówień dla niezalogowanych klientów działa po Twojej stronie - Wygodne Zwroty jej nie udostępniają.
5. Proces integracji
- Inicjacja zwrotu: klient zgłasza chęć zwrotu
(zalogowany - z poziomu zamówienia, niezalogowany - przez Twoją
wyszukiwarkę). Wysyłasz dane zamówienia przez
POST /returns/drafti przekierowujesz klienta pod otrzymanyredirect_url. - Zwrot: formularz zależy od pola
flow:shipment(domyślnie) kończy się nadaniem przesyłki,withdrawal- odstąpieniem od umowy, po którym klient decyduje, czy nadać paczkę. - Synchronizacja: status zwrotu pobierasz cyklicznie
przez endpoint zwrotów przypisanych do zamówienia, albo nasłuchujesz
webhooków
return.created/return.updated- włączasz je, ustawiającwebhook_urlw ustawieniach sklepu.
6. Webhooki
Zamiast pollingu możesz nasłuchiwać zdarzeń
return.created
i
return.updated - pełny schemat i przykładowy payload znajdziesz w referencji poniżej.
Tu krótko, jak je wdrożyć:
Konfiguracja
-
Wystaw publiczny endpoint HTTPS przyjmujący
POST(dowolna ścieżka). -
Ustaw ten adres jako
webhook_urlw ustawieniach sklepu, wysyłającPATCH /partner-api/v1/shops/{mailboxHid}/settings. - Zapisz sekret webhooka po stronie serwera - to klucz API przypisany do Twojego mailboxa.
Weryfikacja podpisu
Nagłówek X-Signature to HMAC-SHA-256 surowego body (nie sparsowanego JSON-a) w UTF-8,
zapisany jako 64-znakowy hex. Porównuj w czasie stałym.
import { createHmac, timingSafeEqual } from "node:crypto";
function verifyWebhook(rawBody: Buffer, signature: string, secret: string) { if (!/^[a-f0-9]{64}$/i.test(signature)) return false; const expected = createHmac("sha256", secret).update(rawBody).digest(); const received = Buffer.from(signature, "hex"); return received.length === expected.length && timingSafeEqual(received, expected);}Wysyłka i ponawianie
Pierwsza próba dostarczenia webhooka następuje około 5 sekund po utworzeniu zdarzenia. Jeśli dostawa się nie powiedzie, Wygodne Zwroty podejmą jeszcze 11 prób - łącznie maksymalnie 12 prób przez około 8,5 godziny. Po ostatniej nieudanej próbie dostawa nie jest już ponawiana.
Endpoint powinien szybko zwracać kod 2xx. Inna odpowiedź HTTP jest traktowana jako nieudana dostawa.
Bezpieczeństwo i idempotencja
- Po weryfikacji podpisu zwróć szybko 2xx i przetwarzaj zdarzenie asynchronicznie (kolejka), nie synchronicznie w odpowiedzi.
-
Dostawa może się powtórzyć - deduplikuj po
event_id, aktualizuj stan poreturn_id. - Payload zawiera dane osobowe (imię, e-mail, telefon, adres) i numer konta - nie loguj sekretu ani pełnego payloadu, ogranicz dostęp zgodnie z RODO.
Pełna referencja API
Poniżej znajdziesz zawsze aktualną referencję endpointów dostępnych dla sklepu i webhooków - schematy pól, przykłady i kody odpowiedzi.