Tworzenie Volume Pricing za pomocą API
Utwórz nową regułę Volume Pricing za pomocą publicznego interfejsu API, wraz z pełnym opisem treści żądania.
W tym dokumencie wyjaśniono, jak utworzyć nową regułę Volume Pricing za pomocą publicznego interfejsu API.
1. Punkt końcowy
Dział zatytułowany „1. Punkt końcowy”Aby utworzyć nowy rekord Volume Pricing, użyj następującego punktu końcowego:
POST - https://wholesale.samita.io/api/v1/volume-pricingsTen punkt końcowy pozwala utworzyć nową konfigurację Volume Pricing.
2. 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”a. Format ogólny
Dział zatytułowany „a. Format ogólny”Dane użyte do utworzenia Volume Pricing muszą być wysyłane w formacie JSON.
Przykładowa struktura JSON znajduje się na końcu tego dokumentu.
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 (wymagane)
Dział zatytułowany „b. title (wymagane)”- Nazwa służąca do identyfikacji rekordu Volume Pricing
- Musi być ciągiem znaków
- Maksymalna długość: 255 znaków
c. status (wymagane)
Dział zatytułowany „c. status (wymagane)”- 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 (wymagane)
Dział zatytułowany „d. type (wymagane)”Określa, czy ceny zależne od ilości są obliczane na podstawie ilości, czy kwoty.
Akceptowane wartości:
quantityamount
e. apply_customer (wymagane)
Dział zatytułowany „e. apply_customer (wymagane)”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 (wymagane)
Dział zatytułowany „g. apply_product (wymagane)”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,
"from_qty": "0",
"from_amount": "0",
"to_qty": "10",
"to_amount": "0",
"discount_groups": [
{
"name": "all",
"type": "percent",
"value": "10"
}
],
"variant_pricing": true,
"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: from:0 – to:10 → Element 2: from:11 – to:20
- Element 1: from:0 – to:blank → Element 2: from:10 – to:blank
- Element 1: from:blank – to:10 → Element 2: from:11 – to: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: from:0 – to:10 → Element 2: from:11 – to:20
- Element 1: from:0 – to:blank → Element 2: from:10 – to:blank
- Element 1: from:blank – to:10 → Element 2: from:11 – to: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 (wymagane)
Dział zatytułowany „j. apply_market (wymagane)”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"]
Aby uzyskać uchwyt rynku (Market handle), wykonaj następujące kroki:
- W panelu administracyjnym Shopify przejdź do sekcji Rynki > kliknij Więcej akcji > wybierz Edytuj uchwyty rynków > skopiuj wyświetlony tam uchwyt:


k. discount_methods (wymagane)
Dział zatytułowany „k. discount_methods (wymagane)”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 (wymagane)
Dział zatytułowany „l. discount_group (wymagane)”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 Create
- Każdy klucz API może mieć uprawnienia: View, Create, Update, Delete
- Ten interfejs API wymaga uprawnienia Create
- Zwracany także wtedy, gdy podane ID nie istnieje
429 – Zbyt wiele żądań
- Przekroczono limit żądań
- Maksymalnie dozwolone:
| Limit | Wartość |
|---|---|
| Częstotliwość żądań | 1 żądanie na 5 minut |
| Limit dzienny | 50 żądań dziennie |
b. Odpowiedź pozytywna
Dział zatytułowany „b. Odpowiedź pozytywna”200 – Sukces API
- Rekord Volume Pricing został utworzony pomyślnie
- Odpowiedź zwracana w formacie JSON
{ "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"}