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.
sync_rule
{
  "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"
Response 200
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

StatusTypWann
404not-foundKeine 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"
Response 200
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

StatusTypWann
404not-foundKein solches Produkt in diesem Konto.
409invalid-stateDas 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"
  }'
Response 201
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

StatusTypWann
404not-foundKeine 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"
  }'
Response 200
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

StatusTypWann
409invalid-staterule_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"
Response 200
HTTP/2 200 OK

{ "id": "rule_9p3e", "deleted": true }