Saltar al contenido
API v1 · https://bentho.org/api
POST/api/mod/productos/{espacio}/inventory/sale

Confirma una venta

Descuenta del stock lo vendido, todo de una vez. Con sale_ref, repetirla no descuenta dos veces. Si declaras las promociones usadas, cuentan para sus límites.

  • 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
linesarraySÍUna por producto vendido: ver lines[].
sale_refstringnoTu id del pedido. Con él, un reintento devuelve el resultado guardado.
promociones_aplicadas[{ promotion_id, descuento }]noLas promociones de la cotización y lo que descontó cada una: suman un uso y gastan de su campaña.
session_idstringnoTu referencia del carrito.
push_contablebooleannoEnviar el descuento a tu software contable, en las variantes con external_id. Por defecto true.

RESPUESTA 200

CAMPOTIPOQUÉ ES
status"ok" | "pending"pending: la misma venta se está procesando ahora.
confirmados[]{ variant_id, bodega, cantidad, restante, external_id }Lo descontado y cuánto quedó. Un combo sale como sus componentes.
no_encontrados[]{ variant_id, sku?, motivo? }Líneas sin descontar: la variante no existe o no tiene stock cargado, o motivo: "cantidad_invalida".
contableobject | nullLo que respondió tu software contable al enviarle el descuento. null si no había nada que enviar.
idempotent_replaytrueSolo en un reintento con el mismo sale_ref: es el resultado guardado.

LINES[]

CAMPOTIPOQUÉ ES
variant_id · skustringLa variante, por id o por SKU.
cantidadnumber | stringCuántas. Por defecto 1.
bodegastringPor defecto, la única.
reservation_idstringLa reserva que esta línea consume, si la hiciste.

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.
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 comprueba que haya stock: descuenta lo vendido y deja las existencias en 0 como mínimo. Comprueba antes con disponibilidad o reserva.
  • Un fallo de tu software contable no hace fallar la venta: queda en contable.
  • Las promociones solo cuentan usos aquí, no al cotizar. Sin promociones_aplicadas, limite_usos y las campañas no avanzan.
  • 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.