Volume Pricing über APIs erstellen
Erstellen Sie über die Public API eine neue Volume-Pricing-Regel, einschließlich der vollständigen Referenz zum Request-Body.
Dieses Dokument erklärt, wie Sie mit der Public API eine neue Volume Pricing-Regel erstellen.
1. Endpunkt
Abschnitt betitelt „1. Endpunkt“Um einen neuen Volume Pricing-Datensatz zu erstellen, verwenden Sie den folgenden Endpunkt:
POST - https://wholesale.samita.io/api/v1/volume-pricingsMit diesem Endpunkt erstellen Sie eine neue Volume Pricing-Konfiguration.
2. Request-Header
Abschnitt betitelt „2. Request-Header“Alle API-Anfragen müssen die folgenden Pflicht-Header enthalten:
| Header | Beschreibung | Erforderlich |
|---|---|---|
X-SAMITA-API-KEY |
In der Wholesale-App bereitgestellter API-Schlüssel | Ja |
X-SAMITA-SHOP-URL |
Shopify-Shop-Domain im Format xxx.myshopify.com | Ja |
CONTENT-TYPE |
Muss application/json sein |
Ja |
Fehlt ein Pflicht-Header, wird die Anfrage abgelehnt.
3. Request-Body
Abschnitt betitelt „3. Request-Body“a. Allgemeines Format
Abschnitt betitelt „a. Allgemeines Format“Die Daten zum Erstellen von Volume Pricing müssen im JSON-Format gesendet werden.
Eine Beispielstruktur im JSON-Format finden Sie am Ende dieses Dokuments.
Beispiel-Request-JSON:
{ "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 (erforderlich)
Abschnitt betitelt „b. title (erforderlich)“- Der Name zur Identifizierung des Volume Pricing-Datensatzes
- Muss ein String sein
- Maximale Länge: 255 Zeichen
c. status (erforderlich)
Abschnitt betitelt „c. status (erforderlich)“- Legt fest, ob der Datensatz aktiv ist oder nicht
- Akzeptiert nur die folgenden Werte:
| Wert | Beschreibung |
|---|---|
true |
Preisregel ist aktiv |
false |
Preisregel ist inaktiv |
d. type (erforderlich)
Abschnitt betitelt „d. type (erforderlich)“Legt fest, ob Volume Pricing nach Menge oder nach Betrag berechnet wird.
Akzeptierte Werte:
quantityamount
e. apply_customer (erforderlich)
Abschnitt betitelt „e. apply_customer (erforderlich)“Legt fest, welche Kundschaft für diese Preisregel infrage kommt.
Struktur:
"apply_customer": { "type": "all", "tags": []}type
Akzeptierte Werte (nur einer davon):
all– für die gesamte Kundschaftlogged– nur für angemeldete Kundschaftnon-logged– nur für Gästecustomer-tags– nur für Kundschaft mit bestimmten Tags
tags
- Nur erforderlich, wenn
type == customer-tags - Muss ein Array mit kommagetrennten Werten sein
- Beispiel:
["wholesale","b2b"]
Wenn type nicht customer-tags ist, kann dieses Feld ignoriert werden.
f. exclude_customer
Abschnitt betitelt „f. exclude_customer“Schließt bestimmte Kundschaft von der Preisregel aus.
Struktur:
"exclude_customer": { "type": "none", "tags": []}type
- Standardwert:
none - Akzeptierte Werte:
| Wert | Beschreibung |
|---|---|
none |
Keine Kundschaft ausschließen |
customer-tags |
Kundschaft nach Tags ausschließen |
tags
- Nur erforderlich, wenn
type == customer-tags - Array mit kommagetrennten Werten
- Beispiel:
["vip","internal"]
g. apply_product (erforderlich)
Abschnitt betitelt „g. apply_product (erforderlich)“Legt fest, auf welche Produkte die Preisregel angewendet wird.
Struktur:
"apply_product": { "type": "all", "product_ids": [], "product_tags": [], "collection_ids": [], "apply_for_variants": false}type
Akzeptierte Werte:
allproductscollectionsproduct-tags
product_ids
- Nur erforderlich, wenn
type == products - Kommagetrennte Liste von Produkt-IDs
- Beispiel:
[1,2,3]
product_tags
- Nur erforderlich, wenn
type == product-tags - Beispiel:
["tag1","tag2"]
collection_ids
- Nur erforderlich, wenn
type == collections - Beispiel:
[1,2,3]
apply_for_variants
- Legt fest, ob Rabatte pro Variante konfiguriert werden können
- Akzeptierte Werte:
trueoderfalse - Standardwert:
false
h. exclude_product
Abschnitt betitelt „h. exclude_product“Legt Produkte fest, die von der Regel ausgeschlossen werden.
Struktur:
"exclude_product": { "type": "none", "product_ids": [], "collection_ids": []}type
- Standard:
none - Akzeptierte Werte:
| Wert | Beschreibung |
|---|---|
none |
Keine Produkte ausschließen |
products |
Bestimmte Produkte ausschließen |
collections |
Bestimmte Kollektionen ausschließen |
Weitere Felder sind je nach gewähltem type erforderlich.
i. discount_for_variants
Abschnitt betitelt „i. discount_for_variants“Legt die Rabattkonfiguration auf Produkt- und/oder Variantenebene fest.
- Lassen Sie dieses Feld leer, wenn
apply_product.apply_for_variants == false. - Wenn
apply_product.apply_for_variants == true, ist dieses Feld erforderlich. - Die Struktur muss ein Array von Produktkonfigurationen sein.
Struktur:
"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 (erforderlich)
- Produkt-ID.
- Muss einem vorhandenen Produkt entsprechen.
i.2. duplicated
Gibt an, ob das Produkt mehrere Mengen-/Betragsbereiche hat.
Akzeptierte Werte:
truefalse
Regeln:
- Bei
true: Das Produkt enthält mehrere Mengen-/Betragsbereiche. - Bei
false: Das Produkt hat nur einen Mengen-/Betragsbereich.
i.3. from_qty / from_amount
Start-Menge oder Start-Betrag des Bereichs.
Regeln:
- Der erste Eintrag darf leer sein (Standardwert ist 1).
- Alle folgenden Einträge sind erforderlich.
i.4. to_qty / to_amount
End-Menge oder End-Betrag des Bereichs.
Regeln:
- Darf leer sein (wird automatisch als
from-Wert des nächsten Eintrags minus 1 berechnet). - Wenn angegeben, muss er kleiner sein als der
from-Wert des nächsten Eintrags.
Beispiele:
- Eintrag 1: from:0 – to:10 → Eintrag 2: from:11 – to:20
- Eintrag 1: from:0 – to:leer → Eintrag 2: from:10 – to:leer
- Eintrag 1: from:leer – to:10 → Eintrag 2: from:11 – to:leer
i.5. discount_groups (Produktebene)
Legt die Rabattkonfiguration für jeden Mengen-/Betragsbereich auf Produktebene fest.
- Erforderlich, wenn
variant_pricing == false. - Leer lassen, wenn
variant_pricing == true. - Muss ein Array von Rabattobjekten sein, passend zum konfigurierten
apply_customer.type.
Struktur:
{ "name": "all", "type": "percent", "value": "10"}+ name
Akzeptierte Werte:
all(wennapply_customer.type == all)logged(wennapply_customer.type == logged)non-logged(wennapply_customer.type == non-logged)
Wird ein anderer Wert angegeben, wird er als Kunden-Tag behandelt und muss einem der in apply_customer.tags definierten Tags entsprechen.
+ type
Legt die Rabattart fest.
Akzeptierte Werte:
percent– prozentualer Rabattamount– fester Betrag, der vom Preis abgezogen wirdfixed-amount– fester Endpreis
+ value
- Muss eine Zahl sein
- Muss größer als 0 sein
- Bei
type == percentmuss der Wert kleiner als 100 sein
i.6. variant_pricing
Gibt an, ob der Rabatt auf Variantenebene angewendet wird.
Akzeptierte Werte:
truefalse
i.7. variants
Legt die Rabattkonfiguration auf Variantenebene fest.
- Erforderlich, wenn
variant_pricing == true - Leer lassen, wenn
variant_pricing == false - Muss ein Array von Variantenkonfigurationen sein
Struktur:
{ "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 (erforderlich)
- Varianten-ID.
+ duplicate
Gibt an, ob die Variante mehrere Mengen-/Betragsbereiche hat.
Akzeptierte Werte:
truefalse
Regeln:
- Bei
true: Die Variante enthält mehrere Bereiche. - Bei
false: Die Variante hat nur einen Bereich.
+ from_qty / from_amount
Start-Menge oder Start-Betrag.
Regeln:
- Der erste Eintrag darf leer sein (Standardwert ist 1).
- Alle folgenden Einträge sind erforderlich.
+ to_qty / to_amount
End-Menge oder End-Betrag.
Regeln:
- Darf leer sein (wird automatisch als
fromdes nächsten Eintrags minus 1 berechnet). - Wenn angegeben, muss er kleiner sein als der
from-Wert des nächsten Eintrags.
Beispiele:
- Eintrag 1: from:0 – to:10 → Eintrag 2: from:11 – to:20
- Eintrag 1: from:0 – to:leer → Eintrag 2: from:10 – to:leer
- Eintrag 1: from:leer – to:10 → Eintrag 2: from:11 – to:leer
+ discount_groups (Variantenebene)
Legt die Rabattkonfiguration pro Mengen-/Betragsbereich auf Variantenebene fest.
Regeln:
- Wenn
apply_customer.typeFolgendes ist:allloggednon-logged
→ Das Array darf nur einen Eintrag enthalten.
- Wenn
apply_customer.type == customer-tags
→ Das Array muss mehrere Einträge enthalten (einen pro Kunden-Tag).
name
Akzeptierte Werte:
allloggednon-logged
Wird ein anderer Wert angegeben, wird er als Kunden-Tag behandelt und muss einem in apply_customer.tags definierten Tag entsprechen.
type
Akzeptierte Werte:
percentamountfixed-amount
value
- Muss eine Zahl sein
- Muss größer als 0 sein
- Bei
type == percentmuss der Wert kleiner als 100 sein
j. apply_market (erforderlich)
Abschnitt betitelt „j. apply_market (erforderlich)“Legt fest, für welche Shopify-Märkte die Regel gilt.
Struktur:
"apply_market": { "type": "all", "handle": []}type
Akzeptierte Werte:
allspecific-market
handle
- Nur erforderlich, wenn
type == specific-market - Kommagetrennte Liste von Markt-Handles
- Beispiel:
["japan","us"]
So finden Sie das Markt-Handle:
- Gehen Sie in Shopify Admin zu Märkte, klicken Sie auf Weitere Aktionen, wählen Sie Markt-Handles bearbeiten und kopieren Sie das dort angezeigte Handle:


k. discount_methods (erforderlich)
Abschnitt betitelt „k. discount_methods (erforderlich)“Akzeptierte Werte:
variant→ Same Variantacross_group→ Mix Variantswithin_each_group→ Mix Products
Diese entsprechen den Optionen, die in der App verfügbar sind.
Beispiel:
"discount_method": "variant",l. discount_group (erforderlich)
Abschnitt betitelt „l. discount_group (erforderlich)“Legt Mengen-/Betragsbereiche und Rabattwerte fest.
from_qty / from_amount
to_qty / to_amount
Es gelten dieselben Validierungsregeln wie oben beschrieben.
Akzeptierte „type“-Werte:
percentamountfixed-amount
value:
- Muss > 0 sein
- Bei percent → muss < 100 sein
Struktur:
"discount_groups": [ { "from_qty": "0", "from_amount": "0", "to_qty": "10", "to_amount": "0", "type": "percent", "value": "10" } ],Für Rabattarten und Rabattwerte gelten dieselben Regeln wie oben beschrieben.
m. active_date
Abschnitt betitelt „m. active_date“Legt Start- und Endzeitpunkt der Preisregel fest.
Struktur:
"active_date": { "types": ["start_date", "end_date"], "start_at": "2026-01-15 10:00:00", "end_at": "2026-01-15 10:00:00"}types
- Optional
- Akzeptierte Werte:
start_date,end_date - Kann einen oder beide Werte enthalten, durch Komma getrennt
- Beispiel:
["start_date","end_date"]
start_at
- Erforderlich, wenn
typesden Wertstart_dateenthält - Format:
YYYY-MM-DD HH:MM:SS
end_at
- Erforderlich, wenn
typesden Wertend_dateenthält - Format:
YYYY-MM-DD HH:MM:SS
4. API-Antwort
Abschnitt betitelt „4. API-Antwort“a. Fehlerantworten
Abschnitt betitelt „a. Fehlerantworten“401 – Unauthorized
Mögliche Gründe:
- Shop-URL fehlt
- API-Schlüssel fehlt
- Ungültige Shop-URL
- Ungültiger API-Schlüssel
- API-Schlüssel passt nicht zum Shop
403 – This action is unauthorized
- API-Schlüssel hat keine Berechtigung Create
- Jeder API-Schlüssel kann die Berechtigungen View, Create, Update und Delete haben
- Diese API erfordert die Berechtigung Create
- Wird auch zurückgegeben, wenn eine angegebene ID nicht existiert
429 – Too Many Requests
- Ratenlimit überschritten
- Maximal zulässig:
| Limit | Wert |
|---|---|
| Anfragehäufigkeit | 1 Anfrage pro 5 Minuten |
| Tageslimit | 50 Anfragen pro Tag |
b. Erfolgsantwort
Abschnitt betitelt „b. Erfolgsantwort“200 – API Success
- Volume Pricing-Datensatz erfolgreich erstellt
- Antwort wird im JSON-Format zurückgegeben
{ "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"}