API’leri kullanarak Volume Pricing oluşturma
Public API aracılığıyla yeni bir Volume Pricing kuralı oluşturun; istek gövdesinin tam başvurusu dahil.
Bu belge, Public API’yi kullanarak yeni bir Volume Pricing kuralının nasıl oluşturulacağını açıklar.
1. Uç nokta
Bölüm başlığı “1. Uç nokta”Yeni bir Volume Pricing kaydı oluşturmak için aşağıdaki uç noktayı kullanın:
POST - https://wholesale.samita.io/api/v1/volume-pricingsBu uç nokta, yeni bir Volume Pricing yapılandırması oluşturmanızı sağlar.
2. İstek üstbilgileri
Bölüm başlığı “2. İstek üstbilgileri”Tüm API isteklerinde aşağıdaki zorunlu üstbilgiler bulunmalıdır:
| Üstbilgi | Açıklama | Zorunlu |
|---|---|---|
X-SAMITA-API-KEY |
Wholesale uygulamasında sağlanan API anahtarı | Evet |
X-SAMITA-SHOP-URL |
xxx.myshopify.com biçiminde Shopify mağaza alan adı | Evet |
CONTENT-TYPE |
application/json olmalıdır |
Evet |
Zorunlu üstbilgilerden biri eksikse istek reddedilir.
3. İstek gövdesi
Bölüm başlığı “3. İstek gövdesi”a. Genel biçim
Bölüm başlığı “a. Genel biçim”Volume Pricing oluşturmak için kullanılan veriler JSON biçiminde gönderilmelidir.
Örnek bir JSON yapısı bu belgenin sonunda verilmiştir.
Örnek istek JSON’u:
{ "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 (zorunlu)
Bölüm başlığı “b. title (zorunlu)”- Volume Pricing kaydını tanımlamak için kullanılan ad
- Bir dize olmalıdır
- Maksimum uzunluk: 255 karakter
c. status (zorunlu)
Bölüm başlığı “c. status (zorunlu)”- Kaydın etkin olup olmadığını tanımlar
- Yalnızca aşağıdaki değerleri kabul eder:
| Değer | Açıklama |
|---|---|
true |
Fiyatlandırma kuralı etkin |
false |
Fiyatlandırma kuralı etkin değil |
d. type (zorunlu)
Bölüm başlığı “d. type (zorunlu)”Adet bazlı fiyatlandırmanın miktara mı yoksa tutara mı göre hesaplanacağını tanımlar.
Kabul edilen değerler:
quantityamount
e. apply_customer (zorunlu)
Bölüm başlığı “e. apply_customer (zorunlu)”Hangi müşterilerin bu fiyatlandırma kuralından yararlanabileceğini tanımlar.
Yapı:
"apply_customer": { "type": "all", "tags": []}type
Kabul edilen değerler (aşağıdakilerden yalnızca biri):
all– Tüm müşterilere uygulalogged– Yalnızca giriş yapmış müşterilere uygulanon-logged– Yalnızca misafir müşterilere uygulacustomer-tags– Yalnızca belirli etiketlere sahip müşterilere uygula
tags
- Yalnızca
type == customer-tagsolduğunda zorunludur - Virgülle ayrılmış bir dizi olmalıdır
- Örnek:
["wholesale","b2b"]
type değeri customer-tags değilse bu alan yok sayılabilir.
f. exclude_customer
Bölüm başlığı “f. exclude_customer”Belirli müşterileri fiyatlandırma kuralından hariç tutmak için kullanılır.
Yapı:
"exclude_customer": { "type": "none", "tags": []}type
- Varsayılan değer:
none - Kabul edilen değerler:
| Değer | Açıklama |
|---|---|
none |
Hiçbir müşteriyi hariç tutma |
customer-tags |
Müşterileri etiketlere göre hariç tut |
tags
- Yalnızca
type == customer-tagsolduğunda zorunludur - Virgülle ayrılmış dizi
- Örnek:
["vip","internal"]
g. apply_product (zorunlu)
Bölüm başlığı “g. apply_product (zorunlu)”Fiyatlandırma kuralının hangi ürünlere uygulanacağını tanımlar.
Yapı:
"apply_product": { "type": "all", "product_ids": [], "product_tags": [], "collection_ids": [], "apply_for_variants": false}type
Kabul edilen değerler:
allproductscollectionsproduct-tags
product_ids
- Yalnızca
type == productsolduğunda zorunludur - Virgülle ayrılmış ürün kimlikleri listesi
- Örnek:
[1,2,3]
product_tags
- Yalnızca
type == product-tagsolduğunda zorunludur - Örnek:
["tag1","tag2"]
collection_ids
- Yalnızca
type == collectionsolduğunda zorunludur - Örnek:
[1,2,3]
apply_for_variants
- İndirimlerin varyant bazında yapılandırılıp yapılandırılamayacağını belirler
- Kabul edilen değerler:
trueveyafalse - Varsayılan değer:
false
h. exclude_product
Bölüm başlığı “h. exclude_product”Kuraldan hariç tutulacak ürünleri tanımlar.
Yapı:
"exclude_product": { "type": "none", "product_ids": [], "collection_ids": []}type
- Varsayılan:
none - Kabul edilen değerler:
| Değer | Açıklama |
|---|---|
none |
Hiçbir ürünü hariç tutma |
products |
Belirli ürünleri hariç tut |
collections |
Belirli koleksiyonları hariç tut |
Diğer alanlar yalnızca seçilen türe bağlı olarak zorunludur.
i. discount_for_variants
Bölüm başlığı “i. discount_for_variants”İndirim yapılandırmasını ürün ve/veya varyant düzeyinde tanımlar.
apply_product.apply_for_variants == falseise bu alanı boş bırakın.apply_product.apply_for_variants == trueise bu alan zorunludur.- Yapı, ürün yapılandırmalarından oluşan bir dizi olmalıdır.
Yapı:
"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 (zorunlu)
- Ürün kimliği.
- Mevcut bir ürünle eşleşmelidir.
i.2. duplicated
Ürünün birden fazla adet/tutar aralığı olup olmadığını belirtir.
Kabul edilen değerler:
truefalse
Kurallar:
trueise: ürün birden fazla adet/tutar aralığı içerir.falseise: ürünün yalnızca bir adet/tutar aralığı vardır.
i.3. from_qty / from_amount
Aralığın başlangıç adedi veya tutarı.
Kurallar:
- İlk öğe boş olabilir (varsayılan değer 1’dir).
- Sonraki tüm öğeler zorunludur.
i.4. to_qty / to_amount
Aralığın bitiş adedi veya tutarı.
Kurallar:
- Boş olabilir (otomatik olarak bir sonraki öğenin
fromdeğerinin 1 eksiği olarak hesaplanır). - Belirtilirse bir sonraki öğenin
fromdeğerinden küçük olmalıdır.
Örnekler:
- Öğe 1: from:0 – to:10 → Öğe 2: from:11 – to:20
- Öğe 1: from:0 – to:boş → Öğe 2: from:10 – to:boş
- Öğe 1: from:boş – to:10 → Öğe 2: from:11 – to:boş
i.5. discount_groups (ürün düzeyi)
Her adet/tutar aralığı için indirim yapılandırmasını ürün düzeyinde tanımlar.
variant_pricing == falseise zorunludur.variant_pricing == trueise boş bırakın.- Yapılandırılan
apply_customer.typedeğerine karşılık gelen indirim nesnelerinden oluşan bir dizi olmalıdır.
Yapı:
{ "name": "all", "type": "percent", "value": "10"}+ name
Kabul edilen değerler:
all(apply_customer.type == allise)logged(apply_customer.type == loggedise)non-logged(apply_customer.type == non-loggedise)
Başka bir değer belirtilirse müşteri etiketi olarak değerlendirilir ve apply_customer.tags içinde tanımlanan etiketlerden biriyle eşleşmelidir.
+ type
İndirim türünü tanımlar.
Kabul edilen değerler:
percent– Yüzde indirimiamount– Fiyattan düşülen sabit tutarfixed-amount– Nihai sabit fiyat
+ value
- Bir sayı olmalıdır
- 0’dan büyük olmalıdır
type == percentise değer 100’den küçük olmalıdır
i.6. variant_pricing
İndirimin varyant düzeyinde uygulanıp uygulanmadığını belirtir.
Kabul edilen değerler:
truefalse
i.7. variants
Varyant düzeyinde indirim yapılandırmasını tanımlar.
variant_pricing == trueise zorunludurvariant_pricing == falseise boş bırakın- Varyant yapılandırmalarından oluşan bir dizi olmalıdır
Yapı:
{ "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 (zorunlu)
- Varyant kimliği.
+ duplicate
Varyantın birden fazla adet/tutar aralığı olup olmadığını belirtir.
Kabul edilen değerler:
truefalse
Kurallar:
trueise: varyant birden fazla aralık içerir.falseise: varyantın yalnızca bir aralığı vardır.
+ from_qty / from_amount
Başlangıç adedi veya tutarı.
Kurallar:
- İlk öğe boş olabilir (varsayılan değer 1’dir).
- Sonraki tüm öğeler zorunludur.
+ to_qty / to_amount
Bitiş adedi veya tutarı.
Kurallar:
- Boş olabilir (otomatik olarak bir sonraki öğenin
fromdeğerinin 1 eksiği olarak hesaplanır). - Belirtilirse bir sonraki öğenin
fromdeğerinden küçük olmalıdır.
Örnekler:
- Öğe 1: from:0 – to:10 → Öğe 2: from:11 – to:20
- Öğe 1: from:0 – to:boş → Öğe 2: from:10 – to:boş
- Öğe 1: from:boş – to:10 → Öğe 2: from:11 – to:boş
+ discount_groups (varyant düzeyi)
Her adet/tutar aralığı için indirim yapılandırmasını varyant düzeyinde tanımlar.
Kurallar:
apply_customer.typeşunlardan biriyse:allloggednon-logged
→ Dizi yalnızca bir öğe içermelidir.
- If
apply_customer.type == customer-tags
→ Dizi birden fazla öğe içermelidir (her müşteri etiketi için bir tane).
name
Kabul edilen değerler:
allloggednon-logged
Başka bir değer belirtilirse müşteri etiketi olarak değerlendirilir ve apply_customer.tags içinde tanımlanan bir etiketle eşleşmelidir.
type
Kabul edilen değerler:
percentamountfixed-amount
value
- Bir sayı olmalıdır
- 0’dan büyük olmalıdır
type == percentise değer 100’den küçük olmalıdır
j. apply_market (zorunlu)
Bölüm başlığı “j. apply_market (zorunlu)”Kuralın hangi Shopify pazarlarına uygulanacağını tanımlar.
Yapı:
"apply_market": { "type": "all", "handle": []}type
Kabul edilen değerler:
allspecific-market
handle
- Yalnızca
type == specific-marketolduğunda zorunludur - Virgülle ayrılmış pazar handle listesi
- Örnek:
["japan","us"]
Pazar handle değerini almak için lütfen şu adımları izleyin:
- Shopify yönetici panelinde Markets bölümüne gidin > More actions seçeneğine tıklayın > Edit Market handles seçeneğini belirleyin > orada görünen handle değerini kopyalayın:


k. discount_methods (zorunlu)
Bölüm başlığı “k. discount_methods (zorunlu)”Kabul edilen değerler:
variant→ Same Variantacross_group→ Mix Variantswithin_each_group→ Mix Products
Bunlar uygulamada bulunan seçeneklere karşılık gelir.
Örnek:
"discount_method": "variant",l. discount_group (zorunlu)
Bölüm başlığı “l. discount_group (zorunlu)”Adet/tutar aralıklarını ve indirim değerlerini tanımlar.
from_qty / from_amount
to_qty / to_amount
Yukarıda açıklananlarla aynı doğrulama kuralları.
Kabul edilen “type” değerleri:
percentamountfixed-amount
value:
- 0’dan büyük olmalıdır
- percent ise → 100’den küçük olmalıdır
Yapı:
"discount_groups": [ { "from_qty": "0", "from_amount": "0", "to_qty": "10", "to_amount": "0", "type": "percent", "value": "10" } ],İndirim türleri ve değerleri için kurallar yukarıda açıklananlarla aynıdır.
m. active_date
Bölüm başlığı “m. active_date”Fiyatlandırma kuralının başlangıç ve bitiş zamanını yapılandırmak için kullanılır.
Yapı:
"active_date": { "types": ["start_date", "end_date"], "start_at": "2026-01-15 10:00:00", "end_at": "2026-01-15 10:00:00"}types
- İsteğe bağlı
- Kabul edilen değerler:
start_date,end_date - Biri veya her ikisi virgülle ayrılarak eklenebilir
- Örnek:
["start_date","end_date"]
start_at
typesiçindestart_datevarsa zorunludur- Biçim:
YYYY-MM-DD HH:MM:SS
end_at
typesiçindeend_datevarsa zorunludur- Biçim:
YYYY-MM-DD HH:MM:SS
4. API yanıtı
Bölüm başlığı “4. API yanıtı”a. Hata yanıtları
Bölüm başlığı “a. Hata yanıtları”401 – Unauthorized
Olası nedenler:
- Mağaza URL’si eksik
- API anahtarı eksik
- Mağaza URL’si geçersiz
- API anahtarı geçersiz
- API anahtarı mağazayla eşleşmiyor
403 – This action is unauthorized
- API anahtarında Create izni yok
- Her API anahtarı şu izinlere sahip olabilir: View, Create, Update, Delete
- Bu API, Create izni gerektirir
- Belirtilen bir kimlik mevcut değilse de döndürülür
429 – Too Many Requests
- Hız sınırı aşıldı
- İzin verilen maksimum:
| Sınır | Değer |
|---|---|
| İstek sıklığı | 5 dakikada 1 istek |
| Günlük sınır | Günde 50 istek |
b. Başarılı yanıt
Bölüm başlığı “b. Başarılı yanıt”200 – API Success
- Volume Pricing kaydı başarıyla oluşturuldu
- Yanıt JSON biçiminde döndürülür
{ "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"}