Traduite de l'anglais. En cas de différence, la page en anglais fait foi. Lire en anglais

Importer des produits

Importez dans Nembol le catalogue d'un canal connecté, ou un CSV, depuis votre application ou votre agent : uniquement les nouveaux articles, liaison par SKU, filtres ponctuels, progression en direct et annulation.

POST /imports exécute le même import que le tableau de bord Nembol, en arrière-plan, avec les mêmes règles. Votre clé a besoin de products:write.

Importer le catalogue d'un canal

curl -X POST https://api.nembol.com/rest/v1/imports \
  -H "Authorization: Bearer $NEMBOL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"channel_account_id": "chac_66f0a1",
       "filters": {"status": "Active", "quantity": {"operator": "gt", "value": 0}}}'
{
  "id": "op_8fd2c1",
  "object": "operation",
  "type": "import.channel",
  "status": "processing",
  "import": {
    "source": "channel",
    "channel_account_id": "chac_66f0a1",
    "filters": { "status": "Active", "quantity": { "operator": "gt", "value": 0 } },
    "warnings": [],
    "processed": 0
  }
}

Ce qui est importé, exactement comme pour un import depuis le tableau de bord :

  • Uniquement les nouveaux articles. Les articles déjà importés depuis ce compte de canal sont ignorés (imports depuis un canal ; pour un CSV, voir plus bas), donc relancer un import n'apporte que les nouveautés.
  • Pas de doublons par SKU. Un article dont le SKU correspond exactement à un seul produit déjà présent dans Nembol (avec le même nombre de variantes) y est lié, et le produit n'est pas écrasé. Les correspondances ambiguës ne sont pas importées et sont comptées dans not_imported.
  • La limite de produits du forfait arrête la création ; les articles au-delà de la limite sont comptés dans not_imported. GET /billing vous indique d'abord la marge disponible.

Filtres pour un seul import

Sans filters, l'import utilise les paramètres d'import du compte de canal (les mêmes que dans le tableau de bord). filters les remplace pour cet import uniquement ; les paramètres enregistrés ne changent pas.

FiltreCanauxValeurs
quantitytous sauf Faire, Temu, Wix{"operator": "gt" | "lt" | "eq", "value": 0}, stock total de toutes les variantes
statusla plupart des canauxles valeurs propres à chaque canal, par exemple eBay Active / Unsold / All, Etsy active / draft / expired / inactive, Shopify any / published / unpublished
listing_typeeBayAll, FixedPriceItem (Achat immédiat), Chinese (enchère)
shop_section_idEtsyun id de section de boutique
collection_idShopifyun id de collection (GET /channel_accounts/{id}/collections)
category_idWooCommerce, Wix, Squareun id de catégorie
availabilityGoogle Merchant Centerall, in_stock, out_of_stock
sku_containsAmazontexte que le SKU doit contenir

La liste complète des valeurs se trouve dans la référence de l'API.

Lire les avertissements

import.warnings contient des remarques en langage clair à transmettre à la personne avant qu'elle ne se fie au résultat. Par exemple, sur certains forfaits certains filtres sont ignorés, ou la boutique a déjà atteint sa limite de produits. La liaison par SKU fonctionne avec tous les forfaits.

Importer un CSV

Envoyez le contenu du fichier en texte :

curl -X POST https://api.nembol.com/rest/v1/imports \
  -H "Authorization: Bearer $NEMBOL_API_KEY" \
  -H "Content-Type: application/json" \
  --data-binary @- <<'JSON'
{"csv": "id,title,description,quantity,price,sku\nMUG-1,Blue mug,A blue mug,5,12.50,MUG-BLUE\n"}
JSON

Colonnes obligatoires : price et quantity (ou sku-code seul, pour mettre à jour des variantes existantes par SKU : seules les colonnes envoyées changent). Elles sont vérifiées avant tout démarrage : un fichier sans elles répond 422 validation_failed avec error.details.missing_columns. id, title, description et les autres sont facultatives ; sans id, une ligne en reçoit un dérivé de son contenu, donc renvoyer le même fichier retrouve les mêmes produits. Les exports Shopify, eBay et inkFrog sont aussi reconnus ; les colonnes non reconnues sont listées dans import.warnings.

Lignes réimportées, une seule règle : une ligne dont l'id correspond à un produit de la boutique (son id prod_… issu d'un export, ou l'id de la ligne qui l'a créé) le met à jour (updated), jamais de doublon ; une ligne sans nouveauté est comptée comme unchanged. Pour un CSV, import.total est connu dès le départ.

Suivre la progression

Interrogez GET /operations/{id}, ou abonnez-vous à operation.completed :

{
  "id": "op_8fd2c1",
  "type": "import.channel",
  "status": "succeeded",
  "import": {
    "processed": 342,
    "created": 310,
    "linked": 32,
    "requires_attention": 3,
    "not_imported": 4,
    "error": null
  }
}

processed augmente pendant l'import. Pour un import depuis un canal, il compte les produits créés jusqu'ici (les articles liés à un produit existant sont comptés à la fin) ; pour un CSV, les lignes traitées. created, updated, linked et not_imported sont renseignés à la fin. Un seul import par compte de canal (et un seul CSV) s'exécute à la fois : une seconde requête répond 409 import_already_running.

requires_attention compte les articles qui existent peut-être déjà dans Nembol, sans certitude : ils arrivent en pause (to_verify) jusqu'à ce que quelqu'un décide (voir Doublons).

Annuler un import

Annuler supprime des produits de Nembol : cela demande donc la même confirmation en deux étapes que toute action irréversible. Le premier appel répond 409 confirmation_required avec un confirmation.token ; montrez son résumé à la personne et, si elle est d'accord, répétez la même requête avec le jeton :

curl -X POST https://api.nembol.com/rest/v1/imports/op_8fd2c1/undo \
  -H "Authorization: Bearer $NEMBOL_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Nembol-Confirmation: cfm_3kTq9Xb2"

Envoyez {"include_modified": true} comme corps pour supprimer aussi les produits créés puis modifiés après l'import.

{
  "import": {
    "undone_at": "2026-10-08T10:12:00.000Z",
    "undo": {
      "removed": 309,
      "unlinked": 32,
      "kept": { "live_on_a_channel": 1, "modified_after_import": 0 }
    }
  }
}

L'annulation retire de Nembol ce que l'import a ajouté (les produits qu'il a créés et les liens qu'il a ajoutés aux produits existants) et ne touche jamais à rien sur le canal : vos annonces eBay ou Etsy restent exactement telles quelles. Dans l'API, les annonces des produits supprimés partent avec eux : elles disparaissent de GET /listings et répondent 404 par id.

  • Les produits désormais en ligne sur un canal sont toujours conservés.
  • Les produits modifiés après l'import sont conservés, sauf si vous passez "include_modified": true.
  • Chaque import peut être annulé une seule fois, après sa fin.

Après une annulation, relancer l'import ramène les mêmes articles.

Bonnes pratiques pour les agents

  • Vérifiez GET /billing (marge du forfait) avant un gros import, et dites combien de produits la boutique peut encore ajouter.
  • Expliquez à la personne ce que fera l'import (uniquement les nouveaux articles, liaison par SKU, les filtres définis) et lisez-lui import.warnings.
  • Gardez l'id de l'opération : c'est ce qu'il vous faut pour annuler.

Dernière mise à jour le 20 octobre 2026

Besoin d'aide ?

Écrivez-nous et une personne vous répond, généralement sous un jour ouvré.

Sur cette page