Importar productos masivamente
Crea o actualiza varios productos en una sola llamada, con su inventario. Si la referencia ya existe se actualiza; si no, se crea.
Request 🚀
url
https://app.aveonline.co/avestock/api/importProductsBulk.php
Method
POST
Header
Content-Type: application/json
Authorization: {data.token}
El data.token se obtiene en la Autenticación.
Params JSON
Generales
- tipo*
StringEnrutador de la API, "authave" - empresa*
NumberIdentificador de la empresa dentro de AVEONLINE - products*
ArrayProductos del lote. Máximo 500 por llamada - warehouse_id
NumberBodega del inventario. Si se omite, la bodega principal activa - idempotency_key
StringLlave única del lote. Recomendada
Por producto
- reference*
StringReferencia. Es la llave: si existe se actualiza, si no se crea - name*
StringNombre del producto - rate*
NumberPrecio de venta. Debe ser mayor a 0 - quantity
NumberCantidad OBJETIVO en la bodega. Ver la nota de abajo - description
StringDescripción - short_description
StringDescripción corta - suggested
NumberPrecio sugerido - cost
NumberCosto - declared_value
NumberValor declarado - tax
NumberImpuesto, de 0 a 100 - weight
NumberPeso en kilos - height / width / length
NumberDimensiones en centímetros - minimum
NumberStock mínimo - negative_inventory
Number1 permite saldo negativo, 0 no - image_url
StringURL de la imagen - dropshippers_price
NumberPrecio para dropshippers - shopify_product_ref
StringIdentificador del producto en Shopify. Ver la nota de abajo - shopify_shop_url
StringTienda. Solo si la empresa tiene más de una conectada - variants
ArrayVariantes del producto - variants[].sku*
StringReferencia de la variante - variants[].quantity
NumberCantidad objetivo de esa variante - variants[].shopify_product_ref
StringIdentificador de la variante en Shopify
Ejemplo
{
"tipo": "authave",
"empresa": 6077,
"idempotency_key": "catalogo-2026-11-05-001",
"warehouse_id": 1203,
"products": [
{
"reference": "REF-0001",
"name": "Camiseta negra",
"description": "Algodón 100%",
"rate": 45000,
"suggested": 59000,
"cost": 20000,
"declared_value": 45000,
"tax": 19,
"weight": 0.3,
"height": 5,
"width": 20,
"length": 30,
"quantity": 120,
"minimum": 5,
"negative_inventory": 0,
"shopify_product_ref": "7421558292481"
}
]
}
quantity es la cantidad objetivo, no un incrementoSi el producto tiene 100 unidades y se envía "quantity": 120, se ingresan 20. Si se envía de nuevo el mismo lote, no se mueve nada.
Esto hace que reenviar un lote sea inocuo, incluso si se perdió la llave de idempotencia.
shopify_product_refCuando la cuenta tiene activa la sincronización con Shopify:
- Si se envía la referencia, el producto de AveCRM se enlaza con el que ya existe en Shopify. No se crea nada allá.
- Si no se envía, el producto se crea en Shopify y AveCRM guarda la referencia que devuelve.
Una misma referencia de Shopify no puede quedar enlazada a dos productos distintos de AveCRM en la misma tienda.
Response 📄
Success
- summary
ObjectConteo por resultado: created, updated, unchanged, failed - products[].action
Stringcreated, updated, unchanged o failed - products[].product_id
NumberIdentificador interno en AveCRM - products[].inventory
ObjectSaldo antes y después, y unidades movidas - products[].shopify
ObjectResultado del enlace y de la subida de stock - products[].reason
StringMotivo, solo cuando action es failed
Ejemplo
{
"success": true,
"messages": "Lote procesado",
"status": 200,
"data": {
"idempotency_key": "catalogo-2026-11-05-001",
"replayed": false,
"warehouse_id": 1203,
"shopify_sync": true,
"summary": { "created": 1, "updated": 0, "unchanged": 0, "failed": 0 },
"products": [
{
"reference": "REF-0001",
"product_id": 225321,
"action": "created",
"inventory": {
"product_id": 225322,
"sku": "REF-0001",
"before": 0,
"after": 120,
"units": 120,
"movement": "entrada"
},
"shopify": {
"action": "linked",
"reason": "",
"product_ref": "7421558292481",
"shop": "mitienda.myshopify.com"
},
"index": 0
}
]
}
}
Lote con fallos parciales
El estado es 207. Los productos correctos sí quedaron procesados.
{
"success": true,
"messages": "Lote procesado con fallos parciales. Revise `products`.",
"status": 207,
"data": {
"summary": { "created": 1, "updated": 0, "unchanged": 0, "failed": 1 },
"products": [
{ "reference": "REF-0001", "product_id": 225321, "action": "created", "index": 0 },
{ "reference": "REF-0002", "product_id": null, "action": "failed", "reason": "`rate` debe ser mayor a 0.", "index": 1 }
]
}
}
Lote demasiado grande
{
"success": false,
"messages": "Lote demasiado grande",
"status": 413,
"errors": [
{ "attribute": "products", "detail": "Maximo 500 productos por llamada. Divida el lote." }
]
}
La bodega no es de la empresa
{
"success": false,
"messages": "Bodega invalida",
"status": 409,
"errors": [
{ "attribute": "warehouse_id", "detail": "La bodega 999 no existe o no es de esta empresa." }
]
}
Notas Importantes 📝
- Cada producto se procesa por separado. Uno con datos inválidos no detiene el lote: sale con
action: "failed"y su motivo, y el resto se procesa. La respuesta es207. - Nunca se duplica. La referencia identifica el producto dentro de la empresa.
- Un producto que estaba inactivo vuelve a quedar activo al reimportarlo.
- Si el producto no trae variantes, AveCRM crea una variante por defecto con la misma referencia. Es la que lleva el inventario.
weight,height,widthylengthadmiten 5 caracteres.123.45se guarda como123.4.- Para crear un solo producto, use Crear producto.