Integracja z 1C, ERP, CRM-systemami i CommerceAPI
Automatyczny eksport przy zamówieniu / Wysyłka danych POST o zamówieniu w formacie JSON
Automatyczny eksport przy zamówieniu możesz włączyć w ustawieniach strony, w zakładce «Sklep», określając ścieżkę do wysyłki danych.Na podany adres będzie wysyłane żądanie POST, ze wszystkimi danymi o zamówieniu, w tym danymi kontaktowymi zamawiającego i listą produktów. Dane kontaktowe i informacje o zamówieniu będą przekazywane w formacie JSON, żądaniem POST.
Na przykład, w 1c możesz zaimplementować przyjmowanie zamówień przez «HTTP serwis»->«SiteExchange» -> «POSTData»
Jeśli po wysłaniu żądania, Twój serwis zwróci dane JSON, z zawartością «Number» lub «crm_order_id», to do zamówienia zostanie dodany zewnętrzny numer zamówienia.
Automatyczny eksport statystyk sprzedaży / Wysyłka danych POST o zamówieniu w formacie JSON
Automatyczny eksport statystyk sprzedaży możesz włączyć w ustawieniach strony, w zakładce «Sklep», określając ścieżkę do wysyłki danych.Na podany adres będzie wysyłane żądanie POST, ze wszystkimi danymi o zamówieniu, które zmieniają się w Statystyce sprzedaży. Informacje będą przekazywane żądaniem POST w formacie JSON.
Na przykład, w 1c możesz zaimplementować przyjmowanie zamówień przez «HTTP serwis»->«SiteExchange» -> «POSTData»
Ponadto możesz włączyć zewnętrzny dostęp do swojej statystyki, określając «Klucz dostępu do statystyki sprzedaży».
Dostęp do statystyk sprzedaży / JSON
Określ klucz dostępu do statystyk sprzedaży w ustawieniach, w zakładce «Sklep». Jeśli potrzebujesz uzyskać dostęp do statystyk sprzedaży zewnętrzną aplikacją, możesz wykonać (POST/GET lub AJAX) żądanie pod adresem «
/ajax.php?statistic_sell» Przy tym należy podać klucz w żądaniu, z szyfrowaniem MD5. Na przykład, jeśli masz określony klucz «123», to w żądaniu będzie to «
202cb962ac59075b964b07152d234b70».W takim przypadku żądanie będzie wyglądać następująco: «
/ajax.php?statistic_sell&key=202cb962ac59075b964b07152d234b70»
W żądaniu można określić dane do sortowania lub wyszukiwania (parametry GET/POST), które można pobrać na stronie statystyk sprzedaży w centrum administracyjnym (
/page.php?p=statistic_sell&mystat). Sortowanie i wybór parametrów odbywa się przez żądanie GET/POST, na przykład «&sort_dateperiod=1week» oznacza, że będą wyświetlane statystyki sprzedaży za tydzień. Dane wyświetlane są w formacie JSON.
Zwróć uwagę, że jeśli używasz otwartych dla odwiedzających żądań strony, to za pomocą Twojego klucza mogą uzyskać dostęp do Twoich statystyk sprzedaży.
Dostęp do cennika sklepu / Pełny wywóz cennika w CSV
Określ klucz dostępu do cennika sklepu w ustawieniach, w zakładce «Sklep». Pełny wywóz cennika znajduje się pod adresem «/csv_export_products.csv»
Przy tym należy podać klucz w żądaniu, z szyfrowaniem MD5. Na przykład, jeśli masz określony klucz «123», to w żądaniu będzie to «
202cb962ac59075b964b07152d234b70».W takim przypadku żądanie będzie wyglądać następująco: «
/csv_export_products.csv?key=202cb962ac59075b964b07152d234b70»
W żądaniu można określić dane do sortowania i wyboru pól, które można pobrać na stronie eksportu w centrum administracyjnym (/page.php?p=submit_catalog_page&subpage&export_from_shop). Sortowanie i wybór parametrów odbywa się przez żądanie GET/POST, na przykład «
&export_product_access=export_product_access» oznacza, że będzie eksportowane pole z danymi o dostępie do produktu. Dane wyświetlane są w formacie CSV.
Plik eksportu jest buforowany w celu zmniejszenia obciążenia i aktualizowany raz na dobę. Usunąć bufor można za pomocą przycisku «Wyczyść bufor eksportu XML/CSV».
Przykład: https://templatedemo437544.boostore.pro/csv_export_products.csv?key=202cb962ac59075b964b07152d234b70
Dodatkowo zaimplementowano mechanizm wymiany danych przez API, podobny do WooCommerce API. API pozwala uzyskiwać i aktualizować informacje o zamówieniach i produktach, a także kategoriach. Instrukcje i ustawienia w sekcji «Sklep» - «Wymiana danych JSON Commerce API».
Commerce API (Products/Categories/Sales Statistics)
Commerce API — Krótki podręcznik metod
Klucz dostępu
Do pracy z API potrzebny jest klucz dostępu (Consumer Secret), który tworzysz w sekcji „Ustawienia”, „Sklep”, „Dostęp do statystyk sprzedaży”. Klucz generowany jest na podstawie klucza do dostępu do statystyk sprzedaży.
Typy kluczy dostępu
W zależności od typu klucza, API może zapewniać różne poziomy dostępu:
| Klucz | Opis | Dostęp |
|---|---|---|
| 1 | Pełny dostęp | Odczyt i zapis wszystkich zasobów |
| 2 | Odczyt wszystkich danych | Tylko odczyt wszystkich zasobów |
| 3 | Odczyt produktów | Tylko odczyt produktów, kategorii, producentów i kolekcji |
| 4 | Zarządzanie produktami | Odczyt wszystkich danych + zapis produktów, kategorii, producentów i kolekcji |
| 5 | Odczyt zamówień | Tylko odczyt zamówień i statystyk sprzedaży |
| 6 | Zarządzanie zamówieniami | Odczyt wszystkich danych + zapis zamówień i statystyk sprzedaży |
| 7 | Zarządzanie artykułami bloga | Odczyt wszystkich danych + zapis artykułów bloga |
| 8 | Zarządzanie stronami | Odczyt wszystkich danych + zapis stron |
| 9 | Zarządzanie blokami/menu | Odczyt wszystkich danych + zapis bloków/menu |
| 10 | Zarządzanie komentarzami i opiniami | Odczyt wszystkich danych + zapis komentarzy i opinii (produktów, stron, artykułów, kategorii) |
Klucz jest generowany na podstawie Twojego klucza dostępu do statystyk sprzedaży z odpowiednim sufiksem. Utwórz w ustawieniach sklepu klucz dostępu do statystyk sprzedaży, a system automatycznie wygeneruje wszystkie warianty kluczy.
Metody API (HTTP)
Wszystkie zapytania kierowane są na bazowy URL twojej strony, np.: https://site.com/api/commerce/
1. Statystyki sprzedaży
| Metoda | URL | Opis |
|---|---|---|
| GET | /orders | Pobierz statystyki zamówień |
| GET | /orders/{id} | Pobierz statystyki pojedynczego zamówienia po ID |
| GET | /crm_orders/{id} | Pobierz statystyki pojedynczego zamówienia po zewnętrznym CRM ID |
| DELETE | /orders/{id} | Usuń zamówienie po ID |
| DELETE | /crm_orders/{id} | Usuń zamówienie po zewnętrznym CRM ID |
| POST | /orders | Dodaj nowe zamówienie |
| UPDATE | /orders/{id} | Zaktualizuj zamówienie po ID (PATCH/PUT/UPDATE) |
| UPDATE | /crm_orders/{id} | Zaktualizuj zamówienie po zewnętrznym CRM ID (PATCH/PUT/UPDATE) |
2. Produkty
| Metoda | URL | Opis |
|---|---|---|
| POST | /products | Masowe dodawanie i aktualizacja produktów |
| GET | /products | Pobierz listę produktów. Obsługuje filtrowanie (?lang=ru|ua|en|pl) |
| GET | /products/{id} | Podgląd pojedynczego produktu po ID |
| GET | /products/sku/{sku} | Podgląd pojedynczego produktu po SKU (kod produktu) |
| UPDATE | /products/{id} | Zaktualizuj produkt po ID (PATCH/PUT/UPDATE) |
| UPDATE | /products/sku/{sku} | Zaktualizuj produkt po SKU (kod produktu) (PATCH/PUT/UPDATE) |
| UPDATE | /products | Masowa aktualizacja kilku produktów (PATCH/PUT/UPDATE) |
| DELETE | /products/{id} | Usuń produkt po ID |
| DELETE | /products/sku/{sku} | Usuń produkt po SKU (kod produktu) |
3. Kategorie sklepu
| Metoda | URL | Opis |
|---|---|---|
| POST | /products/categories | Masowe dodawanie i aktualizacja kategorii |
| GET | /products/categories | Pobierz listę kategorii produktów |
| GET | /products/categories/{id} | Pobierz kategorię według ID |
| GET | /products/categories/name/{name} | Pobierz kategorię według nazwy |
| UPDATE | /products/categories | Masowa aktualizacja kilku kategorii (PATCH/PUT/UPDATE) |
| UPDATE | /products/categories/{id} | Zaktualizuj kategorię według ID (PATCH/PUT/UPDATE) |
| UPDATE | /products/categories/name/{name} | Zaktualizuj kategorię według nazwy |
Parametry kategorii nadrzędnych
| Parametr | Typ | Opis |
|---|---|---|
category_parent_id |
int | ID kategorii nadrzędnej. Używany w pierwszej kolejności, jeśli jest podany. |
category_parent_name |
string | Łacińska nazwa (alias / slug, adres otwarcia kategorii) kategorii nadrzędnej. Używany, jeśli category_parent_id nie jest podany. W przypadku zbieżności nazw można doprecyzować przez category_lang. |
category_lang |
string | Język kategorii. Stosowany do rozwiązywania kolizji takich samych category_parent_name w różnych językach. |
Zasada działania:
- Najpierw sprawdzany jest
category_parent_id. - Jeśli nie jest podany – używany jest
category_parent_name. - W przypadku zbieżności nazw – dodawana jest weryfikacja przez
category_lang.
Szczególna zasada:
Aby dodać kategorię do głównej (korzeniowej) kategorii, należy wskazać category_parent_name = "main" i obowiązkowo podać parametr category_lang – język kategorii nadrzędnej.
Aktualizacja i usuwanie:
update_exists (bool) – jeśli true, aktualizuje kategorię, jeśli już istnieje (domyślnie false).
delete (bool) – jeśli true, kategoria zostanie usunięta.
📥 Import/eksport kategorii sklepu przez API:
Kod masowego importu i eksportu kategorii sklepu jest dostępny przez Commerce API na GitHub.
📥 Pobierz z GitHub
4. Producenci
| Metoda | URL | Opis |
|---|---|---|
| POST | /products/producers | Masowe dodawanie i aktualizacja producentów |
| GET | /products/producers | Pobierz listę producentów |
| GET | /products/producers/{id} | Pobierz producenta według ID |
| GET | /products/producers/name/{name} | Pobierz producenta według nazwy |
| UPDATE | /products/producers | Masowa aktualizacja kilku producentów (PATCH/PUT/UPDATE) |
| UPDATE | /products/producers/{id} | Zaktualizuj producenta według ID (PATCH/PUT/UPDATE) |
| UPDATE | /products/producers/name/{name} | Zaktualizuj producenta według nazwy |
| DELETE | /products/producers/{id} | Usuń producenta według ID (jeśli brak produktów i podproducentów) |
| DELETE | /products/producers/name/{name} | Usuń producenta według nazwy |
Parametry powiązań producentów
| Parametr | Typ | Opis |
|---|---|---|
producer_parent_id |
int | ID producenta nadrzędnego (grupy). Używany w pierwszej kolejności, jeśli jest podany. |
producer_parent_name |
string | Łacińska nazwa (alias / slug, adres otwarcia producenta). Używany, jeśli producer_parent_id nie jest podany. W przypadku zbieżności nazw można doprecyzować przez producer_lang. |
producer_lang |
string | Język producenta. Stosowany do rozwiązywania kolizji takich samych producer_parent_name w różnych językach. |
Zasada działania:
- Najpierw sprawdzany jest
producer_parent_id. - Jeśli nie jest podany – używany jest
producer_parent_name. - W przypadku zbieżności nazw – dodawana jest weryfikacja przez
producer_lang.
Szczególna zasada:
Aby dodać producenta do głównej (korzeniowej) grupy producentów, należy wskazać producer_parent_name = "main" i obowiązkowo podać parametr producer_lang – język grupy nadrzędnej.
Aktualizacja i usuwanie:
update_exists (bool) – jeśli true, aktualizuje producenta, jeśli już istnieje (domyślnie false).
delete (bool) – jeśli true, producent zostanie usunięty.
📥 Import/eksport producentów przez API:
Kod masowego importu i eksportu producentów jest dostępny przez Commerce API na GitHub.
📥 Pobierz z GitHub
5. Kolekcje
| Metoda | URL | Opis |
|---|---|---|
| POST | /products/collections | Masowe dodawanie i aktualizacja kolekcji |
| GET | /products/collections | Pobierz listę kolekcji |
| GET | /products/collections/{id} | Pobierz kolekcję według ID |
| GET | /products/collections/name/{name} | Pobierz kolekcję według nazwy |
| UPDATE | /products/collections | Masowa aktualizacja kilku kolekcji (PATCH/PUT/UPDATE) |
| UPDATE | /products/collections/{id} | Zaktualizuj kolekcję według ID (PATCH/PUT/UPDATE) |
| UPDATE | /products/collections/name/{name} | Zaktualizuj kolekcję według nazwy |
| DELETE | /products/collections/{id} | Usuń kolekcję według ID (jeśli brak produktów i podkolekcji) |
| DELETE | /products/collections/name/{name} | Usuń kolekcję według nazwy |
Parametry powiązań kolekcji
| Parametr | Typ | Opis |
|---|---|---|
collection_parent_id |
int | ID kolekcji nadrzędnej. Używany w pierwszej kolejności, jeśli jest podany. |
collection_parent_name |
string | Łacińska nazwa (alias / slug, adres otwarcia kolekcji). Używany, jeśli collection_parent_id nie jest podany. W przypadku zbieżności nazw można doprecyzować przez collection_lang. |
collection_lang |
string | Język kolekcji. Stosowany do rozwiązywania kolizji takich samych collection_parent_name w różnych językach. |
Zasada działania:
- Najpierw sprawdzany jest
collection_parent_id. - Jeśli nie jest podany – używany jest
collection_parent_name. - W przypadku zbieżności nazw – dodawana jest weryfikacja przez
collection_lang.
Szczególna zasada:
Aby dodać kolekcję do głównej (korzeniowej) kolekcji, należy wskazać collection_parent_name = "main" i obowiązkowo podać parametr collection_lang – język kolekcji nadrzędnej.
Aktualizacja i usuwanie:
update_exists (bool) – jeśli true, aktualizuje kolekcję, jeśli już istnieje (domyślnie false).
delete (bool) – jeśli true, kolekcja zostanie usunięta.
📥 Import/eksport kolekcji przez API:
Kod masowego importu i eksportu kolekcji jest dostępny przez Commerce API na GitHub.
📥 Pobierz z GitHub
6. Sortowanie i paginacja
Dla metod /orders, /products, /blog/articles oraz /pages dostępne są parametry stronicowania i sortowania:
Parametry paginacji
| Parametr | Typ | Opis |
|---|---|---|
page | int | Numer strony (domyślnie 1) |
per_page | int | Liczba elementów na stronę. Domyślnie: produkty — 500, pozostałe — 200. Maksymalnie: zamówienia i rezerwacje — 2000, produkty — 5000, reszta — 2000. Pages: tworzenie — do 100 stron na żądanie, aktualizacja — do 500 stron na żądanie |
Parametry sortowania
| Parametr | Typ | Dozwolone wartości | Opis |
|---|---|---|---|
orderby | string | id, title, price, date, views | Pole do sortowania |
order | string | asc, desc | Kierunek sortowania |
Parametry języka
| Parametr | Typ | Dozwolone wartości | Opis |
|---|---|---|---|
l | string | ru, ua, en, de, fr, es, it, pl | Język wyświetlania wartości |
Dodatkowo dla zamówień
Można filtrować zamówienia według daty i statusu:
?after=YYYY-MM-DD— Data początkowa (w formacie ISO)?before=YYYY-MM-DD— Data końcowa?status=pending|processing|on-hold|completed|cancelled|0|1|2|3|5|6|7|8— Status zamówienia (można podać tekstowy status WooCommerce lub kod liczbowy)0— Nieprzetworzone (pending)1— Zamówienie w trakcie realizacji (processing)7— Zamówienie w trakcie realizacji, oczekuje na dostawę (on-hold)3— Zrealizowane (completed)8— Zrealizowane i zakończone (completed)2— Anulowane (cancelled)5— Anulowane: brak w magazynie (cancelled)6— Anulowane: odmowa (cancelled)?show_deleted=1— Pokaż ukryte zamówienia?id_min=10022— Tylko zamówienia z ID większym lub równym podanej wartości. Przydatne przy imporcie przyrostowym i zmniejszeniu obciążenia?id_max=15000— Tylko zamówienia z ID mniejszym lub równym podanej wartości?limit=50— Ogranicz liczbę zwracanych zamówień (maks. 2000). Filtrowanie odbywa się po stronie API
Przykłady
GET /orders?page=2&per_page=100&after=2024-06-01&before=2024-06-30
GET /products?orderby=price&order=asc&per_page=50
GET /booking?date_from=2024-06-01&date_to=2024-06-30&type=0
GET /booking?group_id=5&slug_search=yoga-morning
Przykład autoryzacji
Sposób 1 — przez parametr zapytania (prosty):
?consumer_secret=TWOJ_SEKRET
⛔ Nie udostępniaj klucza publicznie!
Sposób 2 — przez nagłówek Authorization (OAuth 1.0a):
Authorization: OAuth oauth_consumer_key="TWOJ_SEKRET"
🔗 Żywy przykład — zapytanie do API:
https://boostore.pro/api/commerce/orders?per_page=5&consumer_secret=your_authorization_token_hereDodaj nowe zamówienie (POST /orders)
Aby utworzyć nowe zamówienie przez API, wyślij żądanie POST na /orders z treścią JSON.
Minimalnie musisz podać:
email— Email klienta (wymagane!)line_items— Lista produktów do dodania
Parametry zamówienia
Podczas tworzenia zamówienia możesz podać dodatkowe pola, na przykład:
{
"first_name": "Imię",
"last_name": "Nazwisko",
"email": "alex@example.com",
"phone": "+487001112233",
"address": "Pełny adres jeśli nie używasz eform",
"buyer_address_eform1": "Województwo",
"buyer_address_eform2": "Miasto",
"buyer_address_eform3": "Ulica",
"buyer_address_eform4": "Numer domu",
"buyer_address_eform5": "Mieszkanie",
"buyer_address_eform7": "Ukraina",
"postcode": "01-001",
"total": "999",
"status": "processing",
"status_for_customer": "processing",
"line_items": [ ... ]
}
Opis pola total:
total— końcowa kwota zamówienia (ciąg lub liczba). Jeśli podana, będzie użyta jako ostateczna cena zamówienia.- Jeśli
totalnie jest podane, kwota zamówienia zostanie automatycznie obliczona na podstawie sumyline_items. - Pole
totalnie jest wymagane i może być użyte do zamówień bez produktów.
Parametry płatności subskrypcyjnej
Zamówienie można oznaczyć jako płatność subskrypcyjną (płatność cykliczna). W tym celu w ciele zapytania JSON należy przekazać następujące pola:
{
"subscribe": 1,
"subscribe_mode": "period",
"subscribe_period": "month"
}
subscribe—0wyłączone (domyślnie),1— włączone.subscribe_mode—buyer(kupujący wybiera okres przy płatności) lubperiod(ustalony okres rozliczeń).subscribe_period— okres rozliczeń dlasubscribe_mode=period:day,week,month,year.
Format line_items
Parametr line_items to tablica produktów. Każdy produkt to obiekt z następującymi polami:
"line_items": [
{
"product_id": 478734,
"quantity": 1,
"price": 100,
"currency": "USD"
},
{
"product_id": 478268,
"quantity": 10,
"variation": "51"
},
{
"product_id": 478266,
"quantity": 1,
"variation_id": 735302
}
]
- product_id — ID produktu (wymagane!).
- quantity — Ilość sztuk (wymagane!).
- price — (opcjonalne) Jeśli podana cena — będzie użyta ta wartość zamiast ceny wyliczonej na stronie.
- currency — (opcjonalne) Waluta konkretnego produktu (np.
USDlubPLN). Jeśli podana i różna od głównej waluty zamówienia (currency), system automatycznie przeliczy cenę. - variation_id — ID wariantu produktu — sposób wskazania wariantu, jeśli istnieje.
- variation — Nazwa lub kod wariantu — używane, jeśli nie ma
variation_id. Jeśli podane oba — priorytet mavariation_id.
Ważne: Jeśli główna waluta zamówienia (currency) nie jest podana — użyta zostanie domyślna waluta sklepu.
Jeśli waluta produktu różni się od głównej — cena zostanie przeliczona automatycznie.
Parametry rezerwacji
Jeśli zamówienie jest powiązane z rezerwacją, możesz określić:
booking— liczba całkowita (0/1). Flaga wskazująca, czy zamówienie ma rezerwację. Ustaw1, aby oznaczyć zamówienie jako rezerwację.booking_data— obiekt. Szczegóły rezerwacji (używane w POST/PUT/PATCH). Pola:
"booking_data": {
"slot_id": 123,
"slot_title": "Nazwa slotu",
"group_id": 0,
"start_time": 1710000000,
"end_time": 1710003600,
"duration": 3600,
"factor": 1.0,
"base_price": "100$",
"price": "100$",
"payment_required": true,
"status": 0,
"after_payment_status": 3,
"userid": 0,
"author": 0,
"dates_start_year": "2026",
"dates_start_date": "2026-07-07",
"dates_start_time": "10:00:00",
"dates_end_year": "2026",
"dates_end_date": "2026-07-07",
"dates_end_time": "11:00:00"
}
- slot_id — ID slotu rezerwacji (wymagane).
- slot_title — Nazwa slotu.
- group_id — ID grupy do grupowania slotów.
- start_time — Czas rozpoczęcia (Unix timestamp).
- end_time — Czas zakończenia (Unix timestamp).
- duration — Czas trwania w sekundach.
- factor — Współczynnik mnożnika.
- base_price — Cena bazowa (ciąg z symbolem waluty).
- price — Cena końcowa (ciąg z symbolem waluty).
- payment_required — Czy wymagana jest płatność (true/false).
- status — Status rezerwacji (0-8). Wartości: 0 — nowy, 1 — w realizacji, 2 — anulowany, 3 — zakończony, 4-8 — dodatkowe statusy.
- after_payment_status — Status ustawiany dla zamówienia po udanej płatności. Ten sam zakres co status (0-8).
- userid — ID użytkownika-kupującego.
- author — ID autora/menedżera, który utworzył rezerwację.
- dates_start_* / dates_end_* — Daty i godziny w formacie czytelnym (opcjonalnie).
🛡️ Ochrona przed duplikatami: Podczas tworzenia lub aktualizacji zamówienia z booking_data system automatycznie sprawdza, czy podany przedział czasowy jest już zajęty przez inne nieanulowane zamówienie (statusy 2, 5, 6 są uznawane za anulowane — slot jest wolny). Jeśli slot jest zajęty, API zwraca błąd 409 Conflict.
Operacje na płatności zamówienia (hold / zwrot) przez API
Aktualizacja zamówienia po ID (PATCH/PUT/UPDATE /orders/{id} lub /crm_orders/{id}) pozwala nie tylko zmieniać pola zamówienia, ale też wykonywać operacje na płatności online. W tym celu w ciele JSON żądania przekazuje się specjalny parametr:
{
"payment_action": "hold_finalize"
}
Dozwolone wartości payment_action:
hold_finalize— potwierdź hold (pobierz/sfinalizuj środki, jeśli zamówienie jest w statusie hold — środki zostały zablokowane przez system płatności). Analogicznie do przycisku „Finalizuj hold" w statystykach sprzedaży.hold_cancel— anuluj hold (odblokuj środki kupującego). Analogicznie do przycisku „Anuluj hold".refund— zwróć (anuluj) już wykonaną płatność (pełny lub częściowy).
Dla zwrotu należy podać typ — refund_type (wymagany): full (pełny zwrot na kwotę płatności) lub partial (częściowy, z podaniem kwoty refund_amount w formacie 123.45).
{
"payment_action": "refund",
"refund_type": "full"
}
{
"payment_action": "refund",
"refund_type": "partial",
"refund_amount": 12.50
}
Ograniczenia:
- Dla
refund_type=partialparametrrefund_amountjest wymagany i musi być większy od 0. - Kwota częściowego zwrotu nie może przekraczać opłaconej kwoty zamówienia — w przeciwnym razie API zwróci błąd
400(refund_amount exceeds the paid amount). - Zwrot częściowy nie jest obsługiwany przez wszystkie systemy płatności (np. NovaPay pozwala tylko na pełny zwrot).
Operacja wykonuje się w systemie płatności przypisanym do zamówienia (LiqPay, Monobank, WayForPay, Privat24, NovaPay, Stripe, Square, PayPal, iPay itp.). Sukces sprawdzany jest po statusie płatności w bazie. Zwrot możliwy tylko w ciągu 1 tygodnia po płatności (ograniczenie systemów płatności).
💳 Przykład zwrotu: PATCH /orders/12345 z ciałem {"payment_action":"refund","refund_type":"full"} lub {"payment_action":"refund","refund_type":"partial","refund_amount":12.50}
Pola zwrotu w zamówieniu (edycja przez PATCH/PUT, zwracane w GET): online_payment_refund_partial (1 — zwrot częściowy), online_payment_refund_amount (kwota zwrotu), online_payment_amount_left (pozostała kwota płatności).
Aktualizacja produktów
Aktualizacja produktu odbywa się przez HTTP UPDATE (lub PATCH/PUT) z użyciem URL z ID lub SKU produktu, albo wielu produktów jednym żądaniem:
/products/{id}— aktualizacja produktu po ID/products/sku/{sku}— aktualizacja produktu po kodzie SKU/products— masowa aktualizacja wielu produktów (do 5000 w jednym żądaniu)
Przy masowej aktualizacji ścieżka /products nie zawiera ID ani SKU. W tym przypadku należy przesłać tablicę obiektów produktów w parametrze products. Każdy element musi zawierać co najmniej id lub sku. Jeśli podane jest id, ma ono priorytet i może zastąpić sku. Jeśli id nie jest podane, wyszukiwanie odbywa się po sku.
Aktualizacja przesyła pełny zestaw danych produktu w formacie JSON. Wszystkie przesłane dane zastępują istniejące wartości, w tym:
- Główne właściwości produktu (nazwa, opis, ceny, status itp.)
- Atrybuty
- Warianty
- Obrazy
- Kategorie i tagi
- Ustawienia dodatkowe i meta pola
Warianty są aktualizowane zgodnie z poniższym algorytmem dla każdego wariantu w tablicy variations:
- Jeśli podane jest
id, aktualizacja odbywa się po nim. - Jeśli
idbrak, ale podane jestsku, aktualizacja odbywa się po kodzie. - Jeśli nie ma ani
id, anisku, ale jesttitle, aktualizacja odbywa się po nazwie. - Jeśli wariant nie zostanie znaleziony, zostanie utworzony nowy z podanymi parametrami.
Aktualizacja po SKU jest wygodna, gdy ID wariantu nie jest znane, ale znany jest unikalny kod.
Przy aktualizacji wszystkie pola w JSON zastąpią aktualne wartości produktu; aby zachować dane bez zmian, po prostu ich nie wysyłaj.
- Duplikaty wariantów: jeśli w tablicy
variationswystępują powtarzające się po SKU lub nazwie warianty — zostaną pominięte (ten sam wariant nie zostanie dodany dwa razy). - Główny obraz: w tablicy
imagesobraz pod indeksem0jest uznawany za główny. Jeśliimages[0]nie istnieje lub nie jest przesłany — głównym zostanie pierwszy poprawnie załadowany obraz. - Maksymalna liczba obrazów: dla jednego produktu można przesłać maksymalnie 10 obrazów. Próba przesłania większej liczby spowoduje pominięcie nadmiarowych plików.
-
Zarządzanie obrazami:
- Usuwanie obrazów: aby usunąć obraz po indeksie, ustaw w tablicy
imageswartość"delete". Na przykładimages[2] = "delete"usunie obraz o indeksie 2. Możesz jednocześnie usuwać i przesyłać, wskazując wiele kluczy:images[3] = "delete",images[1] = "https://...". - Puste indeksy: jeśli podasz pusty ciąg lub
false, ten indeks zostanie pominięty bez błędu. - Nadpisanie obrazów: parametr
images_replace: jeślitrue, system nadpisze istniejące pliki obrazów pod podanymi indeksami (usunie stary plik i cache). Jeślifalselub brak — nadpisanie jest wyłączone. - Pomijanie zajętych indeksów: parametr
images_skip_index: jeślitrue, a indeks jest zajęty i nadpisanie jest wyłączone — system znajdzie kolejny wolny indeks i zapisze tam plik. Jeślifalselub brak — indeks jest brany dokładnie jak podany. - Nowy indeks przy konflikcie: parametr
images_replace_new_index: jeślitrue, a indeks jest zajęty i zarówno nadpisanie, jak i auto-pomijanie są wyłączone — plik zostanie zapisany pod nowym wolnym indeksem. Jeśli wszystkie trzy parametry tofalselub brak i indeks jest zajęty — plik nie zostanie przesłany.
- Usuwanie obrazów: aby usunąć obraz po indeksie, ustaw w tablicy
Parametry produktu
Dostępne wartości można zobaczyć w przykładowym kodzie poniżej. Znajdują się tam również dodatkowe wyjaśnienia niektórych wartości, które mogą być przydatne.
-
Dostępne wartości
price_forDla każdego produktu można określić parametr
price_for, który ustala jednostkę rozliczeniową ceny. Dozwolone jest użycie kodu liczbowego lub tekstu (na przykład „Za 1 kg”). Oto pełna lista wartości:Można użyć wartości liczbowej lub tekstowej — system automatycznie rozpozna i przypisze właściwy kod.
-
Dostępne wartości
stock_statusDla każdego produktu możesz ustawić parametr
stock_status, który określa status dostępności produktu i jego zachowanie na stronie. Można użyć kodu liczbowego lub słowa kluczowego — system rozpoznaje obie wersje.Można podać wartość liczbową lub tekst — system automatycznie rozpozna i przekształci na odpowiedni kod.
Jeśli dla produktu ustawiono
3, zostanie on ukryty na liście produktów na stronie. Jeśli ustawiono4, produkt będzie widoczny, ale nie będzie można go dodać do koszyka. Opcja5informuje kupującego, że dostępność należy potwierdzić. -
Promocja i dostępne wartości
promotion_expires_jobDla każdego produktu możesz ustawić parametr
promotion_expires_job, który określa, co zrobić z promocją po upływie jej terminu.
Można użyć kodu liczbowego lub słowa kluczowego — system rozpoznaje obie wersje.Można podać wartość liczbową lub tekst — system automatycznie rozpozna i przekształci na odpowiedni kod.
Ważne: Aby aktywować licznik promocji, pamiętaj, aby ustawić
promotionna1— to oznacza, że promocja jest aktywna.Należy również podać datę zakończenia promocji w parametrze
promotion_expires— można ją ustawić jako czas UNIX (np.time()) lub w formacieYYYY-MM-DDTHH:MM:SS+00:00(np.2025-06-28T00:00:00+00:00).
Aliasy pól (zgodność z WooCommerce):
content = description, excerpt = short_description,
cat_id / rubric_id = category_id,
sale_price = price, original_price = regular_price,
menu_order = priority, wholesale_price = price_cost,
slug = name (jeśli podano oba, slug ma priorytet).
📦 Przykład rzeczywistej odpowiedzi GET /products/{id}
Aby zobaczyć aktualne pola swojego produktu, wykonaj GET /products/{id} lub GET /products/sku/{sku}. Poniżej przykładowa odpowiedź dla produktu Salomon Quest 4D 3 GTX (ID: 483472):
{
"id": 483472,
"sku": "Q4D3-BLK_ru",
"title": "Salomon Quest 4D 3 GTX",
"permalink": "https://yourdomain.com/ru/pers_shop/demo_ru/salomonquest4d3gtx.htm",
"access": true,
"language": "ru",
"multilangid": 483641,
"price": 220.00,
"regular_price": 280,
"currency": "USD",
"stock_status_value": "W magazynie",
"stock_status": 0,
"stock_quantity": 0,
"featured": false,
"new": 1,
"reducedprice": false,
"discount": null,
"moq": 0,
"promotion": 0,
"promotion_text": null,
"promotion_expires": null,
"bought_with": null,
"products_synonyms": null,
"categories": [
{ "id": 28143, "name": "demo_ru", "title": "Kategoria demonstracyjna" }
],
"producer": {
"id": 4806,
"name": "salomon_ru",
"title": "Salomon",
"lang": "ru"
},
"images": [
{ "src": "https://yourdomain.com/upload/shop_catalog/s15992/483472/483472_0.jpg", "name": "483472_0.jpg" },
{ "src": "https://yourdomain.com/upload/shop_catalog/s15992/483472/483472_1.webp", "name": "483472_1.webp" }
],
"type": 0,
"attributes": [
{ "id": 0, "name": "Product type", "options": [""] }
],
"variations_exists": 8,
"variations": [
{ "id": 749582, "sku": "Q4D3-BLK_36", "title": "36", "stock_status": 0, "stock_status_value": "W magazynie" },
{ "id": 749590, "sku": "Q4D3-BLK_37", "title": "37", "stock_status": 4, "stock_status_value": "Zapytaj o dostępność" },
{ "id": 749602, "sku": "Q4D3-BLK_38", "title": "38", "stock_status": 0, "stock_status_value": "W magazynie" }
],
"weight": 0,
"weight_units": 0,
"dimensions": {
"length": 0, "width": 0, "height": 0, "units": 0
},
"short_description": null,
"description": "Flagowy model do wielodniowego trekkingu...",
"description_tab_1": "Salomon Quest 4D 3 GTX: Niezrównane Wsparcie i Ochrona...",
"meta_title": null,
"meta_description": null,
"meta_keywords": null,
"video": null,
"priority": 0,
"rating": 0,
"comments": 0,
"views": 569,
"orders": 0,
"shipping_price": 0,
"add_date": "2025-10-25T00:16:09+00:00",
"last_edit": "2026-04-10T18:30:57+00:00"
}
💡 Pełny przykład możesz uzyskać, wykonując żądanie GET do API produktów swojego sklepu.
Dodawanie produktów
Ta metoda pozwala dodać jeden lub kilka produktów jednym żądaniem (do 3000 w jednym żądaniu).
Format żądania jest identyczny jak przy aktualizacji: możesz przesłać tablicę products
lub pojedynczy produkt.
- Sprawdzanie ID: podczas dodawania nowego produktu pole
idpowinno być puste lub pominięte. Jeśliidjest podane i produkt z tym ID już istnieje — system zaktualizuje ten produkt zamiast tworzyć nowy. - Sprawdzanie SKU: przed dodaniem system sprawdzi, czy istnieje produkt z tym SKU. Jeśli tak — zostanie zaktualizowany, a nie dodany ponownie.
Możesz dodać nowe produkty i zaktualizować istniejące jednym żądaniem.
📥 Import/eksport produktów przez API:
Kod masowego importu i eksportu produktów jest dostępny przez Commerce API na GitHub.
📥 Pobierz z GitHub
7. Katalog artykułów (blog)
| Metoda | URL | Opis |
|---|---|---|
POST |
/blog/articles |
Masowe dodawanie i aktualizacja artykułów |
GET |
/blog/articles |
Pobierz listę artykułów. Obsługuje paginację (?page=N&per_page=N), sortowanie (?orderby=id|name|position|datestamp&order=asc|desc) i filtrowanie (?category_id=N lub ?category_id=1,2,3, ?category=name, ?status=0|1, ?date_after=YYYY-MM-DD, ?date_before=YYYY-MM-DD, ?lang=ru|ua|en|pl) |
GET |
/blog/articles/{id} |
Pokaż pojedynczy artykuł po ID |
UPDATE |
/blog/articles/{id} |
Zaktualizuj artykuł po ID (PATCH/PUT/UPDATE) |
UPDATE |
/blog/articles |
Masowa aktualizacja wielu artykułów (PATCH/PUT/UPDATE) |
GET |
/blog/articles/slug/{slug} |
Pobierz artykuł po nazwie systemowej (slug) |
UPDATE |
/blog/articles/slug/{slug} |
Zaktualizuj artykuł po nazwie systemowej (slug) (PATCH/PUT/UPDATE) |
DELETE |
/blog/articles/{id} |
Usuń artykuł po ID |
Pola artykułu
| Parametr | Typ | Opis |
|---|---|---|
title |
string | Tytuł artykułu (wyświetlany na stronie, H1) |
meta_title |
string | Meta tytuł (title) |
meta_description |
string | Meta opis |
meta_keywords |
string | Słowa kluczowe |
description |
text | Pełny tekst artykułu |
short_description |
text | Krótki opis (zapowiedź) artykułu |
name |
string | URL slug (ČPU). Tylko litery łacińskie i myślniki (np. moj-artykul) |
slug |
string | URL slug (ČPU). To samo co name. Tylko litery łacińskie i myślniki |
language |
string | Język artykułu (ru, en, ua, pl, itd.) |
category_id |
int | ID kategorii (rubryki) z blog_catalog_value. Wymagane dla nowego artykułu |
status |
int | Dostęp: 1 — opublikowano (dostępne), 0 — ukryto (niedostępne) |
priority |
int | Priorytet (pozycja sortowania, 0–29) |
datestamp |
int (unix) | Data publikacji (Unix timestamp) lub w formacie ISO 8601 |
schema |
int | Typ znaczników Schema.org (0–9).0 — WebPage (domyślnie)1 — Article6 — BlogPosting7 — NewsArticle2 — AboutPage3 — ContactPage4 — CollectionPage5 — ProfilePage9 — FAQPage8 — Bez znaczników
|
planned |
int | Planowana publikacja: 0/1 |
settings_comments |
string | Ustawienia komentarzy |
settings_rating |
int | Ustawienia ocen: 0/1 |
update_exists |
bool | Jeśli true, aktualizuje artykuł przy ponownym dodaniu (domyślnie false) |
delete |
bool | Jeśli true, artykuł zostanie usunięty (soft delete) |
tags |
string | Tagi artykułu oddzielone przecinkami (max 8). Zapisywane w osobnej tabeli tagów |
multilangid |
string | ID artykułu w innych językach. Łączy tłumaczenia tego samego artykułu na różnych wersjach językowych strony |
slug_search |
string | Wyszukiwanie artykułu po nazwie systemowej (slug) do aktualizacji. Alternatywa dla ID. Nie jest przechowywane w DB |
Filtrowanie listy artykułów (GET)
Podczas pobierania listy artykułów (GET /blog/articles) dostępne są parametry filtrowania:
| Parametr | Typ | Opis |
|---|---|---|
category_id | int/string | ID kategorii. Pojedyncze ID lub lista rozdzielona przecinkami: ?category_id=1,2,3 |
category | string | Nazwa kategorii (slug). Pojedyncza nazwa lub lista rozdzielona przecinkami: ?category=sitecreate_ru,blog_news. Alternatywa dla category_id |
status | int | Filtr dostępu: 1 — opublikowano (dostępne), 0 — ukryto (niedostępne) |
date_after | string | Data początkowa publikacji (ISO 8601). Przykład: ?date_after=2026-07-01 |
date_before | string | Data końcowa publikacji (ISO 8601). Przykład: ?date_before=2026-07-31 |
lang | string | Język artykułu: ru, ua, en, pl i inne |
id_min | int | Pobieraj tylko artykuły z ID większym lub równym podanej wartości. Przykład: ?id_min=10022. Przydatne przy imporcie przyrostowym i zmniejszeniu obciążenia |
id_max | int | Pobieraj tylko artykuły z ID mniejszym lub równym podanej wartości. Przykład: ?id_max=15000 |
limit | int | Ogranicz liczbę zwracanych rekordów (maks. 2000). Przykład: ?limit=50. Filtrowanie odbywa się po stronie API |
Dostępne są również standardowe parametry sortowania: orderby (id, name, position, datestamp) i order (asc, desc).
Aliasy pól (zgodność z WooCommerce):
content = description, excerpt = short_description,
cat_id / rubric_id / category = category_id,
date / date_created / date_created_gmt = datestamp,
slug = name (jeśli podano oba, slug ma priorytet).
Masowe dodawanie i aktualizacja
POST/PUT/PATCH na /blog/articles przyjmuje zarówno pojedynczy obiekt artykułu, jak i tablicę obiektów w polu articles:
{
"articles": [
{
"title": "Mój artykuł",
"slug": "moj-artykul",
"language": "pl",
"category_id": 5,
"description": "<p>Treść artykułu</p>",
"short_description": "Zapowiedź",
"meta_title": "Mój artykuł | Strona",
"tags": "trampki, nike, adidas, buty sportowe",
"status": 1,
"priority": 5,
"schema": 6
},
{
"title": "Another article",
"slug": "another-article",
"language": "en",
"category_id": 10,
"description": "<p>Article text</p>",
"status": 1
}
]
}
Aktualizacja i usuwanie:
update_exists (bool) – jeśli true, aktualizuje artykuł przy ponownym dodaniu (domyślnie false).
delete (bool) – jeśli true, artykuł zostanie usunięty (soft delete: ukryty z list).
slug_search (string) – wyszukiwanie artykułu po nazwie systemowej (slug/name) do aktualizacji przez PUT/PATCH/POST. Jeśli id nie jest podane, artykuł jest wyszukiwany po slug_search. Jeśli podano oba, najpierw próbowane jest ID, a w razie niepowodzenia – slug_search. Uwzględnia język artykułu (parametr language lub język kategorii).
Przy usuwaniu automatycznie przeliczana jest liczba artykułów w kategorii nadrzędnej.
📥 Import/eksport artykułów przez API:
Kod masowego importu i eksportu artykułów bloga jest dostępny przez Commerce API na GitHub.
📥 Pobierz z GitHub
8. Strony witryny
| Metoda | URL | Opis |
|---|---|---|
POST | /pages | Masowe dodawanie i aktualizacja stron |
GET | /pages | Pobierz listę stron. Obsługuje paginację, sortowanie i filtrowanie |
GET | /pages/{id} | Pokaż pojedynczą stronę po ID |
GET | /pages/slug/{slug} | Pobierz stronę po nazwie systemowej (slug) |
UPDATE | /pages/{id} | Zaktualizuj stronę po ID (PATCH/PUT/UPDATE) |
UPDATE | /pages | Masowa aktualizacja wielu stron (PATCH/PUT/UPDATE) |
DELETE | /pages/{id} | Usuń stronę po ID |
Pola strony
title (string) — Tytuł strony
meta_title (string) — Meta tytuł
meta_description (string) — Meta opis
meta_keywords (string) — Słowa kluczowe
meta_html (text) — Niestandardowy HTML w <head>
description (text) — Pełny tekst strony
short_description (text) — Krótki opis
name / slug (string) — URL slug (łacińskie znaki, cyfry, myślniki, kropki)
language (string) — Język strony
status (int) — 1 = opublikowano, 0 = ukryto
priority (int) — Priorytet (sortowanie)
datestamp (int) — Data publikacji (Unix timestamp)
show_tree (int) — 0/1/2 (0 — ustawienia, 1 — ukryj, 2 — pokaż)
show (int) — 1/true/show/visible — pokazuj, 0/false/hide/hidden — ukryj
schema (int) — Typ Schema.org (0-9):
0 — WebPage (domyślnie)
1 — Article
6 — BlogPosting
7 — NewsArticle
2 — AboutPage
3 — ContactPage
4 — CollectionPage
5 — ProfilePage
9 — FAQPage
8 — Bez znaczników
settings_comments / settings_rating / settings_tags — Ustawienia komentarzy/ocen/tagów
password (string) — Hasło dostępu
multilangid (string) — ID w innych językach
slug_search (string) — Szukaj po slug do aktualizacji
tags (string) — Tagi, oddzielone przecinkami (do 8)
Filtrowanie
?status=0|1, ?date_after=YYYY-MM-DD, ?date_before=YYYY-MM-DD, ?lang=ru|ua|en|pl
Po ID: ?id_min=10022 (tylko ID ≥), ?id_max=15000 (tylko ID ≤)
Limit: ?limit=50 (maks. 2000, filtrowanie po stronie API)
Sortowanie: ?orderby=id|name|position|datestamp&order=asc|desc
Przykład JSON
{
"pages": [
{"title": "O nas", "slug": "about-us", "language": "pl", "description": "<p>Tekst</p>", "status": 1},
{"title": "Kontakt", "slug": "contacts", "language": "pl", "description": "<p>Kontakt</p>", "status": 1}
]
}
Aliasy pól: content = description, excerpt = short_description, slug = name
update_exists (bool) — aktualizacja przy ponownym dodaniu.
delete (bool) — usunięcie (soft delete).
slug_search (string) — wyszukiwanie po slug dla PUT/PATCH.
📥 Import/eksport stron przez API:
Kod masowego importu i eksportu stron jest dostępny przez Commerce API na GitHub.
📥 Pobierz z GitHub
9. Bloki/Menu
| Metoda | URL | Opis |
|---|---|---|
POST | /blocks | Masowe dodawanie i aktualizacja bloków/menu |
GET | /blocks | Pobierz listę bloków. Obsługuje paginację, sortowanie i filtrowanie |
GET | /blocks/{id} | Pobierz pojedynczy blok po ID |
GET | /blocks/slug/{slug} | Pobierz blok po nazwie systemowej (slug) |
UPDATE | /blocks/{id} | Aktualizuj blok po ID (PATCH/PUT/UPDATE) |
UPDATE | /blocks | Masowa aktualizacja wielu bloków (PATCH/PUT/UPDATE) |
DELETE | /blocks/{id} | Usuń blok po ID |
Pola bloku
id (int) — ID bloku
name (string) — Nazwa systemowa (slug). Tylko łacińskie znaki, cyfry, myślniki
title (string) — Tytuł bloku
description (text) — Treść bloku (HTML, SHORTCODE, BBCODE)
position (string) — Pozycja: left, right, top, buttom, header, header_meta, header_meta_data, header_before_meta_data, footer
menu_order (int) — Kolejność sortowania (im więcej, tym wyżej)
language (string) — Język bloku: ru, ua, en, pl, all
show (int) — Widoczność: 0 — ukryty, 1 — wszyscy, 2 — tylko użytkownicy, 3 — tylko goście, 4 — tylko admini, 5 — tylko admin witryny, 6 — admin i menedżer
show_on_page (int) — Typ stron: 0 — wszędzie, 1 — proste, 2 — blog, 4 — newsy, 6 — sklep, 7 — nie na głównej, 8 — na głównej, 9 — wyszukiwanie
show_on_device (int) — Urządzenia: 0 — wszystkie, 1 — komputery, 2 — mobilne
access (int) — Dostęp do bloku
querystring_show (text) — URL/ścieżki do pokazania (linia po linii, bez HTML)
querystring_hide (text) — URL/ścieżki do ukrycia (linia po linii, bez HTML)
querystrpos_show (text) — Fragmenty URL do pokazania (linia po linii, bez HTML)
querystrpos_hide (text) — Fragmenty URL do ukrycia (linia po linii, bez HTML)
script (int) — Twórz plik JS: 0/1
script_async (int) — Typ skryptu: 0 — brak, 1 — async, 2 — defer, >2 — CSS
div (int) — Opakowanie HTML: 0 — brak, 1 — span, 2 — div, 3 — aside, 4 — section, 5 — nav
Filtrowanie
?status=0|1, ?position=header|footer|..., ?lang=ru|ua|en|pl, ?slug=name
Po ID: ?id_min=10022 (tylko ID ≥), ?id_max=15000 (tylko ID ≤)
Limit: ?limit=50 (maks. 2000, filtrowanie po stronie API)
Sortowanie: ?orderby=id|name|title|position|menu_order&order=asc|desc
Przykład JSON
{
"blocks": [
{"name": "about-sidebar", "title": "O nas", "language": "pl", "description": "<p>Tekst</p>", "position": "left", "menu_order": 10, "show": 1},
{"name": "footer-contacts", "title": "Kontakt", "language": "pl", "description": "<p>Kontakt</p>", "position": "footer", "show": 1}
]
}
Aliasy pól: content = description, priority = menu_order, slug = name
update_exists (bool) — aktualizacja przy ponownym dodaniu.
delete (bool) — usunięcie.
slug_search (string) — wyszukiwanie po slug dla PUT/PATCH.
Zastrzeżone nazwy systemowe:
google — całkowicie wykluczony z API.
mobile_menu_widget, footer_widget, main_menu_widget — tylko do odczytu (GET).
smart_search_menu, smart_search_menu_select, slide_menu_widget, slider, slider2, slider3, slider_noscript — bloki systemowe.
📥 Import/eksport bloków przez API:
Kod masowego importu i eksportu bloków/menu jest dostępny przez Commerce API na GitHub.
📥 Pobierz z GitHub
Booking API — zarządzanie slotami rezerwacji
API do zarządzania slotami rezerwacji. Endpoint: /api/commerce/booking.
Ważne: Endpoint /booking działa na tabeli booking_slots — szablonach/definicjach slotów (harmonogram, typy powtórzeń, ceny). Rzeczywista dostępność (czy slot jest wolny) jest zwracana przez wewnętrzny /api_booking.jsonp?action=get_booking_slot_time używany przez widżet na stronie.
Dostępne metody:
GET /booking— pobierz listę szablonów slotów (harmonogram)GET /booking/{id}— pobierz szablon slotu po IDGET /booking/slug/{slug}— pobierz szablon slotu po name (nazwie)POST /booking— utwórz nowy szablon slotuPUT /booking[/{id}]— zaktualizuj szablon slotu (priorytet wyszukiwania: ID → group_id → slug_search)PATCH /booking[/{id}]— częściowa aktualizacja (analogicznie do PUT)DELETE /booking/{id}— usuń szablon slotu po IDDELETE /booking/slug/{slug}— usuń szablon slotu po name
Pola slotu rezerwacji (booking_slots):
id | int | ID slotu (auto_increment) |
date | string (Y-m-d) | Data slotu |
time_start | string (H:i:s) | Czas rozpoczęcia |
time_end | string (H:i:s) | Czas zakończenia |
group_id | int | ID grupy slotów |
group_title | string | Nazwa grupy (name) |
group_price | float | Cena grupy |
access | int | Dostęp: 0 — wszyscy, 1 — wyłączony, 2 — tylko zalogowani |
type | int | Typ: 0 — jednorazowy, 1 — codziennie, 2 — co tydzień, 3 — co miesiąc |
recurrence_day | string | Dni tygodnia dla powtarzania, po przecinku (1=Pn..7=Nd). Przykład: "1,3,5" |
recurrence_month | string | Miesiące dla powtarzania, po przecinku (1..12). Przykład: "3,6,9,12" |
description | string | Opis slotu (HTML) |
author | string | Autor |
Pełna lista pól: api/api_commerce/booking/api_meta_booking_fields.php.
Filtrowanie GET /booking: parametry ?date_from=, ?date_to=, ?group_id=, ?type=, ?access=, ?slug_search=, ?id_min= (tylko ID ≥), ?id_max= (tylko ID ≤), ?limit= (limit rekordów, maks. 2000).
🔗 Przykłady zapytań:
GET /booking?date_from=2024-06-01&date_to=2024-06-30&type=0GET /booking?group_id=5&slug_search=yoga-morning
Priorytet wyszukiwania slotu dla aktualizacji/usunięcia (PUT/PATCH/DELETE):
id(z URL lub treści żądania) — ID slotugroup_id(z treści żądania) — ID grupy (jeśli grupa zawiera dokładnie 1 slot)slug_search(z treści żądania) — wyszukiwanie po nazwie (name/group_title)
Jeśli slot nie zostanie znaleziony przez slug_search — tworzony jest nowy (upsert).
Przykład utworzenia slotu jednorazowego (POST, type=0):
{
"date": "2026-07-15",
"time_start": "10:00:00",
"time_end": "11:00:00",
"group_title": "yoga-morning",
"group_price": 25.00,
"type": 0,
"access": 0
}
Przykład utworzenia slotu tygodniowego (POST, type=2):
{
"time_start": "09:00:00",
"time_end": "18:00:00",
"group_title": "work-hours",
"group_price": 50.00,
"type": 2,
"recurrence_day": "1,2,3,4,5",
"access": 0
}
Przykład aktualizacji przez group_id (PUT):
{
"group_id": 5,
"group_price": 30.00,
"description": "<p>Zaktualizowany opis</p>"
}
Przykład aktualizacji przez slug_search (PUT):
{
"slug_search": "yoga-morning",
"group_price": 35.00
}
Komentarze i opinie (Comments / Reviews)
Metody /comments pozwalaja czytac, dodawac, aktualizowac i usuwac komentarze oraz opinie dla produktow, stron, artykulow bloga i kategorii. System automatycznie przelicza srednia ocene i liczbe opinii obiektu (analogicznie do wersji webowej), w tym wersje wielojezyczne (multilang).
Parametr type okresla, z ktora systemem pracujesz: opinie produktow (type=shop) lub komentarze stron, artykulow bloga i kategorii (type=pages, wymagany parametr page_type).
Obiekt (strona/produkt) jest ustawiany jednym polem page_id — to ID strony (dla produktow — ID produktu), do ktorej nalezy opinia. Powiazanie ze strona jest weryfikowane po stronie API; nie musisz go przekazywac.
Multilang jest wyznaczany automatycznie. Parametr multilang nie jest przyjmowany od klienta: lista wersji jezykowych jest pobierana z grupy multilangid obiektu, a ocena jest przeliczana we wszystkich wersjach.
| Metoda | URL | Opis |
|---|---|---|
| GET | /comments | Lista komentarzy (z filtrami) |
| GET | /comments/{id} | Pobierz pojedynczy komentarz po ID |
| POST | /comments | Dodaj nowy komentarz/opinię |
| PUT / PATCH | /comments | Aktualizuj istniejący komentarz (przekaz id) |
| DELETE | /comments/{id} | Usun komentarz (oraz wszystkie odpowiedzi na niego) |
Parametry
System komentarzy jest okreslany parametrem type, a dla stron/artykulow/kategorii dodatkowo page_type:
| type | page_type (dla type=pages) | Obiekt |
|---|---|---|
| shop | product_page | Produkty (page_id) |
| pages | page | Strony serwisu |
| pages | blog_page | Artykuły bloga |
| pages | blog_category | Kategorie bloga |
| pages | shop_category | Kategorie sklepu |
| pages | shop_producer | Producenci |
| pages | shop_collection | Kolekcje |
Filtrowanie listy (GET /comments)
Podczas pobierania listy komentarzy dostępne są następujące parametry filtrowania:
| Parametr | Typ | Opis |
|---|---|---|
page_id | int | ID strony/produktu — tylko opinie dla tego obiektu |
parent_id | int | Tylko odpowiedzi na wskazany komentarz |
hide | int | 0 — opublikowane, 1 — ukryte/w moderacji |
rating | int | Tylko opinie z podaną oceną (1–5) |
author_email | string | Tylko opinie wskazanego autora (po email) |
id_min | int | Tylko opinie z ID większym lub równym podanej wartości. Przykład: ?id_min=10022. Przydatne przy imporcie przyrostowym i zmniejszeniu obciążenia |
id_max | int | Tylko opinie z ID mniejszym lub równym podanej wartości. Przykład: ?id_max=15000 |
limit | int | Ogranicz liczbę zwracanych rekordów (maks. 2000). Przykład: ?limit=50. Filtrowanie odbywa się po stronie API |
Pola komentarza
| Pole | Typ | Opis |
|---|---|---|
| id | int | ID komentarza |
| page_id | int | ID strony (dla produktow — ID produktu), do ktorej nalezy opinia (wymagane) |
| page_type | string | Typ obiektu: product_page (produkt) lub page/blog_page/blog_category/shop_category/shop_producer/shop_collection dla type=pages |
| parent_id | int | ID rodzica (0 = glowny, inaczej odpowiedz) |
| author_name | string | Nazwa autora (wymagana) |
| author_email | string | Email autora |
| author_userid | int | ID uzytkownika autora (0 — gosc) |
| rating | int | Ocena 1–5 (wymagana dla glownych opinii) |
| text | string | Tekst opinii (do 5000 znakow) |
| text_good | string | Zalety (do 2000 znakow, tylko dla opinii produktow) |
| text_bad | string | Wady (do 2000 znakow, tylko dla opinii produktow) |
| hide | int | 0 — opublikowany, 1 — moderowany/ukryty |
Przyklad pobrania opinii produktow (GET)
GET https://site.com/api/commerce/comments?type=product_page&page_id=489311
Authorization: Bearer TWOJ_KLUCZ
Przyklad pobrania komentarzy artykulu (GET)
GET https://site.com/api/commerce/comments?type=pages&page_type=blog_page&page_id=14093
Authorization: Bearer TWOJ_KLUCZ
Przyklad dodania opinii do produktu (POST)
{
"comments": [
{
"type": "product_page",
"page_type": "product_page",
"page_id": 489311,
"author_name": "Jan",
"author_email": "jan@example.com",
"rating": 5,
"text": "Swietny produkt, polecam!",
"text_good": "Jakosc",
"text_bad": "Brak"
}
]
}
Zadanie: POST https://site.com/api/commerce/comments?type=product_page
Po dodaniu ocena produktu jest przeliczana automatycznie (srednia ze wszystkich opublikowanych opinii z ocena, w tym wszystkich wersji wielojezycznych — wyznaczanych automatycznie z grupy multilangid produktu).
Przyklad dodania komentarza do artykulu (POST)
{
"comments": [
{
"type": "pages",
"page_type": "blog_page",
"page_id": 14093,
"author_name": "Maria",
"author_email": "maria@example.com",
"rating": 4,
"text": "Przydatny artykul, dziekuje!",
"hide": 0
}
]
}
Zadanie: POST https://site.com/api/commerce/comments?type=pages&page_type=blog_page
Przyklad aktualizacji opinii (PUT)
{
"comments": [
{
"id": 2982,
"type": "product_page",
"page_type": "product_page",
"rating": 3,
"text": "Zaktualizowany tekst opinii"
}
]
}
Zadanie: PUT https://site.com/api/commerce/comments?type=product_page
Przyklad odpowiedzi (dodanie)
{
"code": "success",
"message": "Comment added successfully",
"comments": {
"code": "success",
"added": 2982,
"updated": "",
"id": 2982,
"hash": "7243df3f8ca25d057750284c7b536097",
"type": "product_page",
"skipped": [],
"errors": [],
"errors_global": []
}
}
Przyklad odpowiedzi (lista)
{
"comments": [
{
"id": 2982,
"parent_id": 0,
"author_name": "Jan",
"author_email": "jan@example.com",
"rating": 5,
"text": "Swietny produkt, polecam!",
"hide": 0,
"page_id": 489311,
"page_type": "product_page",
"producer_extend": 9360
}
],
"type": "product_page",
"page": 1,
"per_page": 200,
"total": 124,
"total_pages": 1
}
Usuwanie opinii (DELETE)
DELETE https://site.com/api/commerce/comments/2982?type=product_page
Authorization: Bearer TWOJ_KLUCZ
Podczas usuwania wszystkie odpowiedzi na opinie sa usuwane, a ocena i liczba opinii sa przeliczane.
Uwagi dotyczace bezpieczenstwa
- Tekst jest czyszczony tymi samymi filtrami co w wersji webowej (usuwanie tagow HTML i ekranowanie znakow specjalnych).
- Wszystkie wartosci przechodza przez ekranowanie SQL (
mysqrelescstr), pola numeryczne przezintval. - Ocena dla glownych opinii jest wymagana (1–5); dla odpowiedzi ocena nie jest stosowana.
- Powiazanie komentarza ze strona jest wykonywane automatycznie po stronie API.
- Pola
text_good/text_bad(Zalety/Wady) sa stosowane tylko dla opinii produktow; dla stron/artykulow/kategorii sa ignorowane. - Wielojezycznosc (
multilang) jest wyznaczana automatycznie z grupymultilangidobiektu i nie jest przyjmowana od klienta. - Przeliczanie oceny i liczby opinii jest wykonywane dla wszystkich wspieranych typow stron (produkty, strony, artykuly, kategorie bloga, kategorie sklepu, producenci, kolekcje), w ktorych wlaczono ocene.
- Typy stron
announcement_*inews_*nie sa zarzadzane przez to API (komentarze dla nich nie sa uzywane).
To podstawowy opis głównych metod pracy z Commerce API / WooCommerce API v3 dla zamówień, produktów i kategorii.
Poniżej znajdują się przykładowe skrypty, które pomogą prawidłowo używać metod API w praktyce.