POST
/api/mod/productos/{espacio}/products/Crea un producto
Da de alta un producto en borrador. Si no tiene opciones, se crea también su variante única, con el SKU que des o uno sacado del nombre.
- 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 · JSON
| CAMPO | TIPO | REQUERIDO | QUÉ ES |
|---|---|---|---|
| nombre | string | SÍ | Como lo ve tu cliente. |
| sku | string | no | El SKU de su variante única. Sin él, sale del nombre (cafe-molido-la-loma-500-g). Se ignora si mandas opciones. |
| product_type_id | string | no | Su tipo de producto. Con él, los atributos se validan contra los del tipo. |
| descripcion | string | no | La ficha, en texto libre. También se busca por ella. |
| atributos | object | no | Valores por nombre de atributo: {"Tueste": "medio"}. Los no declarados en el tipo se guardan tal cual. |
| metadata | object | no | Datos tuyos, libres. |
| imagenes | string[] | no | URL de sus imágenes. |
| opciones | [{ nombre, valores }] | no | Sus ejes de variación: [{"nombre": "Molienda", "valores": ["En grano", "Molido"]}]. Con opciones no se crea variante: añade cada una con Crea una variante. |
RESPUESTA 201
El producto, en borrador.
| CAMPO | TIPO | QUÉ ES |
|---|---|---|
| id · nombre | string | El id y el nombre. |
| product_type_id | string | null | Su tipo de producto, si tiene. |
| descripcion | string | null | La ficha en texto libre. |
| estado | "borrador" | "activo" | "archivado" | Ver estados. |
| atributos · metadata | object | Los valores de sus atributos y tus datos libres. |
| imagenes | string[] | Las URL de sus imágenes. |
| opciones[] | { id, nombre, valores } | Sus ejes de variación: "Talla" con ["S", "M", "L"]. Vacío si no tiene. |
| variantes[] | object | Las unidades vendibles, la más antigua primero, con id, product_id, sku, option_values, barcode, activo, external_id y created_at. |
| created_at · updated_at | number | Segundos desde 1970, con decimales. |
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 | product_type_id no es un tipo del espacio | tipo de producto no encontrado: … |
| 400 | Un atributo no cumple su tipo de producto: falta uno requerido, no es un número, no es un sí/no o no está entre sus opciones | atributo requerido ausente: '…' |
| 422 | Falta 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
- Nace en
borradory así no sale en la búsqueda. Para ponerlo a la venta, edítalo con{"estado": "activo"}. - Si el
skuya lo usa otra variante, no da error: la variante se crea con uno sacado del nombre. Miravariantes[0].skuen la respuesta. - La barra final es parte de la ruta: sin ella el módulo no responde con los datos.