GET
products:read/api/public/v1/productsParámetros
limitNúmero máximo de elementos por página. Por defecto 50, máximo 200.
cursorCursor opaco para continuar desde la respuesta anterior.
modifiedSinceIncluye registros creados o modificados después de esta fecha, interpretada en el timezone del tenant.
sortOrden de los resultados. Antepón - para orden descendente.
code-codeshortDescription-shortDescriptionpurchasePrice-purchasePricesalePrice-salePricecreatedAt-createdAtmodifiedAt-modifiedAtcodeCódigo exacto.
activeFiltra por estado activo.
unitCodeSímbolo de unidad.
searchBúsqueda textual.
Respuesta
200Página de productos.
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
{
"items": [
{
"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"
}
],
"nextCursor": "eyJ2ZXJzaW9uIjoxLCJvZmZzZXQiOjUwfQ",
"hasMore": true
}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."
]
}
}