PUT
products:write/api/public/v1/products/{id}Parámetros
idIdentificador del producto.
Body de entrada
PublicProductUpdate
Actualizar producto
Sustituye los campos públicos editables de un producto.
PropiedadTipoDescripción
codeobligatoriostringCódigo único del producto.shortDescriptionobligatoriostringNombre corto visible del producto.descriptionstring | nullDescripción ampliada.unitCodeobligatoriostringSímbolo de la unidad existente en Trowel.purchasePricenumber | nullPrecio de compra de referencia.purchasePriceDatedate-time | nullFecha del precio de compra.salePricenumber | nullPrecio de venta.activebooleanIndica si el producto está activo.concurrencyTokenobligatoriostringToken recibido en la última lectura.Ejemplo JSON
{
"code": "MAT-001",
"shortDescription": "Cemento",
"unitCode": "kg",
"purchasePrice": 0.25,
"purchasePriceDate": "2026-10-10T12:00:00",
"active": true,
"concurrencyToken": "ct_product_example"
}Respuesta
200Producto actualizado.
PublicProduct
Producto
Representación pública de un producto de catálogo.
PropiedadTipoDescripción
idobligatoriouuidIdentificador interno estable.codeobligatoriostringCódigo del producto.shortDescriptionobligatoriostringNombre corto.descriptionstring | nullDescripción ampliada.unitCodestring | nullSímbolo de unidad.purchasePricenumber | nullPrecio de compra de referencia.purchasePriceDatedate-time | nullFecha del precio de compra.salePricenumber | nullPrecio de venta.activeobligatoriobooleanEstado activo.createdAtobligatoriodate-timeFecha de creación.modifiedAtobligatoriodate-timeÚltima modificación.concurrencyTokenobligatoriostringToken opaco para control de concurrencia.Ejemplo JSON
{
"id": "14cc9848-f0c0-4457-9fd1-2b60dd46d6f3",
"code": "MAT-001",
"shortDescription": "Cemento",
"unitCode": "kg",
"purchasePrice": 0.25,
"active": true,
"createdAt": "2026-10-10T12:00:00",
"modifiedAt": "2026-10-10T12:00:00",
"concurrencyToken": "ct_product_example"
}Ejemplo de respuesta
{
"id": "14cc9848-f0c0-4457-9fd1-2b60dd46d6f3",
"code": "MAT-001",
"shortDescription": "Cemento",
"unitCode": "kg",
"purchasePrice": 0.25,
"active": true,
"createdAt": "2026-10-10T12:00:00",
"modifiedAt": "2026-10-10T12:00:00",
"concurrencyToken": "ct_product_example"
}Errores
400Solicitud incorrectaapplication/json401Autenticación inválida o no proporcionadaapplication/json403Permisos insuficientesapplication/json404Recurso no encontradoapplication/json409Conflicto con el estado actualapplication/json410Recurso ya no disponibleapplication/json422Error de validaciónapplication/json429Límite de solicitudes excedidoapplication/jsonVer modelo de error
PublicApiError
Error de API
Formato estable de los errores públicos.
PropiedadTipoDescripción
statusobligatoriointegerCódigo HTTP.codeobligatoriostringCódigo estable para tratamiento automático.messageobligatoriostringMensaje legible.correlationIdobligatoriostringIdentificador para soporte y trazabilidad.currentConcurrencyTokenstring | nullToken actual cuando existe un conflicto.validationErrorsobject<string,string[]>Errores agrupados por campo.Ejemplo JSON
{
"status": 422,
"code": "validation_error",
"message": "The request is invalid.",
"correlationId": "01J9EXAMPLE",
"validationErrors": {
"unitCode": [
"The unit does not exist."
]
}
}