POST
/api/mod/productos/{espacio}/inventory/uploadSube el stock desde un archivo
Fija las existencias de muchas variantes de una vez desde un CSV, Excel o PDF. Cada fila se cruza por SKU con el catálogo; no crea productos.
- 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 Productos. |
CUERPO · MULTIPART/FORM-DATA
| CAMPO | TIPO | REQUERIDO | QUÉ ES |
|---|---|---|---|
| file | archivo | SÍ | Un .csv, .xlsx o .pdf con una tabla, hasta 25 MB. Necesita una columna de cantidad y una de SKU: ver la guía. |
RESPUESTA 200
| CAMPO | TIPO | QUÉ ES |
|---|---|---|
| origen | "csv" | "xlsx" | "pdf" | El formato del archivo. |
| sha256 | string | La huella del archivo. |
| items_cargados | integer | Filas aplicadas. |
| no_resueltos[] | { nombre, sku } | Filas cuyo SKU no está en el catálogo (o sin SKU): no se cargaron. |
| incompletos[] | { nombre, sku, warnings } | Filas sin una cantidad legible. |
| warnings | string[] | Avisos del archivo entero. |
ERRORES DE ESTA RUTA · SIEMPRE {"detail": …}
| STATUS | CUÁNDO | DETAIL LITERAL |
|---|---|---|
| 403 | El espacio no tiene el módulo Productos | módulo no habilitado para este espacio. |
| 403 | La clave es de solo lectura | Tu cuenta es de solo lectura en este espacio. |
| 400 | El archivo no trae nada | archivo vacío. |
| 400 | La extensión no es .csv, .xlsx ni .pdf | extensión no soportada para inventario: … |
| 413 | El archivo pasa de 25 MB | archivo demasiado grande (máximo 26214400 bytes). |
| 422 | Falta el campo file (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
- Cada fila fija las existencias (no suma) en su bodega, y no toca lo reservado.
- Excel, en .xlsx: un .xls antiguo no se lee.