Sumar unidades al inventario
Ingresa unidades al inventario de una bodega. Pensado para recepciones de mercancía desde un sistema externo.
Request 🚀
url
https://app.aveonline.co/avestock/api/inventoryAddUnits.php
Method
POST
Header
Content-Type: application/json
Authorization: {data.token}
El data.token se obtiene en la Autenticación.
Params JSON
- tipo*
StringEnrutador de la API, "authave" - empresa*
NumberIdentificador de la empresa dentro de AVEONLINE - idempotency_key*
StringLlave única de la operación. Máximo 120 caracteres - items*
ArrayReferencias y cantidades a ingresar - items[].reference*
StringReferencia del producto - items[].quantity*
NumberUnidades a sumar. Debe ser mayor a 0 - warehouse_id
NumberBodega. Si se omite, se usa la bodega principal activa de la empresa - reason
StringMotivo del movimiento. Queda guardado en el detalle de la entrada
Ejemplo
{
"tipo": "authave",
"empresa": 6077,
"idempotency_key": "recepcion-2026-11-05-001",
"warehouse_id": 1203,
"reason": "Recepción de mercancía proveedor",
"items": [
{ "reference": "REF-0001", "quantity": 50 },
{ "reference": "REF-0002", "quantity": 10 }
]
}
La llave de idempotencia es obligatoria
Si se pierde la respuesta por un corte de red o un tiempo de espera agotado, al reintentar con la misma llave el servicio devuelve el resultado original sin volver a sumar.
Sin esta llave, un reintento ingresaría las unidades dos veces, y esa diferencia solo aparecería semanas después en un conteo físico.
Reutilizar la misma llave con un contenido distinto devuelve 409.
Response 📄
Success
- replayed
Booltrue cuando la respuesta corresponde a un reintento - warehouse_id
NumberBodega sobre la que se aplicó - items[].before
NumberSaldo antes del movimiento - items[].after
NumberSaldo después del movimiento - items[].units
NumberUnidades movidas - items[].shopify
ObjectResultado de la sincronización de stock, si la cuenta la tiene activa
Ejemplo
{
"success": true,
"messages": "Inventario actualizado",
"status": 200,
"data": {
"idempotency_key": "recepcion-2026-11-05-001",
"replayed": false,
"warehouse_id": 1203,
"shopify_sync": true,
"items": [
{
"reference": "REF-0001",
"product_id": 225321,
"before": 120,
"after": 170,
"units": 50,
"movement": "entrada",
"shopify": { "ok": true, "action": "updated", "reason": "" }
}
]
}
}
Reintento con la misma llave
{
"success": true,
"messages": "Reintento: el movimiento ya se habia aplicado.",
"status": 200,
"data": { "replayed": true }
}
Falta la llave de idempotencia
{
"success": false,
"messages": "Errores de validacion",
"status": 422,
"errors": [
{
"attribute": "idempotency_key",
"detail": "Es obligatoria: sin ella un reintento duplicaria las unidades."
}
]
}
Una referencia no existe
El lote no se aplica: ni siquiera los items correctos.
{
"success": false,
"messages": "El lote no se aplico: revise los errores.",
"status": 409,
"errors": [
{
"attribute": "items.1.reference",
"detail": "No existe un producto con la referencia REF-0002."
}
]
}
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 📝
- El lote es todo o nada. Primero se valida completo y solo si todo pasa se aplica. Un lote aplicado a medias es peor que uno rechazado: no se sabe por dónde iba y al reintentar se duplica lo que ya entró.
- Se registran los movimientos tanto del saldo disponible como del saldo físico.
- Si la cuenta tiene activa la sincronización con Shopify, el stock se actualiza allá después de aplicar el movimiento. Si Shopify falla, el movimiento en AveCRM se mantiene y el detalle del error viaja en
items[].shopify.