Generar pedido
Permite generar un pedido en AveCRM con validación automática de inventario, cálculo de envío y generación de guía. El sistema soporta dropshipping, fulfillment y múltiples formas de envío. Los productos deben estar previamente registrados. Si no se especifica el operador logístico, el sistema selecciona automáticamente el más económico.
Request 🚀
url
https://app.aveonline.co/avestock/api/createOrder.php
Method
POST
Header
Content-Type: application/json
Params JSON
Autenticación (requeridos)
- tipo*
StringEnrutador de la API: "authave" - token*
StringToken recibido en la [Autenticación](./autenticacion) con vigencia de una hora - empresa*
NumberIdentificador de la empresa dentro de AVEONLINE
Identificación del Pedido
- numeropedidoExterno
StringNúmero de pedido asociado a tienda, POS, ERP, etc. Validado contra duplicados - lucidsalesOrderId
StringID de orden de LucidSales (si aplica)
Origen del Pedido
- bodegaName
NumberID de la bodega desde donde se realiza el envío. Si no se envía, se selecciona automáticamente - idAgente*
NumberID del canal de venta o agente. [Listado de canales de ventas](./listadocanalesVentas) - proveedorName
NumberID del proveedor para pedidos de dropshipping
Productos - Opción 1: Array de items (recomendado)
- items
Array<Object>Lista de productos del pedido- productRef*
StringCódigo/referencia del producto - quantity*
NumberCantidad del producto - rateValue
NumberValor unitario. Si no se envía, se toma del sistema - ivaValue
NumberValor del IVA unitario - peso
NumberPeso unitario (Kg). Si no se envía, se toma del sistema - vol
NumberVolumen unitario. Si no se envía, se toma del sistema - declarado
NumberValor declarado unitario. Si no se envía, se toma del sistema - totalValue
NumberValor total del ítem. Si no se envía, se calcula automáticamente - descuentoValue
NumberValor de descuento del producto - descuento
FloatPorcentaje de descuento (ej: 10.50) - numerodescuento
NumberDescuento en valor absoluto
- productRef*
Productos - Opción 2: Arrays paralelos (legacy)
- productName
Array<String>Array de nombres/IDs de productos - quantity
Array<Number>Array de cantidades (debe coincidir con productName) - rateValue
Array<Number>Array de valores unitarios - ivaValue
Array<Number>Array de valores de IVA - peso
Array<Number>Array de pesos - vol
Array<Number>Array de volúmenes - declarado
Array<Number>Array de valores declarados
Totales del Pedido (si no se envían, se calculan automáticamente)
- subTotalValue
NumberSubtotal antes de impuestos - vatValue
NumberTotal de impuestos - totalAmountValue
NumberTotal del pedido sin envío - grandTotalValue
NumberTotal general del pedido - grandTotalPeso
NumberPeso total (Kg) - grandTotalVol
NumberVolumen total - grandTotalUnit
NumberTotal de unidades - grandTotalDeclarado
NumberValor declarado total - grandDescuentoValue
NumberTotal de descuentos - orderDiscount
NumberDescuento aplicado sobre todo el pedido antes del IVA
Datos del Cliente Destinatario
- clientDestino*
StringCiudad de destino: 'CIUDAD(DEPARTAMENTO)' o código DANE de 5+ dígitos - clientContact*
StringNombre del destinatario - clientId*
StringIdentificación del destinatario - clientDir
StringDirección del destinatario. Si está vacía, el pedido queda en novedad - clientTel
StringTeléfono del destinatario - clientEmail
StringCorreo electrónico del destinatario - clientName
NumberID del cliente (uso interno)
Configuración del Envío
- seloperadorEnvio
NumberID del operador logístico. Si es 0, se selecciona el más económico automáticamente - valorEnvio
NumberValor del envío (si ya fue cotizado previamente) - valorEnvioValue
NumberAlias de valorEnvio - cadenaEnvio
StringDatos adicionales del envío (JSON string) - diasEntrega
NumberDías de entrega estimados
Configuración de Pago y Recaudo
- paymentCliente
Number¿Cliente paga el transporte? (1=SI, 2=NO) - recaudo
NumberValor a recaudar del pedido. Si es mayor a 0,pagadose marca como 2 - recaudoValue
NumberAlias de recaudo - paymentAsumecosto
Number¿Cliente asume costo del recaudo? (1=SI, 2=NO) - pagado
NumberEstado de pago: 1=Pagado desde canal de venta, 2=No pagado - metodo_pago
NumberID del método de pago utilizado - plazo_pago
NumberPlazo de pago en días
Configuración del Proceso
- noGenerarEnvio
Number1=No genera guía automáticamente. Se debe generar después manualmente - revisarCE
String"1"=Pedido requiere confirmación (contraentrega). No genera guía hasta confirmar - enviopropio
Booleantrue=Envío propio, no usa operadores logísticos - plugin
StringIdentificador del método de acceso. Por defecto "aveonline"
Datos Adicionales
- obs
StringObservaciones del envío ("dice contener"). Si está vacío, se genera automáticamente con los productos - observacion
StringAlias de obs - notas
StringNotas internas del pedido - nroFactura
StringNúmero de factura interna - calificacion
Array<Object>Calificaciones asociadas al pedido - otros_items
Array<Object>Items adicionales (ej: costos de empaque)
Configuración Avanzada
- debug
Number1=Modo debug (registra información adicional) - noSocket
Booleantrue=No envía notificación por socket - extra_data
ObjectDatos extra como reputación IA- ia_dir_reputation
ObjectDatos de reputación de dirección por IA
- ia_dir_reputation
Ejemplo
{
"empresa": "6077",
"tipo": "authave",
"token": "",
"numeropedidoExterno": "",
"bodegaName": "",
"idAgente": "10961",
"items": [
{
"productRef": "LI-10",
"rateValue": "642667",
"ivaValue": "0",
"quantity": "1",
"peso": "6",
"vol": "0",
"declarado": "10000",
"totalValue": "642667"
},
{
"productRef": "ref0004",
"rateValue": "",
"ivaValue": "0",
"quantity": "1",
"peso": "",
"vol": "0",
"declarado": "",
"totalValue": ""
}
],
"subTotalValue": "1300334.00",
"vatValue": "0.00",
"totalAmountValue": "1300334.00",
"grandTotalValue": "1300334.00",
"grandTotalVol": "0.00",
"grandTotalPeso": "12.00",
"grandTotalUnit": "2.00",
"grandTotalDeclarado": "20000.00",
"grandTotalDeclaradoValue": "20000.00",
"paymentCliente": "",
"recaudo": "",
"recaudoValue": "1300334.00",
"paymentAsumecosto": "",
"clientDestino": "BOGOTA(CUNDINAMARCA)",
"valorEnvio": "39408",
"valorEnvioValue": "39408",
"cadenaEnvio": "",
"seloperadorEnvio": "29",
"clientContact": "nombre prueba",
"clientId": "78000000",
"clientDir": "DIRECCION DE PRUEBA DE CLIENTE",
"clientTel": "2340000000",
"clientEmail": "prueba@prueba.com",
"nroFactura": "",
"plugin": "avenline",
"noGenerarEnvio": "",
"revisarCE": "",
"obs": "",
"pagado": false,
"enviopropio": false
}
Response 📄
Success
Datos Principales
- success
Booleantrue si el pedido se creó exitosamente - order_id
StringNúmero consecutivo de la orden generada - id
NumberID único de la orden en la base de datos - messages
StringMensaje descriptivo del resultado
Información del Transporte
- valortransporte
NumberValor estimado del transporte (puede cambiar al confirmar) - diasEntrega
NumberDías de entrega estimados - kilosenvios
NumberPeso (Kg) utilizado para calcular el costo de transporte - operador
StringNombre del operador logístico seleccionado. Vacío si enviopropio=true
Información de la Bodega
- bodegaContact
StringNombre de la bodega - bodegaId
StringNIT de la bodega - bodegaTel
StringTeléfono de la bodega - bodegaDir
StringDirección de la bodega - bodegaEmail
StringEmail de la bodega - bodega_usuario
NumberID del usuario asociado a la bodega - bodega_id
NumberID de la bodega en el sistema - bodegaOrigen
StringCiudad origen de la bodega
Operadores Disponibles
- dataoperadores
Array<Object>Lista de operadores cotizados (vacío si enviopropio=true)- status
NumberEstado de la cotización (1=exitoso) - message
StringMensaje de la cotización - flete
NumberValor del flete - variable
NumberCosto de manejo - comision
NumberCosto del recaudo - total
NumberValor total del operador - campo
NumberID del operador - transportadora
StringNombre del operador - diasentrega
NumberDías de entrega - stringdata
StringCadena con datos completos de la cotización
- status
Estado del Pedido
- order_status
NumberID del estado del pedido - order_status_name
StringNombre del estado del pedido - log
StringRegistro del log de estado creado
Novedades (si existen)
- novelties
Array<Object>Lista de novedades detectadas- status
NumberID del estado de novedad - message
StringDescripción de la novedad - priority
NumberPrioridad de la novedad
- status
- novelties_count
NumberCantidad de novedades detectadas - all_novelty_logs
Array<String>Logs de todas las novedades registradas
Generación de Guía
- guide
ObjectResultado del proceso de generación de guía (si aplica)- success
Booleantrue si la guía se generó exitosamente - Otros campos según el operador
- success
Totales Calculados
- totalAmount
NumberTotal del pedido calculado
Integraciones
- linea_estandar_message
ObjectResultado del envío de mensaje WhatsApp- success
BooleanEstado del envío - message
StringMensaje de resultado - response
ObjectRespuesta completa del servicio
- success
Ejemplo
{
"success": true,
"order_id": "0000000",
"messages": "Pedido 0000000 Agregado exitosamente.",
"valortransporte": 00000,
"id": 116056,
"diasEntrega": 3,
"kilosenvios": 1,
"operador": "DOMINA",
"bodegaContact": "",
"bodegaId": "",
"bodegaTel": "",
"bodegaDir": "",
"bodegaEmail": "",
"bodega_usuario": "",
"bodega_id": "",
"bodegaOrigen": "",
"databodegas": [
{
"bodega_id": "0000",
"bodega_nombre": "BODEGA PRUEBA",
"dataoperadores": [
{
"status": 1,
"message": "Datos recibidos",
"flete": 10820,
"variable": 0,
"comision": 1946,
"total": 12766,
"campo": 1026,
"transportadora": "DOMINA",
"diasentrega": 3,
"stringdata": "numbererror=-0-|dataerror=|codigotransportadora=1026|transportadora=Domina|logotransportadora={ruta}|logotransportadora2={ruta}|origen=BOGOTA(CUNDINAMARCA)|destino=CALI(VALLE DEL CAUCA)|unidades=1|kilosacobrar=1|pesovolumen=0|valoracion=44950|porvaloracion=0.5|trayecto=Nacional|codtrayecto=96|tipoenvio=Mensajeria|fletexkilo=10820|fletexund=10820|fletetotal=10820|diasentrega=3|flete=10820|costomanejo=0|valortotal=10820|valorotros=1946|grantotal=12766|codmostrartransportadora=1026|topemaximo=0|dscontraentrega=0|alto=0|largo=0|ancho=0",
"bodegaId": "",
"bodegaTel": "",
"bodegaDir": "",
"bodegaEmail": "",
"bodega_usuario": "",
"bodega_id": "",
"bodegaOrigen": ""
}
],
}
],
}
Si esta pendiente de confirmar el pedido o no se genera guia de envio
{
{
"success": true,
"order_id": "0000000",
"messages": "Pedido 0000000 Agregado exitosamente. No se genera el envío. Lo puede hacer de manera posterior en la opción '<strong>Gestionar pedidos<\/strong> y\/o confirmando el proceso de pedido cuando el cliente asume el costo o se debe recaudar el valor.",
"valortransporte": 00000,
"id": 116056,
"diasEntrega": 3,
"operador": "DOMINA",
"bodegaContact": "",
"bodegaId": "",
"bodegaTel": "",
"bodegaDir": "",
"bodegaEmail": "",
"bodega_usuario": "",
"bodega_id": "",
"bodegaOrigen": "",
"databodegas": [
{
"bodega_id": "0000",
"bodega_nombre": "BODEGA PRUEBA",
"dataoperadores": [
{
"status": 1,
"message": "Datos recibidos",
"flete": 10820,
"variable": 0,
"comision": 1946,
"total": 12766,
"campo": 1026,
"transportadora": "DOMINA",
"stringdata": "numbererror=-0-|dataerror=|codigotransportadora=1026|transportadora=Domina|logotransportadora={ruta}|logotransportadora2={ruta}|origen=BOGOTA(CUNDINAMARCA)|destino=CALI(VALLE DEL CAUCA)|unidades=1|kilosacobrar=1|pesovolumen=0|valoracion=44950|porvaloracion=0.5|trayecto=Nacional|codtrayecto=96|tipoenvio=Mensajeria|fletexkilo=10820|fletexund=10820|fletetotal=10820|diasentrega=3|flete=10820|costomanejo=0|valortotal=10820|valorotros=1946|grantotal=12766|codmostrartransportadora=1026|topemaximo=0|dscontraentrega=0|alto=0|largo=0|ancho=0",
"bodegaContact": "",
"bodegaId": "",
"bodegaTel": "",
"bodegaDir": "",
"bodegaEmail": "",
"bodega_usuario": "",
"bodega_id": "",
"bodegaOrigen": "",
}
],
}
],
}
}
Errores de Validación
Método no permitido (405)
{
"status": "error",
"message": "Error de solicitud, el método no está permitido."
}
Producto no encontrado (400)
{
"success": false,
"order_id": "",
"messages": "El producto referencia REF-123 no se encuentra en el inventario"
}
Sin inventario disponible (400)
{
"success": false,
"order_id": "",
"messages": "El producto referencia REF-123 no posee unidades disponibles en el inventario."
}
Cantidad insuficiente en inventario (400)
{
"success": false,
"order_id": "",
"messages": "El total de las unidades solicitadas no están disponibles en los inventarios"
}
Bodega no válida (404)
{
"status": "error",
"message": "La bodega con código 12345 no pertenece a la empresa."
}
Pedido duplicado (400)
{
"success": false,
"messages": "Pedido generado previamente con el numero de pedido externo: Orden 16100"
}
Múltiples proveedores en items (400)
{
"success": false,
"order_id": "",
"messages": "No se pueden crear pedidos con productos de diferentes proveedores"
}
Múltiples bodegas en items (400)
{
"success": false,
"order_id": "",
"messages": "No se pueden crear pedidos con productos de diferentes bodegas"
}
Arrays de productos no coinciden (400)
{
"success": false,
"order_id": "",
"messages": "La cantidad de productos no coincide con la cantidad de cantidades"
}
Ciudad de destino inválida (400)
{
"success": false,
"order_id": "",
"messages": "El destino de la orden no es válido. Asegúrese de enviar el formato 'CIUDAD(DEPARTAMENTO)' o en su defecto, el codigo dane de más de 5 dígitos."
}
Ciudad sin cobertura (400)
{
"success": false,
"order_id": "",
"messages": "La ciudad CIUDAD(DEPARTAMENTO) no tiene cobertura"
}
Error al registrar cliente (400)
{
"status": "error",
"message": "Error al registrar el cliente: [detalle del error]"
}
Error al crear pedido (400)
{
"success": false,
"messages": "Error al crear el pedido: [detalle del error SQL]"
}
Error al validar duplicados (400)
{
"status": "error",
"message": "Error en la validación de pedidos duplicados"
}
Error al registrar log (400)
{
"status": "error",
"message": "Error al registrar log del pedido"
}
Falta empresa en request (400)
{
"status": "error",
"message": "Falta el campo empresa en el request"
}
Error después de creación (500)
{
"status": "error",
"message": "Error al crear la orden. Por favor, inténtelo nuevamente."
}
Notas Importantes 📝
- El campo
order_consecse genera automáticamente:{empresa}{random(4)}{timestamp} - Si
recaudo > 0, el campopagadose establece en 2 (no pagado) - Si
revisarCE = 1, no se genera guía hasta confirmar el pedido - El sistema soporta duplicación intencional pero lo registra en logs
- Las ciudades deben enviarse en formato 'CIUDAD(DEPARTAMENTO)' o código DANE
- El peso mínimo es 1 Kg (se ajusta automáticamente)
- Los items pueden enviarse como array
itemso arrays paralelos (legacy) - Se valida inventario en tiempo real antes de crear el pedido
- Las novedades se registran todas, pero el estado final es el de mayor prioridad
- La generación de guía es asíncrona para mejorar performance
- Se envía notificación WhatsApp automática si hay configuración de Línea Estándar
- El método HTTP debe ser POST, de lo contrario retorna error 405
- Todos los totales se redondean automáticamente
- Si hay múltiples novedades, se crean logs separados para cada una