Skip to main content
Version: Latest

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

Content-Type: application/json
Authorization: {data.token}

El data.token se obtiene en la Autenticación.

Params JSON​

Generales​

  • tipo* String Enrutador de la API, "authave"
  • empresa* Number Identificador de la empresa dentro de AVEONLINE
  • products* Array Productos del lote. Máximo 500 por llamada
  • warehouse_id Number Bodega del inventario. Si se omite, la bodega principal activa
  • idempotency_key String Llave única del lote. Recomendada

Por producto​

  • reference* String Referencia. Es la llave: si existe se actualiza, si no se crea
  • name* String Nombre del producto
  • rate* Number Precio de venta. Debe ser mayor a 0
  • quantity Number Cantidad OBJETIVO en la bodega. Ver la nota de abajo
  • description String Descripción
  • short_description String Descripción corta
  • suggested Number Precio sugerido
  • cost Number Costo
  • declared_value Number Valor declarado
  • tax Number Impuesto, de 0 a 100
  • weight Number Peso en kilos
  • height / width / length Number Dimensiones en centímetros
  • minimum Number Stock mínimo
  • negative_inventory Number 1 permite saldo negativo, 0 no
  • image_url String URL de la imagen
  • dropshippers_price Number Precio para dropshippers
  • shopify_product_ref String Identificador del producto en Shopify. Ver la nota de abajo
  • shopify_shop_url String Tienda. Solo si la empresa tiene más de una conectada
  • variants Array Variantes del producto
  • variants[].sku* String Referencia de la variante
  • variants[].quantity Number Cantidad objetivo de esa variante
  • variants[].shopify_product_ref String Identificador 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 incremento

Si 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.

El campo shopify_product_ref

Cuando 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 Object Conteo por resultado: created, updated, unchanged, failed
  • products[].action String created, updated, unchanged o failed
  • products[].product_id Number Identificador interno en AveCRM
  • products[].inventory Object Saldo antes y después, y unidades movidas
  • products[].shopify Object Resultado del enlace y de la subida de stock
  • products[].reason String Motivo, 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 📝​

  1. 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 es 207.
  2. Nunca se duplica. La referencia identifica el producto dentro de la empresa.
  3. Un producto que estaba inactivo vuelve a quedar activo al reimportarlo.
  4. Si el producto no trae variantes, AveCRM crea una variante por defecto con la misma referencia. Es la que lleva el inventario.
  5. weight, height, width y length admiten 5 caracteres. 123.45 se guarda como 123.4.
  6. Para crear un solo producto, use Crear producto.