Aktualizowanie i edytowanie Volume Pricing za pomocą API
Zaktualizuj istniejącą regułę Volume Pricing za pomocą publicznego interfejsu API, wraz z pełnym opisem treści żądania.
W tym dokumencie wyjaśniono, jak zaktualizować istniejącą regułę Volume Pricing za pomocą publicznego interfejsu API.
1. Punkt końcowy
Dział zatytułowany „1. Punkt końcowy”Aby zaktualizować istniejący rekord Volume Pricing, użyj następującego punktu końcowego:
PUT https://wholesale.samita.io/api/v1/volume-pricings/{id}{id}to ID rekordu Volume Pricing- ID można znaleźć w interfejsie aplikacji (bez symbolu „#”)
- Przykład:

Przykład:
Dział zatytułowany „Przykład:”PUT https://wholesale.samita.io/api/v1/volume-pricings/12. Nagłówki żądania
Dział zatytułowany „2. Nagłówki żądania”Wszystkie żądania API muszą zawierać następujące wymagane nagłówki:
| Nagłówek | Opis | Wymagane |
|---|---|---|
X-SAMITA-API-KEY |
Klucz API dostępny w aplikacji Wholesale | Tak |
X-SAMITA-SHOP-URL |
Domena sklepu Shopify w formacie xxx.myshopify.com | Tak |
CONTENT-TYPE |
Musi mieć wartość application/json |
Tak |
Jeśli którykolwiek wymagany nagłówek jest nieobecny, żądanie zostanie odrzucone.
3. Treść żądania
Dział zatytułowany „3. Treść żądania”_ Dane użyte do aktualizacji Volume Pricing muszą być wysyłane w formacie JSON. Przykładowa struktura JSON znajduje się na końcu tego dokumentu.
_ W żądaniu wymagane są tylko pola, które mają zostać zaktualizowane. Nie trzeba wysyłać wszystkich pól, jak w metodzie Create API.
_ Pola, których nie określono, pozostaną bez zmian
Przykładowy JSON żądania:
{ "title": "New Volume Pricing", "status": true, "type": "quantity", "apply_customer": { "type": "all", "tags": [] }, "exclude_customer": { "type": "none", "tags": [] }, "apply_product": { "type": "all", "product_ids": [], "product_tags": [], "collection_ids": [], "apply_for_variants": false }, "exclude_product": { "type": "none", "product_ids": [], "collection_ids": [] }, "discount_for_variants": [ { "id": 8516448190631, "duplicated": false, "variant_pricing": true, "from_qty": "0", "from_amount": "0", "to_qty": "10", "to_amount": "0", "discount_groups": [ { "name": "all", "type": "percent", "value": "10" } ], "variants": [ { "id": 46747346763943, "duplicated": false, "from_qty": "0", "from_amount": "0", "to_qty": "10", "to_amount": "0", "discount_groups": [ { "name": "all", "type": "percent", "value": "10" } ] } ] } ], "apply_market": { "type": "all", "handle": [] }, "discount_method": "variant", "discount_groups": [ { "from_qty": "0", "from_amount": "0", "to_qty": "10", "to_amount": "0", "type": "percent", "value": "10" } ], "active_date": { "types": ["start date", "end date"], "start_at": "2026-01-15T10:00:00", "end_at": "2026-01-15T10:00:00" }}b. title
Dział zatytułowany „b. title”- Nazwa służąca do identyfikacji rekordu Volume Pricing
- Musi być ciągiem znaków
- Maksymalna długość: 255 znaków
c. status
Dział zatytułowany „c. status”- Określa, czy rekord jest aktywny
- Akceptuje tylko następujące wartości:
| Wartość | Opis |
|---|---|
true |
Reguła cenowa jest aktywna |
false |
Reguła cenowa jest nieaktywna |
d. type
Dział zatytułowany „d. type”Określa, czy ceny zależne od ilości są obliczane na podstawie ilości, czy kwoty.
Akceptowane wartości:
quantityamount
e. apply_customer
Dział zatytułowany „e. apply_customer”Określa, którzy klienci kwalifikują się do tej reguły cenowej.
Struktura:
"apply_customer": { "type": "all", "tags": []}type
Akceptowane wartości (tylko jedna z poniższych):
all– dotyczy wszystkich klientówlogged– dotyczy tylko zalogowanych klientównon-logged– dotyczy tylko klientów-gościcustomer-tags– dotyczy tylko klientów z określonymi tagami
tags
- Wymagane tylko wtedy, gdy
type == customer-tags - Musi być tablicą wartości rozdzielonych przecinkami
- Przykład:
["wholesale","b2b"]
Jeśli type nie ma wartości customer-tags, to pole można pominąć.
f. exclude_customer
Dział zatytułowany „f. exclude_customer”Służy do wyłączania wybranych klientów z reguły cenowej.
Struktura:
"exclude_customer": { "type": "none", "tags": []}type
- Wartość domyślna:
none - Akceptowane wartości:
| Wartość | Opis |
|---|---|
none |
Nie wyłączaj żadnego klienta |
customer-tags |
Wyłącz klientów według tagów |
tags
- Wymagane tylko wtedy, gdy
type == customer-tags - Tablica wartości rozdzielonych przecinkami
- Przykład:
["vip","internal"]
g. apply_product
Dział zatytułowany „g. apply_product”Określa, do których produktów będzie stosowana reguła cenowa.
Struktura:
"apply_product": { "type": "all", "product_ids": [], "product_tags": [], "collection_ids": [], "apply_for_variants": false },type
Akceptowane wartości:
allproductscollectionsproduct-tags
product_ids
- Wymagane tylko wtedy, gdy
type == products - Lista ID produktów rozdzielona przecinkami
- Przykład:
[1,2,3]
product_tags
- Wymagane tylko wtedy, gdy
type == product-tags - Przykład:
["tag1","tag2"]
collection_ids
- Wymagane tylko wtedy, gdy
type == collections - Przykład:
[1,2,3]
apply_for_variants
- Określa, czy rabaty można konfigurować dla poszczególnych wariantów
- Akceptowane wartości:
truelubfalse - Wartość domyślna:
false
h. exclude_product
Dział zatytułowany „h. exclude_product”Określa produkty, które mają zostać wyłączone z reguły.
Struktura:
"exclude_product": { "type": "none", "product_ids": [], "collection_ids": [] },type
- Domyślnie:
none - Akceptowane wartości:
| Wartość | Opis |
|---|---|
none |
Nie wyłączaj żadnego produktu |
products |
Wyłącz wybrane produkty |
collections |
Wyłącz wybrane kolekcje |
Pozostałe pola są wymagane tylko w zależności od wybranego typu.
i. discount_for_variants
Dział zatytułowany „i. discount_for_variants”Określa konfigurację rabatów na poziomie produktu i/lub wariantu.
- Zostaw to pole puste, jeśli
apply_product.apply_for_variants == false. - Jeśli
apply_product.apply_for_variants == true, to pole jest wymagane. - Struktura musi być tablicą konfiguracji produktów.
Struktura:
"discount_for_variants": [ { "id": 8516448190631, "duplicated": false, "variant_pricing": true, "from_qty": "0", "from_amount": "0", "to_qty": "10", "to_amount": "0", "discount_groups": [ { "name": "all", "type": "percent", "value": "10" } ], "variants": [ { "id": 46747346763943, "duplicated": false, "from_qty": "0", "from_amount": "0", "to_qty": "10", "to_amount": "0", "discount_groups": [ { "name": "all", "type": "percent", "value": "10" } ] } ] } ],i.1. id (wymagane)
- ID produktu.
- Musi odpowiadać istniejącemu produktowi.
i.2. duplicated
Wskazuje, czy produkt ma wiele przedziałów ilości/kwoty.
Akceptowane wartości:
truefalse
Zasady:
- Jeśli
true: produkt ma wiele przedziałów ilości/kwoty. - Jeśli
false: produkt ma tylko jeden przedział ilości/kwoty.
i.3. from_qty / from_amount
Początkowa ilość lub kwota przedziału.
Zasady:
- Pierwszy element może być pusty (domyślnie 1).
- Wszystkie kolejne elementy są wymagane.
i.4. to_qty / to_amount
Końcowa ilość lub kwota przedziału.
Zasady:
- Może być puste (zostanie automatycznie obliczone jako wartość
fromnastępnego elementu minus 1). - Jeśli zostanie podane, musi być mniejsze niż wartość
fromnastępnego elementu.
Przykłady:
- Element 1: 0–10 → Element 2: 11–20
- Element 1: 0–blank → Element 2: 10–blank
- Element 1: blank–10 → Element 2: 11–blank
i.5. discount_groups (poziom produktu)
Określa konfigurację rabatów dla każdego przedziału ilości/kwoty na poziomie produktu.
- Wymagane, jeśli
variant_pricing == false. - Zostaw puste, jeśli
variant_pricing == true. - Musi być tablicą obiektów rabatów odpowiadających skonfigurowanemu
apply_customer.type.
Struktura:
{ "name": "all", "type": "percent", "value": "10"}+ name
Akceptowane wartości:
all(jeśliapply_customer.type == all)logged(jeśliapply_customer.type == logged)non-logged(jeśliapply_customer.type == non-logged)
Jeśli zostanie podana inna wartość, będzie traktowana jako tag klienta i musi odpowiadać jednemu z tagów zdefiniowanych w apply_customer.tags.
+ type
Określa typ rabatu.
Akceptowane wartości:
percent– rabat procentowyamount– stała kwota odejmowana od cenyfixed-amount– ostateczna stała cena
+ value
- Musi być liczbą
- Musi być większe niż 0
- Jeśli
type == percent, wartość musi być mniejsza niż 100
i.6. variant_pricing
Wskazuje, czy rabat jest stosowany na poziomie wariantu.
Akceptowane wartości:
truefalse
i.7. variants
Określa konfigurację rabatów na poziomie wariantu.
- Wymagane, jeśli
variant_pricing == true - Zostaw puste, jeśli
variant_pricing == false - Musi być tablicą konfiguracji wariantów
Struktura:
{ "id": 46747346763943, "duplicated": false, "from_qty": "0", "from_amount": "0", "to_qty": "10", "to_amount": "0", "discount_groups": [ { "name": "all", "type": "percent", "value": "10" } ]}+ id (wymagane)
- ID wariantu.
+ duplicate
Wskazuje, czy wariant ma wiele przedziałów ilości/kwoty.
Akceptowane wartości:
truefalse
Zasady:
- Jeśli
true: wariant ma wiele przedziałów. - Jeśli
false: wariant ma tylko jeden przedział.
+ from_qty / from_amount
Początkowa ilość lub kwota.
Zasady:
- Pierwszy element może być pusty (domyślnie 1).
- Wszystkie kolejne elementy są wymagane.
+ to_qty / to_amount
Końcowa ilość lub kwota.
Zasady:
- Może być puste (obliczane automatycznie jako
fromnastępnego elementu minus 1). - Jeśli zostanie podane, musi być mniejsze niż wartość
fromnastępnego elementu.
Przykłady:
- Element 1: 0–10 → Element 2: 11–20
- Element 1: 0–blank → Element 2: 10–blank
- Element 1: blank–10 → Element 2: 11–blank
+ discount_groups (poziom wariantu)
Określa konfigurację rabatów dla każdego przedziału ilości/kwoty na poziomie wariantu.
Zasady:
- Jeśli
apply_customer.typema wartość:allloggednon-logged
→ Tablica musi zawierać tylko jeden element.
- Jeśli
apply_customer.type == customer-tags
→ Tablica musi zawierać wiele elementów (po jednym na każdy tag klienta).
name
Akceptowane wartości:
allloggednon-logged
Jeśli zostanie podana inna wartość, będzie traktowana jako tag klienta i musi odpowiadać tagowi zdefiniowanemu w apply_customer.tags.
type
Akceptowane wartości:
percentamountfixed-amount
value
- Musi być liczbą
- Musi być większe niż 0
- Jeśli
type == percent, wartość musi być mniejsza niż 100
j. apply_market
Dział zatytułowany „j. apply_market”Określa, do których rynków Shopify odnosi się reguła.
Struktura:
"apply_market": { "type": "all", "handle": []}type
Akceptowane wartości:
allspecific-market
handle
- Wymagane tylko wtedy, gdy
type == specific-market - Lista uchwytów rynków rozdzielona przecinkami
- Przykład:
["japan","us"]
k. discount_methods
Dział zatytułowany „k. discount_methods”Akceptowane wartości:
variant→ ten sam wariantacross_group→ mieszane wariantywithin_each_group→ mieszane produkty
Odpowiadają one opcjom dostępnym w aplikacji.
Przykład:
"discount_method": "variant",l. discount_group
Dział zatytułowany „l. discount_group”Określa przedziały ilości/kwoty i wartości rabatów.
from_qty / from_amount
to_qty / to_amount
Obowiązują te same zasady walidacji, co opisane powyżej.
Akceptowane wartości “type”:
percentamountfixed-amount
value:
- Musi być > 0
- Jeśli percent → musi być < 100
Struktura:
"discount_groups": [ { "from_qty": "0", "from_amount": "0", "to_qty": "10", "to_amount": "0", "type": "percent", "value": "10" } ],Zasady są takie same, jak opisano powyżej dla typów i wartości rabatów.
m. active_date
Dział zatytułowany „m. active_date”Służy do konfigurowania czasu rozpoczęcia i zakończenia reguły cenowej.
Struktura:
"active_date": { "types": ["start_date", "end_date"], "start_at": "2026-01-15 10:00:00", "end_at": "2026-01-15 10:00:00"}types
- Opcjonalne
- Akceptowane wartości:
start_date,end_date - Może zawierać jedną lub obie, rozdzielone przecinkiem
- Przykład:
["start_date","end_date"]
start_at
- Wymagane, jeśli
typeszawierastart_date - Format:
YYYY-MM-DD HH:MM:SS
end_at
- Wymagane, jeśli
typeszawieraend_date - Format:
YYYY-MM-DD HH:MM:SS
4. Odpowiedź API
Dział zatytułowany „4. Odpowiedź API”a. Odpowiedzi z błędem
Dział zatytułowany „a. Odpowiedzi z błędem”401 – Brak autoryzacji
Możliwe przyczyny:
- Brak adresu URL sklepu
- Brak klucza API
- Nieprawidłowy adres URL sklepu
- Nieprawidłowy klucz API
- Klucz API nie pasuje do sklepu
403 – Ta akcja jest nieautoryzowana
- Klucz API nie ma uprawnienia Update
- Każdy klucz API może mieć uprawnienia: View, Create, Update, Delete
- Ten interfejs API wymaga uprawnienia Update
- Zwracany także wtedy, gdy podane ID nie istnieje
429 – Zbyt wiele żądań
Przekroczono limit żądań:
- Maksymalnie 1 żądanie na 5 minut
- Maksymalnie 50 żądań dziennie
b. Odpowiedź pozytywna
Dział zatytułowany „b. Odpowiedź pozytywna”200 – Sukces API
- Rekord Volume Pricing został zaktualizowany pomyślnie
- Odpowiedź zwracana w formacie JSON
Przykładowy JSON odpowiedzi:
{ "id": 1, "title": "New Volume Pricing", "status": true, "type": "quantity", "apply_customer": { "type": "all", "tags": [] }, "exclude_customer": { "type": "none", "tags": [] }, "apply_product": { "type": "all", "product_ids": [], "product_tags": [], "collection_ids": [], "apply_for_variants": false }, "exclude_product": { "type": "none", "product_ids": [], "collection_ids": [] }, "discount_for_variants": [ { "id": 8516448190631, "duplicated": false, "variant_pricing": true, "from_qty": "0", "from_amount": "0", "to_qty": "10", "to_amount": "0", "discount_groups": [ { "name": "all", "type": "percent", "value": "10" } ], "variants": [ { "id": 46747346763943, "duplicated": false, "from_qty": "0", "from_amount": "0", "to_qty": "10", "to_amount": "0", "discount_groups": [ { "name": "all", "type": "percent", "value": "10" } ] } ] } ], "apply_market": { "type": "all", "handle": [] }, "discount_method": "variant", "discount_groups": [ { "from_qty": "0", "from_amount": "0", "to_qty": "10", "to_amount": "0", "type": "percent", "value": "10" } ], "active_date": { "types": [], "start_at": "", "end_at": "" }, "created_at": "2026-01-15T10:00:00", "updated_at": "2026-01-15T10:00:00"}