API Catalogue2026-11Aperçu

Règles de synchronisation

Ce qui arrive à votre annonce quand un vendeur en Chine change un prix ou tombe en rupture.
  • Nous relisons une annonce quand une commande arrive et selon un calendrier régulier ; le last_checked_at de chaque produit indique la dernière fois. Garder les produits synchronisés est gratuit.
  • Chaque changement que nous appliquons est aussi un événement : product.cost_changed et product.out_of_stock.

L’objet Sync rule

idstring
Commence par rule_ ; la règle par défaut est rule_default.
applies_tostring
all pour la règle par défaut, ou un identifiant de produit pour une exception.
on_cost_increase.actionstring
recalculer le prix pour garder votre marge, mettre le produit en pause, ou seulement notifier.
on_cost_increase.keep_margin_percentstring
Avec reprice : la marge à garder, en part du prix de vente.
on_cost_increase.max_increase_percentstring|null
Avec reprice : la hausse maximale d’un prix en une fois. Au-delà, above_max s’applique : pause ou notify.
on_cost_decreasestring
keep_price, ou baisser le prix pour garder la même marge.
on_out_of_stockstring
Toujours zero_stock : un SKU épuisé affiche 0 sur vos canaux.
on_back_in_stockstring
restock, ou stay_paused jusqu’à ce que vous le relanciez.
round_tostring|null
Une terminaison de prix pour les prix recalculés, comme .99 ou .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"
}

Lister les règles de synchronisation

GET/v1/sync_rules

La règle par défaut d’abord, puis chaque exception par produit.

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
}

Récupérer une règle de synchronisation

GET/v1/sync_rules/{id}

Une règle.

Scopeproducts:read

Paramètres de chemin

idstringobligatoire
L’identifiant de la règle.

Erreurs

StatutTypeQuand
404not-foundAucune règle de ce type sur ce compte.
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"
}

Exception pour un produit

POST/v1/sync_rules

Un produit avec sa propre règle suit celle-ci au lieu de la règle par défaut. Les champs omis reprennent ceux de la règle par défaut.

Scopeproducts:write

Corps

applies_tostringobligatoire
all pour la règle par défaut, ou un identifiant de produit pour une exception.
on_cost_increase.actionstring
recalculer le prix pour garder votre marge, mettre le produit en pause, ou seulement notifier.
on_cost_increase.keep_margin_percentstring
Avec reprice : la marge à garder, en part du prix de vente.
on_cost_increase.max_increase_percentstring|null
Avec reprice : la hausse maximale d’un prix en une fois. Au-delà, above_max s’applique : pause ou notify.
on_cost_decreasestring
keep_price, ou baisser le prix pour garder la même marge.
on_out_of_stockstring
Toujours zero_stock : un SKU épuisé affiche 0 sur vos canaux.
on_back_in_stockstring
restock, ou stay_paused jusqu’à ce que vous le relanciez.
round_tostring|null
Une terminaison de prix pour les prix recalculés, comme .99 ou .00.

Erreurs

StatutTypeQuand
404not-foundAucun produit de ce type sur ce compte.
409invalid-stateLe produit a déjà une exception : remplacez celle-ci.
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"
}

Remplacer une règle de synchronisation

PUT/v1/sync_rules/{id}

Envoyez la règle entière. Elle s’applique à partir de la prochaine lecture de chaque annonce.

Scopeproducts:write

Paramètres de chemin

idstringobligatoire
L’identifiant de la règle.

Corps

on_cost_increase.actionstring
recalculer le prix pour garder votre marge, mettre le produit en pause, ou seulement notifier.
on_cost_increase.keep_margin_percentstring
Avec reprice : la marge à garder, en part du prix de vente.
on_cost_increase.max_increase_percentstring|null
Avec reprice : la hausse maximale d’un prix en une fois. Au-delà, above_max s’applique : pause ou notify.
on_cost_decreasestring
keep_price, ou baisser le prix pour garder la même marge.
on_out_of_stockstring
Toujours zero_stock : un SKU épuisé affiche 0 sur vos canaux.
on_back_in_stockstring
restock, ou stay_paused jusqu’à ce que vous le relanciez.
round_tostring|null
Une terminaison de prix pour les prix recalculés, comme .99 ou .00.

Erreurs

StatutTypeQuand
404not-foundAucune règle de ce type sur ce compte.
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"
}

Supprimer une exception

DELETE/v1/sync_rules/{id}

Le produit suit à nouveau la règle par défaut. rule_default elle-même ne peut pas être supprimée.

Scopeproducts:write

Paramètres de chemin

idstringobligatoire
L’identifiant de la règle.

Erreurs

StatutTypeQuand
409invalid-staterule_default ne peut pas être supprimée.
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 }