Traducida del inglés. Si hay alguna diferencia, la página en inglés es la referencia. Leer en inglés

Importar productos

Trae a Nembol el catálogo de un canal conectado, o un CSV, desde tu app o tu agente: solo elementos nuevos, vinculación por SKU, filtros para una importación, progreso en directo y deshacer.

POST /imports ejecuta la misma importación que el panel de Nembol, en segundo plano, con las mismas reglas. Tu clave necesita products:write.

Importar el catálogo de 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
  }
}

Lo que entra, exactamente igual que en una importación desde el panel:

  • Solo elementos nuevos. Los elementos ya importados desde esa cuenta de canal se omiten (importaciones de canal; para un CSV, ver más abajo), así que volver a ejecutar una importación solo trae lo nuevo.
  • Sin duplicados por SKU. Un elemento cuyo SKU coincide exactamente con un producto que ya está en Nembol (con el mismo número de variantes) se vincula a él, y el producto no se sobrescribe. Las coincidencias ambiguas no se importan y se cuentan en not_imported.
  • El límite de productos del plan detiene la creación; los elementos que superan el límite se cuentan en not_imported. GET /billing te indica antes el margen disponible.

Filtros para una importación

Sin filters, la importación usa la configuración de importación de la cuenta de canal (la misma que en el panel). filters la sustituye solo para esta importación; la configuración guardada no cambia.

FiltroCanalesValores
quantitytodos excepto Faire, Temu, Wix{"operator": "gt" | "lt" | "eq", "value": 0}, stock total de todas las variantes
statusla mayoría de los canaleslos valores propios de cada canal, por ejemplo eBay Active / Unsold / All, Etsy active / draft / expired / inactive, Shopify any / published / unpublished
listing_typeeBayAll, FixedPriceItem (Cómpralo ya), Chinese (subasta)
shop_section_idEtsyun id de sección de la tienda
collection_idShopifyun id de colección (GET /channel_accounts/{id}/collections)
category_idWooCommerce, Wix, Squareun id de categoría
availabilityGoogle Merchant Centerall, in_stock, out_of_stock
sku_containsAmazontexto que debe contener el SKU

La lista completa de valores está en la referencia de la API.

Lee los avisos

import.warnings contiene notas en lenguaje sencillo para transmitir a la persona antes de que confíe en el resultado. Por ejemplo, en algunos planes algunos filtros se ignoran, o la tienda ya está en su límite de productos. La vinculación por SKU funciona en todos los planes.

Importar un CSV

Envía el contenido del archivo como texto:

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

Columnas obligatorias: price y quantity (o solo sku-code, para actualizar variantes existentes por SKU: solo cambian las columnas que envías). Se comprueban antes de empezar nada: un archivo sin ellas responde 422 validation_failed con error.details.missing_columns. id, title, description y el resto son opcionales; sin id, una fila recibe uno derivado de su contenido, así que volver a subir el mismo archivo encuentra los mismos productos. También se reconocen las exportaciones de Shopify, eBay e inkFrog; las columnas que no se reconocen aparecen en import.warnings.

Filas reimportadas, una sola regla: una fila cuyo id coincide con un producto de la tienda (su id prod_… de una exportación, o el id de la fila que lo creó) lo actualiza (updated), nunca crea un duplicado; una fila sin nada nuevo se cuenta como unchanged. Para un CSV, import.total se conoce desde el principio.

Seguir el progreso

Consulta GET /operations/{id} periódicamente o suscríbete a 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 crece mientras se ejecuta la importación. En una importación de canal cuenta los productos creados hasta el momento (los elementos vinculados a un producto existente se cuentan al final); en un CSV, las filas procesadas. created, updated, linked y not_imported se fijan cuando termina. Se ejecuta una sola importación por cuenta de canal (y un solo CSV) a la vez: una segunda solicitud responde 409 import_already_running.

requires_attention cuenta los elementos que quizá ya existen en Nembol, pero sin certeza: entran en pausa (to_verify) hasta que alguien decida (consulta Duplicados).

Deshacer una importación

Deshacer elimina productos de Nembol, así que pide la misma confirmación en dos pasos que cualquier acción irreversible. La primera llamada responde 409 confirmation_required con un confirmation.token; muestra su resumen a la persona y, si está de acuerdo, repite la misma solicitud con el token:

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"

Envía {"include_modified": true} como cuerpo para eliminar también los productos creados que se editaron después de la importación.

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

Deshacer elimina de Nembol lo que añadió la importación (los productos que creó y los vínculos que añadió a productos existentes) y nunca toca nada en el canal: tus anuncios de eBay o Etsy se quedan exactamente como están. En la API, los anuncios de los productos eliminados se van con ellos: desaparecen de GET /listings y responden 404 por id.

  • Los productos que ahora están publicados en un canal siempre se conservan.
  • Los productos editados después de la importación se conservan, salvo que pases "include_modified": true.
  • Cada importación se puede deshacer una sola vez, después de que haya terminado.

Después de deshacer, volver a importar trae de nuevo los mismos elementos.

Buenas prácticas para agentes

  • Consulta GET /billing (margen del plan) antes de una importación grande y di cuántos productos puede añadir todavía la tienda.
  • Explica a la persona qué hará la importación (solo elementos nuevos, vinculación por SKU, los filtros que hayas fijado) y léele los import.warnings.
  • Guarda el id de la operación: es lo que necesitas para deshacer.

Última actualización el 20 de octubre de 2026

¿Necesitas ayuda?

Escríbenos y te responde una persona, normalmente en un día laborable.

En esta página