Saltar al contenido
API v1 · https://bentho.org/api
POST/api/mod/productos/{espacio}/price-quote

Cotiza un carrito

Le das las variantes y cantidades; te devuelve el precio de cada línea, las promociones que aplican, el total y una huella de los datos usados. Las cifras salen siempre de aquí, nunca estimadas.

  • PERMISOescribe
  • CRÉDITOSno gasta
  • AUTENTICACIÓNBearer bth_…

PARÁMETROS

CAMPOTIPOREQUERIDOQUÉ ES
espaciostringSÍEl id del espacio (sale en GET /api/companies). Tiene que tener el módulo Productos.

CUERPO · JSON

CAMPOTIPOREQUERIDOQUÉ ES
lineas[{ variant_id, cantidad }]SÍAl menos una. cantidad, por defecto 1.
monedastringnoSolo cotizan los precios en esta moneda. Por defecto "COP".
fechastringnoPara qué momento, en ISO 8601. Por defecto, ahora.
codigos_promostring[]noLos códigos que escribió tu cliente.
canalstringnoPor dónde compra, para las promociones que lo miran. Por defecto "chat".

RESPUESTA 200

CAMPOTIPOQUÉ ES
lineas[].variant_id · skustringLa variante cotizada.
lineas[].nombrestringEl nombre de su producto.
lineas[].cantidadstringLa cantidad.
lineas[].precio_unitariostringEl precio que ganó.
lineas[].adjustments[]{ promotion_id, regla, target, monto }Cada descuento de la línea: la promoción, su nombre, item u order, y el importe en negativo.
lineas[].total_lineastringprecio_unitario × cantidad, menos sus descuentos.
subtotalstringLa suma antes de descuentos.
descuento_totalstringLo descontado, en positivo.
totalstringLo que se cobra. Nunca menos de 0.
monedastringLa de la cotización.
catalog_versionstringHuella de los precios, promociones y catálogo usados. Dos cotizaciones con la misma salieron de los mismos datos.
no_cotizadosstring[]Los variant_id que no se pudieron cotizar: no existen, no tienen precio vigente en esa moneda o la cantidad no es mayor que 0.

ERRORES DE ESTA RUTA · SIEMPRE {"detail": …}

STATUSCUÁNDODETAIL LITERAL
403El espacio no tiene el módulo Productosmódulo no habilitado para este espacio.
403La clave es de solo lecturaTu cuenta es de solo lectura en este espacio.
400lineas viene vacíael carrito no tiene líneas.
422Falta un campo obligatorio o uno no es de su tipo (detail es una lista)—

Y los de cualquier ruta —clave inválida, cuenta no al día, IP, límites—, en Errores, límites y créditos.

CONVIENE SABER

  • No cambia nada ni gasta usos de las promociones, pero es un POST: pide clave escribe.
  • Una línea sin precio no se cobra a 0: sale en no_cotizados y no suma al total.
  • Guarda catalog_version con el pedido: dice con qué precios se cotizó.
  • Las cantidades y los importes viajan como texto decimal ("32000", "1.5") para no perder precisión. Al mandarlos vale un número o un texto.