Zmiany w API
Historia wersji trzech interfejsów API (pole info.version w plikach OpenAPI) - co doszło w każdej wersji i na co zwrócić uwagę przy aktualizacji klienta.
Zaktualizowano 2 listopada 2026
Na tej stronie
Każdy plik OpenAPI ma własny numer wersji w polu info.version. Wersja rośnie, gdy zmienia się kontrakt,
który klient musi znać: nowe operacje, pola albo reguły. Adresy bazowe (/v1) się nie zmieniają - wszystkie
zmiany poniżej są zgodne wstecz, chyba że opis mówi inaczej (zmiany niezgodne wstecz są oznaczone
niezgodne wstecz).
| API | Aktualna wersja | Plik |
|---|---|---|
| Synchronizacja | 1.2 | sync.yaml |
| Aplikacja pracownika | 1.4 | employee-app.yaml |
| Aplikacja mobilna klienta | 1.4 | mobile-app.yaml |
Aplikacja mobilna klienta
1.4 (2026-11-02)
Wdrożenie ustaleń z zespołem aplikacji (A1-A6, Treści i cele przycisków):
- nowa operacja
POST content/events- paczka do 100 pokazań i kliknięć, wynik dla każdego zdarzenia, oknooccurred_at24 h wstecz i 5 min w przód; zalecany sposób pomiaru zamiast pojedynczychcontent/{uuid}/impressioniclick, które zostają dla zgodności; - nagłówek
X-Device-Id- sesja pomiaru gościa, osobna oddevice_idlogowania; link.urlzawsze https; adres zewnętrzny bez https nie daje przycisku;- ekran celu wybiera się wyłącznie po
link.type+link.params,deep_linkjest tylko informacyjny; - opis oczekiwanego przebiegu trybu gościa i powrotu do celu po logowaniu.
W obrębie 1.4 dokumentacja została później uzupełniona do stanu kodu, bez zmian w API (kontrakt jest ten sam):
- treść żądań i odpowiedzi logowania (
auth/verify-code,auth/register,auth/login,auth/refresh) z wartościamistatus(authenticated,registration_required,registered); - opisane kody odmów logowania, konta i urządzeń:
LOGIN_CHANNEL_DISABLED,AUTH_ERROR,INVALID_IDENTIFIER,CODE_VERIFICATION_FAILED,INVALID_VERIFICATION_TOKEN,REGISTRATION_FAILED,PASSWORD_LOGIN_DISABLED,LOGIN_FAILED,PASSWORD_ALREADY_SET,PASSWORD_NOT_SET,INVALID_PASSWORD,INVALID_CONFIRMATION_CODE,CANNOT_REVOKE_CURRENT,FORBIDDEN,METHOD_NOT_ALLOWED; - odpowiedzi błędów z konkretnymi kodami dla każdego statusu HTTP zamiast jednego ogólnego przykładu;
- tabela limitów żądań wszystkich tras i limitów prób w operacjach;
- uwaga, że
GET versionzwracało na stałeapi_version: 1.0.0; od 2026-11-02api_versionpodaje wersję kontraktu, czyliinfo.version(1.4), afeatures- sekcje obsługiwane przez serwer (o sekcjach marki decydujebrand/config).
Zmiany działania z 2026-11-02 w tej samej wersji (bez podbicia numeru):
- konto pracownika (z dostępem do panelu) nie ustawia ani nie zmienia hasła i nie dezaktywuje konta w aplikacji -
403 STAFF_ACCOUNT_LOCKEDwPOSTiPUT account/passwordorazDELETE account; zmiana e-maila albo telefonu takiego konta daje403 STAFF_ACCOUNT_CONTACT_LOCKED(imię i nazwisko zmienia normalnie); - nieobsłużony błąd serwera przychodzi w kopercie z kodem
500 SERVER_ERRORzamiast{ "message": "Server Error" }; - parametry ścieżki muszą mieć właściwą postać (uuid, a
devices/{id}- liczba), inaczej404 NOT_FOUND; auth/refreshwalidujedevice_nameidevice_id(napisy do 255 znaków, inaczej422);- lista
devicesi odłączanie urządzeń obejmują tylko tokeny aplikacji klienta; - każda trasa logowania liczy żądania własnym licznikiem na adres IP.
1.3 (2026-11-02)
- sklep w wielu lokalizacjach:
GET shop/localizations, opcjonalnylocalization_uuidw katalogu, na karcie produktu i przy dodaniu do koszyka,fiscal_localizationw koszyku i zamówieniu, nowe odmowyLOCALIZATION_NOT_AVAILABLEiSHOP_OTHER_OPERATOR,DELETE shop/cart; - treści marketingowe w aplikacji:
content,content/home,news,news/{uuid}, pokazania i kliknięcia, obiektlinkcelu przycisku; operacje treści działają także bez tokenu (gość).
1.2 (2026-11-01)
- sklep marki: katalog, koszyk z kodami rabatowymi,
GET/POST shop/checkoutze startem PayU i wymaganymIdempotency-Key, „Moje zakupy” z dokumentami, prośba o zwrot; - „Moje bilety”: lista, karta z kodem QR, zmiana dnia wizyty, „Dodaj bilet kodem”.
1.1 (2026-11-01)
- dokumentacja zgodna z kodem w jednym pliku
public/api-docs/mobile-app.yaml; - do dokumentacji doszły profile osób (
account/profiles), dane do faktury (account/contractors), klucz kodu klienta offline (customer-code/offline-key), nagrody, zamówienia z dokumentami PDF i stan płatności online; - w tej wersji doszły też e-paragony (
account/e-receipts) i sprzeciw wobec profilowania (account/profiling-objection).
1.0.0
Pierwsza wersja: marka, logowanie, konto i zgody, kod klienta, urządzenia, punkty lojalnościowe.
Synchronizacja
1.2 (2026-11-02)
Numer obejmuje zmiany, które w 1.1 doszły bez podbicia wersji, i uzupełnienia dokumentacji:
- bilety do wykorzystania:
GET ticket-entitlements/{code},POST ticket-entitlements/redeem,POST ticket-entitlements/release,GET sales/{uuid}/ticket-entitlements; - nowe zasoby wypychania:
ticket_entitlements,ticket_entitlement_redemptions,marketing_pos_counters,marketing_receipt_prints,marketing_screen_counters; pola e-paragonu wsales; - pobieranie pliku z wznowieniem (
Range, odpowiedzi206i416); - pełna lista powodów
skippedw schemaciePushResourceResult, w tymTOTAL_MISMATCHiRETURN_EXCEEDS_SALEdla zwrotów z kasy; - poprawiony opis uwierzytelniania: lokalizacja wyłączona daje
403 LOCALIZATION_INACTIVE, a nie401; opisany kod401 LOCALIZATION_NOT_AUTHENTICATED; - tabela limitów własnych operacji;
- uwaga, że
meta.api_versionkontrahentów i użytkowników zwraca na stałe1.0.
Uzupełnienia z 2026-11-02 w tej samej wersji (zgodne wstecz, ale kasa wymaga aktualizacji, żeby z nich korzystać):
- daty w rekordach
pullw czasie ściennym strefy aplikacji (2026-11-05,2026-11-05 10:00:00) zamiast UTC; - zakres operatora w
pull:operators,localizationsifilesinnych operatorów przychodzą jako_op: delete, a odsyłacze do nich jakonull- kasa po aktualizacji raz pobiera wszystko od nowa; - lista
warningsw wynikupushz nowym powodemSALE_PROCESSED_LOCKED(polafieldsimessage) - zmiany przetworzonej sprzedaży pominięte przez chmurę; - nowy powód
skipped:SYNC_ERROR(rekord do ponowienia); coupon_redemptionsponad limit użyć przyjmowane z alarmem operatoraPROMOTION_USAGE_OVER_LIMIT;- każdy limit własny operacji liczy żądania osobnym licznikiem;
meta.api_versionkontrahentów i użytkowników podaje wersję kontraktu (1.2), a nie stałe1.0;- nieobsłużony błąd serwera poza
pullipushprzychodzi w kopercie z kodem500 SERVER_ERROR; - nagrobki także dla
employees(pracownik przeniesiony do innej lokalizacji) iinvoices(faktura usunięta trwale).
Opis: API synchronizacji.
1.1 (2026-11-01)
- pełna dokumentacja wszystkich operacji
api/sync/v1, zgodna z kodem; do dokumentacji doszły m.in. pliki i raporty kasy, kody rabatowe, faktury i należności, paragony z chmury, rachunki z chmury, identyfikatory, zamówienia i wypłaty zwrotów; - niezgodne wstecz: usunięta operacja
POST users/{id}/reset-password- hasła nie ustawia się przez API synchronizacji (PASSWORD_NOT_ALLOWED); - kody rabatowe na kasie wymagają uprawnienia
bills.createpracownika zX-User-Uuid; localization_uuidporównywany bez rozróżniania wielkości liter;- token lokalizacji wyłączonej daje
403 LOCALIZATION_INACTIVE(nieznany token nadal401 INVALID_SYNC_TOKEN); - kody błędów PDF faktury (
INVOICE_NOT_FOUND,PDF_NOT_AVAILABLE).
W obrębie wersji 1.1 doszły później, bez zmiany numeru, operacje i zasoby opisane w wersji 1.2.
1.0.0
Pierwsza wersja: ping, pobieranie, wypychanie, rozpoznanie klienta, kontrahenci i użytkownicy.
Aplikacja pracownika
Opis przebiegów: API aplikacji pracownika.
1.4 (2026-11-02)
- nowa operacja
GET me/schedules/{uuid}/full- pełny grafik ze współpracownikami (nazwa, grupy, godziny zmian) za nowym uprawnieniemmy_schedule.full_view; to samo uprawnienie chroni ekran Moja rola › Pełny grafik w panelu;GET me→features.full_schedule; - spis z natury na ślepo:
POST inventory-countsprzyjmujeis_blind; lista i karta spisu zwracająis_blind, karta -book_revealed; w spisie na ślepo w toku konto bezinventory_counts.confirmdostajebook_quantityidifference=null, podsumowanie bez różnic, afilter=differencesdaje409 BLIND_COUNT; - niezgodne wstecz: preferowana grupa w deklaracji dostępności (
preferred_group_uuid) tylko spośród aktywnych grup pracownika - inna daje422;employee_groupskarty deklaracji zawiera już tylko te grupy; - dzień „Dostępny” bez godzin znaczy „cały dzień” także przy sprawdzaniu kolizji z grafikiem - w dniu ze zmianą
nie daje już
409 SCHEDULE_CONFLICT.
1.3 (2026-11-02)
- dokumenty magazynowe w nowej formule:
POST warehouse-documents/{uuid}/correction(szkic korekty PZK, WZK, RWK, MMK),reverse(storno),duplicate(kopia),GET .../pdf(wydruk, 30 na minutę); - spis z natury
inventory-counts: otwarcie, pozycje, skan, ilość wprost, zatwierdzenie z dokumentem INW i zasadą dla niepoliczonych (uncounted_policy), anulowanie; - „Moja praca” bez uprawnień panelu, tylko dla własnych aktywnych zatrudnień:
GET me/schedule,me/schedules,me/schedules/{uuid}, zamiany zmian (me/schedule-entries/{entry}/swap-targets...,me/swap-requests...), deklaracje dostępności (me/availability-declarations...);GET me→features; - nowe kody
DOCUMENT_NOT_CORRECTABLE,DOCUMENT_NOT_DUPLICABLE,DOCUMENT_NOT_REVERSIBLE,INVENTORY_COUNT_REFUSED,SWAP_NOT_ALLOWED,SWAP_NOT_PENDING,DECLARATION_CLOSED,SCHEDULE_CONFLICT; - nowe pola dokumentu:
operator,total_deposit,reversed_at,reversal_reason,is_correction,accepts_price,can_delete,can_correct,can_duplicate,corrected_document,source_document,linked_document,inventory_count, na karciecan_reverse; pozycji -is_correction_line; produktu -is_stock_item,is_package,allows_fractional_quantity,units; - filtry listy dokumentów
operator_uuidicontractor_uuid; zmiana magazynu w nagłówku (warehouse_uuid); zmiana artykułu i jednostki pozycji (product_uuid,unit_uuid); - niezgodne wstecz:
POST warehouse-documentswymagacontractor_uuiddla PZ i WZ oraztarget_warehouse_uuiddla MM i PMO i sprawdza regułę operatora (MM - ten sam, PMO - inny) już przy wystawieniu (422); powód anulowania 5-500 znaków; cena towaru na dokumentach rozchodowych jest pomijana (0, wartość z FIFO); nieznanywarehouse_uuidalboproduct_uuidw filtrach listy dokumentów i księgi ruchów daje404zamiast pustej listy;searchnajwyżej 100 znaków; parametry ścieżki muszą być uuid.
1.2 (2026-11-02)
- logowanie z weryfikacją dwuetapową jak w panelu: konto z 2FA podaje
codealborecovery_codewPOST auth/login; nowe kodyTWO_FACTOR_CODE_REQUIRED,INVALID_TWO_FACTOR_CODE,TOO_MANY_ATTEMPTS; - konto, któremu grupa uprawnień nakłada 2FA, a które go nie skonfigurowało, nie dostaje tokenu, a token wydany
wcześniej przestaje działać (
403 TWO_FACTOR_SETUP_REQUIRED); - zmiana albo reset hasła konta w panelu unieważnia wszystkie jego tokeny aplikacji pracownika
(kolejne żądanie:
401 UNAUTHENTICATED); - całe API ma limit 120 żądań na minutę z własnym licznikiem;
- w tej samej wersji (2026-11-02): nieobsłużony błąd serwera przychodzi w kopercie z kodem
500 SERVER_ERROR.
1.1 (2026-11-01)
- pełna dokumentacja wszystkich operacji
api/employee-app/v1, zgodna z kodem; - podgląd stanów i ostrzeżenia
STOCK_WARNINGSwskazują pozycję i produkt przezitem_uuid/product_uuid;item_idiproduct_idsą przestarzałe; - nieznany
localization_uuiddaje404 LOCALIZATION_NOT_FOUNDzamiast pustej ceny; - lista magazynów jest stronicowana;
- token wygasa po 30 dniach bez użycia.
1.0.0
Pierwsza wersja: logowanie, dane konta, skan, produkty, stany i dokumenty magazynowe.
Jak śledzić zmiany
Porównaj info.version pliku OpenAPI z wersją, dla której pisałeś klienta. Pliki są publiczne pod adresem
https://<adres panelu>/api-docs/<plik>.yaml, więc możesz je sprawdzać automatycznie, np. w testach
kontraktowych. Gdy numer wzrósł, przeczytaj ten artykuł i opis zmienionych operacji w dokumentacji referencyjnej.
Powiązane
- Przegląd API i uwierzytelnianie Trzy interfejsy REST StayPark Suite - kto ich używa, jak się uwierzytelnić, jak wygląda koperta odpowiedzi, stronicowanie i limity żądań.
- Kody błędów API Zbiorcza lista kodów error.code trzech interfejsów API z kodem HTTP, znaczeniem i operacjami, które je zwracają.
- Treści i cele przycisków w aplikacji mobilnej Sloty treści marketingowych, obiekt link (type, params, url), pomiar pokazań paczką content/events, X-Device-Id i tryb gościa - ustalenia z zespołem aplikacji.