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 /billingte 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.
| Filtro | Canales | Valores |
|---|---|---|
quantity | todos excepto Faire, Temu, Wix | {"operator": "gt" | "lt" | "eq", "value": 0}, stock total de todas las variantes |
status | la mayoría de los canales | los valores propios de cada canal, por ejemplo eBay Active / Unsold / All, Etsy active / draft / expired / inactive, Shopify any / published / unpublished |
listing_type | eBay | All, FixedPriceItem (Cómpralo ya), Chinese (subasta) |
shop_section_id | Etsy | un id de sección de la tienda |
collection_id | Shopify | un id de colección (GET /channel_accounts/{id}/collections) |
category_id | WooCommerce, Wix, Square | un id de categoría |
availability | Google Merchant Center | all, in_stock, out_of_stock |
sku_contains | Amazon | texto 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"}
JSONColumnas 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.