Registrar movimiento de stock
Suma (in) o resta (out) stock de un producto o de una de sus variantes (variant_id).
POST /public/v1/inventory/movements
inventory:write · Idempotency-Key obligatorio · InventarioUna salida out es atómica: nunca compromete las últimas unidades que el negocio reserva para sus cajas (el margen de la API, 2 por defecto, se ajusta en cuenta.posdata.so → Inventario → Configuración). Si no alcanza responde 409 INSUFFICIENT_STOCK con available (lo que sí puedes sacar) y no registra nada; con varias peticiones a la vez por la última unidad, solo una gana. Una entrada in no tiene tope y puede declarar su costo (unit_cost), que alimenta el costo promedio de la cuenta. Los productos que se arman con receta y los packs o combos no tienen stock propio (COMPOSITE_STOCK_UNSUPPORTED). Mientras la cuenta no haya pasado al stock en la nube (las cajas aún en una versión anterior), el stock de variantes responde 409 STOCK_MODE_LEGACY. El cambio llega a las cajas del negocio por su sincronización normal (en segundos si están en línea; si están sin conexión, al reconectarse).
Parámetros
Encabezados
Cuerpo de la petición
JSON (Content-Type: application/json): un objeto StockMovementCreate.
Un campo que no esté en la lista se rechaza con VALIDATION_ERROR.
Ejemplo de petición
El cuerpo del ejemplo lleva solo los campos obligatorios, con valores ilustrativos: ajústalos a tus datos.
Respuesta
201 Creado: un objeto StockMovement.
Errores
Todo error responde con un objeto Error y un request_id. Ramifica por error.code, nunca por el mensaje.