POST
/api/mod/ventas/{espacio}/inventory/saleRegistra una venta confirmada
Descuenta del inventario lo que se vendió fuera del chat (tu tienda, tu caja). Con una referencia de venta, un reintento no descuenta dos veces.
- PERMISOescribe
- CRÉDITOSno gasta
- AUTENTICACIÓNBearer bth_…
PARÁMETROS
| CAMPO | TIPO | REQUERIDO | QUÉ ES |
|---|---|---|---|
| espacio | string | SÍ | El id del espacio (sale en GET /api/companies). Tiene que tener el módulo Ventas. |
CUERPO · JSON
| CAMPO | TIPO | REQUERIDO | QUÉ ES |
|---|---|---|---|
| lines | [{ sku, cantidad }] | SÍ | Lo vendido. cantidad, texto decimal; por defecto "1". |
| sale_ref | string | no | Tu número de venta o de pedido. Con la misma referencia, la segunda llamada devuelve el resultado de la primera sin descontar. |
| session_id | string | no | La conversación de la que salió la venta, si la hubo. |
RESPUESTA 200
Con el inventario propio de Ventas:
| CAMPO | TIPO | QUÉ ES |
|---|---|---|
| confirmados | [{ sku, cantidad, restante, external_id }] | Lo que se descontó y lo que queda. |
| no_encontrados | string[] | SKU que no están en el inventario: no se descontó nada de ellos. |
| alegra | object | null | Si el espacio tiene conectada su contabilidad Alegra con escritura activada, el resultado de descontarlo allí; si no, pushed: false y el motivo. |
| status | "ok" | Hecho. |
| idempotent_replay | true | Solo si esa sale_ref ya se había registrado: es el resultado de entonces. |
ERRORES DE ESTA RUTA · SIEMPRE {"detail": …}
| STATUS | CUÁNDO | DETAIL LITERAL |
|---|---|---|
| 403 | El espacio no tiene el módulo Ventas | módulo no habilitado para este espacio. |
| 403 | La clave es de solo lectura | Tu cuenta es de solo lectura en este espacio. |
| 400 | lines viene vacío | sin líneas de venta. |
| 422 | Falta un campo obligatorio o uno no es de su tipo (detail es una lista) | — |
| 502 | Con el inventario en Productos: Productos no respondió | Productos: … |
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
- Las ventas que cierra el agente ya descuentan solas al confirmarse el pago: no las registres otra vez.
- Con el stock en Productos (
inventario_delegado), la venta la registra Productos y la respuesta es la suya. - Las cantidades y los importes van como texto decimal (
"12","2.5"), no como número: un número da 422.