Skip to main content
Całe API zwraca odpowiedzi w jednym, stałym kształcie. Ta strona mówi, jak rozpoznać błąd, kiedy go ponowić i jak nie przekroczyć limitów.

Kształt odpowiedzi

Sukces:
Niektóre endpointy dokładają pola kontekstowe — np. utworzenie zamówienia zwraca redirectUrl, a darmowe zamówienie free: true. Listy stronicowane zwracają data, total, page, pages, hasNext, hasPrev. Błąd:

Kody statusu

Kody maszynowe

Wybrane wartości pola code, na które warto reagować w kodzie: Nowe kody mogą się pojawiać — nieznany code traktuj według statusCode.

Walidacja

API odrzuca nieprawidłowe dane, zanim zacznie je przetwarzać. Pola spoza schematu są ignorowane, a typy konwertowane automatycznie (np. liczby z query string). Listy przyjmują page i limit; limit jest przycinany do bezpiecznego maksimum (zwykle 100).

Limity żądań

Całe REST API ma globalny limit per rzeczywisty adres IP klienta. Konfiguracja produkcyjna: 200 żądań na minutę (RATE_LIMIT_MAX=200, RATE_LIMIT_WINDOW=60000); operator platformy może zmienić obie wartości. Wrażliwe trasy mają dodatkowe, ostrzejsze okna stałe, liczone per IP i trasa: Trasy logowania mają osobne limity przeciw brute-force. Webhooki płatności są chronione per operator i sklep, z zachowaniem semantyki ponowień operatora.
Liczniki wrażliwych tras są współdzielone przez Redis między instancjami API. Gdy Redis jest chwilowo niedostępny, każda instancja utrzymuje ograniczony licznik w pamięci — ochrona nie znika, tylko staje się lokalna dla instancji.
Plugin gry nie odpytuje REST — połączenie Socket.IO ma własne uwierzytelnianie, walidację, debounce i limity zdarzeń (zobacz Protokół pluginu).

Ponawianie

Ponawiaj tylko 429, 500, 503 i błędy sieci. Nie ponawiaj 400, 401, 403, 404.
  • Jeśli odpowiedź 429 ma nagłówek Retry-After, odczekaj tyle sekund. Nie każda odpowiedź go zawiera (ostrzejsze limity tras go nie wysyłają) — wtedy użyj backoffu.
  • Backoff wykładniczy z jitterem: np. 1 s, 2 s, 4 s ± losowe 0–500 ms, maksymalnie kilka prób.
  • Nie ponawiaj natychmiast w pętli — to tylko przedłuża blokadę.

Idempotencja

Utworzenie zamówienia (POST /orders, w 3.0 także POST /storefront/v1/shops/<shopId>/checkout) wymaga nagłówka Idempotency-Key:
  • losowa wartość 32–128 znaków (A-Z a-z 0-9 _ -), np. UUID bez myślników albo base64url;
  • generuj ją raz na próbę zakupu i używaj ponownie tylko przy ponowieniu identycznego żądania;
  • ponowienie z tym samym kluczem i tą samą treścią zwraca to samo zamówienie zamiast tworzyć drugie;
  • ten sam klucz z inną treścią → 409 IDEMPOTENCY_KEY_REUSED; zamknięta próba → 409 CHECKOUT_ATTEMPT_CLOSED.
Serwer przechowuje tylko skrót SHA-256 klucza. Po stronie płatności ItemShop jest idempotentny także wobec powtórzonych powiadomień operatorów — opłacenie zamówienia przetwarza się dokładnie raz.

Dalej

API z kluczem

Klucze, zakresy i pierwsze żądanie.

Webhooki

Powiadomienia Discord i webhooki operatorów płatności.