Logo

Specyfikacja techniczna integracji

Instrukcja integracji dla platform e-commerce, marketplace’ów i sklepów integrujących się bezpośrednio z Wygodnymi Zwrotami.

Przejdź do referencji API ↓
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 orderNumber moż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
  1. Inicjacja zwrotu: klient zgłasza chęć zwrotu (zalogowany - z poziomu zamówienia, niezalogowany - przez Twoją wyszukiwarkę). Wysyłasz dane zamówienia przez POST /returns/draft i przekierowujesz klienta pod otrzymany redirect_url.
  2. 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ę.
  3. 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ąc webhook_url w 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
  1. Wystaw publiczny endpoint HTTPS przyjmujący POST (dowolna ścieżka).
  2. Ustaw ten adres jako webhook_url w ustawieniach sklepu, wysyłając PATCH /partner-api/v1/shops/{mailboxHid}/settings.
  3. 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 po return_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.