Traducida del inglés. Si hay alguna diferencia, la página en inglés es la referencia. Leer en inglés
Sincronizar stock y precios en bloque
Envía cambios de cantidad y precio de hasta 100 SKU por llamada y consulta el resultado de cada elemento.
Para sincronizaciones periódicas desde un ERP o un almacén, POST /inventory/batch es el
endpoint sobre el que construir: identifica las variantes por SKU, así que no necesitas
guardar ningún id de Nembol.
curl -X POST https://api.nembol.com/rest/v1/inventory/batch \
-H "Authorization: Bearer $NEMBOL_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: stock-sync-2026-07-30T22:00" \
-d '{"items": [
{"sku": "VDJ-M-001", "quantity": 12},
{"sku": "VDJ-L-001", "quantity": 0, "price": "44.90"}
]}'La escritura local es inmediata; la propagación a los canales es asíncrona. La
respuesta es una operación. Los elementos que no se pueden asociar vuelven en
rejected_items con un motivo (sku_not_found, sku_ambiguous) sin hacer
fallar el resto, y además aparecen como entradas failed en results: la
operación termina en partial, así que un SKU renombrado en tu sistema aparece en tus
alertas en lugar de dejar de sincronizarse sin avisar. Si ningún elemento se puede aplicar,
la llamada responde 422 no_items_applied (motivos en
error.details.rejected_items) y no cambia nada.
results[] tiene una entrada por SKU y por canal en el que el producto está publicado,
con su channel_account_id y su listing_id:
pending: guardado en Nembol, el canal todavía no ha respondido;succeeded: ese canal ya tiene el nuevo stock o precio;failed: ese canal lo rechazó, con su mensaje enerror. La operación pasa apartial.
Nembol reintenta primero los rechazos temporales (por ejemplo, el "this product is currently being
modified" de Shopify cuando dos escrituras llegan a la vez al mismo producto, o un límite de solicitudes):
mientras reintenta, el resultado sigue en pending, y
solo un envío que sigue fallando termina en failed.
Así siempre sabes si cada tienda recibió el stock, que es lo que evita
la sobreventa: espera el webhook operation.completed (o consulta
GET /operations/{id}) y actúa sobre las entradas fallidas. Un producto que no está publicado en ningún
canal recibe una sola entrada con channel_account_id: null, ya succeeded:
guardado en Nembol, nada que enviar.
Upserts del catálogo completo
Para crear o actualizar productos completos (contenido incluido), usa
POST /products/batch. Tiene la misma asociación por SKU (un SKU ambiguo
falla con sku_ambiguous y no se escribe nada), hasta 100 elementos, resultados
por elemento, status: "partial" cuando solo fallan algunos y 422 no_items_applied
cuando no se aplica ninguno. Los SKU sin coincidencia se
crean (título obligatorio) y los que coinciden se actualizan.
Acciones en bloque sobre anuncios
POST /listings/batch ejecuta una action (publish, delist, resync
o retry) sobre hasta 100 pares (producto, cuenta de canal), por ejemplo para copiar un
catálogo en una segunda cuenta de eBay:
curl -X POST https://api.nembol.com/rest/v1/listings/batch \
-H "Authorization: Bearer $NEMBOL_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: copy-to-ebay2-page-1" \
-d '{"action": "publish",
"items": [{"product_id": "prod_66a1f0", "channel_account_id": "chac_6aa12cab"},
{"product_id": "prod_66a1f1", "channel_account_id": "chac_6aa12cab"}]}'Cada par obtiene su propio resultado en la operación: pending hasta que el
canal responde, skipped cuando ya está en el estado pedido (por ejemplo,
already_listed), y failed con un código en los demás casos. Los resultados vuelven en
el mismo orden que tus items, y cada uno repite el product_id y el
channel_account_id que enviaste, incluidos los desconocidos, así que siempre sabes
a qué par se refiere cada resultado. Recorre los catálogos más grandes
de 100 pares en 100, con un Idempotency-Key distinto por página.
Cambios de precio en bloque
POST /inventory/price_adjustment sube o baja todas las variantes de hasta
100 productos en un porcentaje o un importe (opcionalmente redondeado a .99) y
envía los nuevos precios a los canales activos:
curl -X POST https://api.nembol.com/rest/v1/inventory/price_adjustment \
-H "Authorization: Bearer $NEMBOL_API_KEY" \
-H "Content-Type: application/json" \
-d '{"product_ids": ["prod_66a1f0", "prod_66a1f1"], "mode": "percentage", "value": -15, "rounding": true}'El resultado de cada variante incluye previous_price y price. Para deshacer, vuelve a enviar
los precios anteriores:
POST /inventory/batch
{"items": [{"sku": "TEE-M", "price": "19.99"}, {"sku": "TEE-L", "price": "21.99"}]}Puntos a tener en cuenta
- Un Idempotency-Key por cada ejecución del lote. Reintentar un lote que agotó el tiempo con la misma clave devuelve el resultado guardado en lugar de aplicarlo dos veces.
- Las actualizaciones en lote no aceptan imágenes. Un elemento con coincidencia que lleve
images[]falla (por elemento). Actualiza las imágenes conPATCH /products/{id}. quantity: 0es un valor real. Deja la variante agotada en todas partes.- Escucha
operation.completeden lugar de consultar periódicamente si sincronizas a menudo. - Los precios son strings (
"44.90"), siempre en la moneda base de la tienda. - Un canal puede mostrar menos unidades de las que tienes (o "sin stock" en
Google Merchant Center): los vendedores pueden fijar un tope de cantidad por canal
(
inventoryenGET /channel_accounts). - Las reglas de precio del canal se aplican encima de los precios que fijas o ajustas
(
pricingen la cuenta de canal).
Última actualización el 20 de octubre de 2026
¿Necesitas ayuda?
Escríbenos y te responde una persona, normalmente en un día laborable.
Editar un producto: qué llega realmente a los canales
Tu PATCH siempre actualiza Nembol; lo que se propaga a cada canal depende de la configuración de sincronización del vendedor.
Gestionar el envío de pedidos
Obtén los pedidos con la dirección de envío completa, márcalos como enviados, añade el seguimiento y avisa al marketplace.