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.
{
"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"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
| Statut | Type | Quand |
|---|---|---|
| 404 | not-found | Aucune 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"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
| Statut | Type | Quand |
|---|---|---|
| 404 | not-found | Aucun produit de ce type sur ce compte. |
| 409 | invalid-state | Le 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"
}'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
| Statut | Type | Quand |
|---|---|---|
| 404 | not-found | Aucune 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"
}'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
| Statut | Type | Quand |
|---|---|---|
| 409 | invalid-state | rule_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"HTTP/2 200 OK
{ "id": "rule_9p3e", "deleted": true }