Obtener filtro de eventos
Obtiene un filtro de eventos por id, con su definición completa — los bloques de consulta anidados.
GET /api/event-criterias/:id
Devuelve un único filtro de eventos con su definición completa: los datos base del
recurso más el árbol anidado de bloques de consulta (queryBlocks).
Auth: Requerida — permiso event-criteria:view
Parámetros de ruta
| Parámetro | Tipo | Descripción |
|---|---|---|
id | UUID | ID del filtro de eventos. |
Parámetros de consulta
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
format | string | detail | Representación pedida: detail | compute. Omitirlo equivale a detail. |
Esta página documenta la rama detail. La rama compute devuelve otra forma y se
documenta en Formato compute.
Cualquier otro valor de format responde 400.
Ejemplo
curl https://api.reten.ai/api/event-criterias/6d2a9c41-7e35-48b0-b1c9-0f8e7d6c5b4a \
-H "Authorization: Bearer <token>" \
-H "x-tenant-id: <tenant-id>" \
-H "x-project-id: <project-id>"import axios from 'axios';
const id = '6d2a9c41-7e35-48b0-b1c9-0f8e7d6c5b4a';
const response = await axios.get(
`https://api.reten.ai/api/event-criterias/${id}`,
{ headers: { Authorization: 'Bearer <token>', 'x-tenant-id': '<tenant-id>', 'x-project-id': '<project-id>' } },
);
const criteria = response.data;Respuesta 200 OK
El recurso base más queryBlocks, ordenados por order ascendente. Todos los campos usan
camelCase; los instantes se serializan a ISO 8601.
{
"id": "6d2a9c41-7e35-48b0-b1c9-0f8e7d6c5b4a",
"projectId": "3f6c2b1a-8d4e-4f7a-9b2c-5e1d0a7f6c34",
"name": "Proyecto Food Service",
"description": "Ventas facturadas con al menos una línea de categoría Food Service u HORECA",
"isActive": true,
"ownerId": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"updatedBy": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"createdAt": "2026-07-15T14:32:07.481Z",
"updatedAt": "2026-07-15T14:32:07.481Z",
"queryBlocks": [
{
"id": "b7c1d2e3-4f50-4a61-8b72-9c8d7e6f5a40",
"order": 0,
"setOperator": null,
"from": { "table": "event_transactions", "joins": [] },
"select": {
"distinct": true,
"items": [
{
"kind": "column",
"column": { "table": "event_transactions", "column": "event_id" }
}
]
},
"timeWindow": null,
"where": {
"kind": "group",
"logicalOperator": "AND",
"children": [
{
"kind": "predicate",
"column": { "table": "event_transactions", "column": "status" },
"comparisonOperator": "EQUALS",
"value": "Facturada"
},
{
"kind": "semiJoinPredicate",
"table": "event_transactions",
"semiJoin": "products",
"subWhere": {
"kind": "group",
"logicalOperator": "AND",
"children": [
{
"kind": "predicate",
"field": "categorization.category_name",
"comparisonOperator": "IN",
"value": ["Food Service", "HORECA"]
}
]
}
}
]
},
"groupBy": null,
"having": null
}
]
}Campos base
| Campo | Tipo | Descripción |
|---|---|---|
id | string (UUID) | Identificador del filtro. |
projectId | string (UUID) | Proyecto al que pertenece el filtro. |
name | string | Nombre del filtro. |
description | string | null | Descripción; null si no tiene. |
isActive | boolean | Siempre true: ningún endpoint lo modifica. |
ownerId | string (UUID) | Usuario creador. |
updatedBy | string (UUID) | Último usuario que lo editó. |
createdAt | string (ISO 8601) | Fecha de creación. |
updatedAt | string (ISO 8601) | Fecha de última actualización. |
La respuesta no trae compositions: un filtro de eventos no se compone con otros
filtros.
queryBlocks[]
Arreglo de bloques de consulta, ordenados por order ascendente. Cada bloque se
devuelve tal como se envió, más su id resuelto.
| Campo | Tipo | Descripción |
|---|---|---|
id | string (UUID) | Identificador del bloque. |
order | number | Posición del bloque (ascendente). |
setOperator | SetOperatorEnum | null | Operador de conjunto que lo combina con el bloque previo; null en el primero. |
from | object | { table, joins } — tabla base y cruces. |
select | object | { distinct, items } — columnas o agregados. |
timeWindow | object | null | Ventana temporal (unión discriminada por timeOperator); null si no se envió. |
where | object | Árbol de filtros; grupos AND/OR con hojas de columna, de registro y de tabla relacionada. |
groupBy | array | null | Columnas de agrupación, o null. |
having | object | null | Árbol de filtros sobre agregados, o null. |
Los campos opcionales que no se enviaron se devuelven como null (setOperator,
timeWindow, groupBy, having), y from.joins como [] si no había joins.
La estructura completa de cada campo —incluidas las tres hojas del where y la forma de
value por operador— está en
Definición.
Respuestas de error
| Estado | Descripción |
|---|---|
400 | El id no es un UUID válido, o format no es detail ni compute. |
401 | Falta o es inválido el Authorization: Bearer. |
403 | El usuario no tiene el permiso event-criteria:view, o el x-tenant-id no está autorizado. |
404 | No existe un filtro de eventos con ese id en el tenant (Event criteria not found). |