Katalog-API2026-11Vorschau
Sync-Regeln
Was mit deinem Angebot passiert, wenn ein Verkäufer in China einen Preis ändert oder ausverkauft ist.
- Wir lesen ein Angebot erneut, wenn eine Bestellung dafür reinkommt, und nach regelmäßigem Zeitplan; last_checked_at jedes Produkts sagt, wann zuletzt. Produkte synchron zu halten ist kostenlos.
- Jede Änderung, auf die wir reagieren, ist auch ein Event: product.cost_changed und product.out_of_stock.
Das Sync-Rule-Objekt
idstring- Beginnt mit rule_; die Standardregel ist rule_default.
applies_tostring- all für die Standardregel oder eine Produkt-ID für eine Ausnahme.
on_cost_increase.actionstring- neu bepreisen, um deine Marge zu halten, das Produkt pausieren oder nur benachrichtigen.
on_cost_increase.keep_margin_percentstring- Mit reprice: die zu haltende Marge, bezogen auf den Verkaufspreis.
on_cost_increase.max_increase_percentstring|null- Mit reprice: der größte Anstieg, um den ein Preis auf einmal steigen darf. Darüber gilt above_max: pausieren oder benachrichtigen.
on_cost_decreasestring- keep_price oder auf dieselbe Marge nach unten neu bepreisen.
on_out_of_stockstring- Immer zero_stock: Eine ausverkaufte SKU zeigt auf deinen Kanälen 0.
on_back_in_stockstring- restock oder stay_paused, bis du es fortsetzt.
round_tostring|null- Eine Preisendung für neu berechnete Preise, etwa .99 oder .00.
{
"id": "rule_default",
"applies_to": "all",
"on_cost_increase": {
"action": "reprice",
"keep_margin_percent": "30",
"max_increase_percent": "15",
"above_max": "pause"
},
"on_cost_decrease": "keep_price",
"on_out_of_stock": "zero_stock",
"on_back_in_stock": "restock",
"round_to": ".99",
"updated_at": "2026-11-02T08:00:00Z"
}Sync-Regeln auflisten
GET/v1/sync_rules
Zuerst die Standardregel, dann jede Ausnahme pro Produkt.
Scopeproducts:read
curl "https://www.ninjabuy.com/api/v1/sync_rules" \
-H "Authorization: Bearer $NINJABUY_API_KEY" \
-H "NinjaBuy-Version: 2026-11"HTTP/2 200 OK
{
"data": [
{
"id": "rule_default",
"applies_to": "all",
"on_cost_increase": {
"action": "reprice",
"keep_margin_percent": "30",
"max_increase_percent": "15",
"above_max": "pause"
},
"on_cost_decrease": "keep_price",
"on_out_of_stock": "zero_stock",
"on_back_in_stock": "restock",
"round_to": ".99",
"updated_at": "2026-11-02T08:00:00Z"
},
{
"id": "rule_9p3e",
"applies_to": "prd_1x0a",
"on_cost_increase": { "action": "pause" },
"on_cost_decrease": "keep_price",
"on_out_of_stock": "zero_stock",
"on_back_in_stock": "stay_paused",
"round_to": null,
"updated_at": "2026-11-03T10:14:00Z"
}
],
"has_more": false,
"cursor": null
}Eine Sync-Regel abrufen
GET/v1/sync_rules/{id}
Eine Regel.
Scopeproducts:read
Pfadparameter
idstringerforderlich- Die ID der Regel.
Fehler
| Status | Typ | Wann |
|---|---|---|
| 404 | not-found | Keine solche Regel in diesem Konto. |
curl "https://www.ninjabuy.com/api/v1/sync_rules/rule_default" \
-H "Authorization: Bearer $NINJABUY_API_KEY" \
-H "NinjaBuy-Version: 2026-11"HTTP/2 200 OK
{
"id": "rule_default",
"applies_to": "all",
"on_cost_increase": {
"action": "reprice",
"keep_margin_percent": "30",
"max_increase_percent": "15",
"above_max": "pause"
},
"on_cost_decrease": "keep_price",
"on_out_of_stock": "zero_stock",
"on_back_in_stock": "restock",
"round_to": ".99",
"updated_at": "2026-11-02T08:00:00Z"
}Ausnahme für ein Produkt
POST/v1/sync_rules
Ein Produkt mit eigener Regel folgt dieser statt der Standardregel. Felder, die du weglässt, übernehmen den Standard.
Scopeproducts:write
Body
applies_tostringerforderlich- all für die Standardregel oder eine Produkt-ID für eine Ausnahme.
on_cost_increase.actionstring- neu bepreisen, um deine Marge zu halten, das Produkt pausieren oder nur benachrichtigen.
on_cost_increase.keep_margin_percentstring- Mit reprice: die zu haltende Marge, bezogen auf den Verkaufspreis.
on_cost_increase.max_increase_percentstring|null- Mit reprice: der größte Anstieg, um den ein Preis auf einmal steigen darf. Darüber gilt above_max: pausieren oder benachrichtigen.
on_cost_decreasestring- keep_price oder auf dieselbe Marge nach unten neu bepreisen.
on_out_of_stockstring- Immer zero_stock: Eine ausverkaufte SKU zeigt auf deinen Kanälen 0.
on_back_in_stockstring- restock oder stay_paused, bis du es fortsetzt.
round_tostring|null- Eine Preisendung für neu berechnete Preise, etwa .99 oder .00.
Fehler
| Status | Typ | Wann |
|---|---|---|
| 404 | not-found | Kein solches Produkt in diesem Konto. |
| 409 | invalid-state | Das Produkt hat schon eine Ausnahme: Ersetze diese. |
curl -X POST "https://www.ninjabuy.com/api/v1/sync_rules" \
-H "Authorization: Bearer $NINJABUY_API_KEY" \
-H "NinjaBuy-Version: 2026-11" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"applies_to": "prd_1x0a",
"on_cost_increase": { "action": "pause" },
"on_back_in_stock": "stay_paused"
}'HTTP/2 201 Created
{
"id": "rule_9p3e",
"applies_to": "prd_1x0a",
"on_cost_increase": { "action": "pause" },
"on_cost_decrease": "keep_price",
"on_out_of_stock": "zero_stock",
"on_back_in_stock": "stay_paused",
"round_to": null,
"updated_at": "2026-11-03T10:14:00Z"
}Eine Sync-Regel ersetzen
PUT/v1/sync_rules/{id}
Schick die ganze Regel. Sie gilt ab dem nächsten Mal, wenn wir jedes Angebot lesen.
Scopeproducts:write
Pfadparameter
idstringerforderlich- Die ID der Regel.
Body
on_cost_increase.actionstring- neu bepreisen, um deine Marge zu halten, das Produkt pausieren oder nur benachrichtigen.
on_cost_increase.keep_margin_percentstring- Mit reprice: die zu haltende Marge, bezogen auf den Verkaufspreis.
on_cost_increase.max_increase_percentstring|null- Mit reprice: der größte Anstieg, um den ein Preis auf einmal steigen darf. Darüber gilt above_max: pausieren oder benachrichtigen.
on_cost_decreasestring- keep_price oder auf dieselbe Marge nach unten neu bepreisen.
on_out_of_stockstring- Immer zero_stock: Eine ausverkaufte SKU zeigt auf deinen Kanälen 0.
on_back_in_stockstring- restock oder stay_paused, bis du es fortsetzt.
round_tostring|null- Eine Preisendung für neu berechnete Preise, etwa .99 oder .00.
Fehler
| Status | Typ | Wann |
|---|---|---|
| 404 | not-found | Keine solche Regel in diesem Konto. |
curl -X PUT "https://www.ninjabuy.com/api/v1/sync_rules/rule_default" \
-H "Authorization: Bearer $NINJABUY_API_KEY" \
-H "NinjaBuy-Version: 2026-11" \
-H "Content-Type: application/json" \
-d '{
"on_cost_increase": { "action": "notify" },
"on_cost_decrease": "keep_price",
"on_out_of_stock": "zero_stock",
"on_back_in_stock": "restock",
"round_to": ".99"
}'HTTP/2 200 OK
{
"id": "rule_default",
"applies_to": "all",
"on_cost_increase": { "action": "notify" },
"on_cost_decrease": "keep_price",
"on_out_of_stock": "zero_stock",
"on_back_in_stock": "restock",
"round_to": ".99",
"updated_at": "2026-11-02T08:00:00Z"
}Eine Ausnahme löschen
DELETE/v1/sync_rules/{id}
Das Produkt folgt wieder der Standardregel. rule_default selbst kann nicht gelöscht werden.
Scopeproducts:write
Pfadparameter
idstringerforderlich- Die ID der Regel.
Fehler
| Status | Typ | Wann |
|---|---|---|
| 409 | invalid-state | rule_default kann nicht gelöscht werden. |
curl -X DELETE "https://www.ninjabuy.com/api/v1/sync_rules/rule_9p3e" \
-H "Authorization: Bearer $NINJABUY_API_KEY" \
-H "NinjaBuy-Version: 2026-11"HTTP/2 200 OK
{ "id": "rule_9p3e", "deleted": true }