Reten Docs
Filtros de eventos

Filtros de eventos

Selecciona eventos con un query-builder, sin escribir SQL, y genera, valida y previsualiza la consulta resultante.

Descripción general

Un filtro de eventos (event criteria) es un conjunto de eventos seleccionado con un query-builder —tabla → columnas → filtros → ventana temporal → agregaciones— sin escribir SQL a mano.

La definición se arma componiendo:

PiezaQué aporta
Bloques de consultaUno o más bloques; cada bloque parte de una tabla del catálogo de eventos y define sobre ella columnas, filtros, tiempo y agregaciones.
Filtros de columnaCondiciones sobre una columna escalar con un operador de comparación (EQUALS, IN, BETWEEN, …).
Filtros de registroCondiciones sobre una columna RECORD REPEATED (attributes, items): existe al menos un elemento que cumple el sub-filtro.
Filtros de tabla relacionadaCondiciones sobre un semi-join declarado por el catálogo (products): existe al menos un match en la tabla relacionada.
Ventana temporalAcota el bloque a un período de tiempo (IN_THE_LAST 30 DAYS, SINCE, …).
AgregacionesResume columnas del bloque en una métrica (COUNT, SUM, AVG, …).

El árbol completo —con las tres hojas del where y todos sus campos— se documenta una sola vez en Definición; las páginas de endpoint la referencian en vez de repetirla.

Sin columna de identidad

Un filtro de eventos proyecta eventos, no sujetos: no existe una columna de identidad obligatoria y el SQL generado devuelve subjectColumn: null. Es la diferencia estructural con las audiencias, que sí deben exponer su identidad en al menos un bloque.

Endpoints

Base URL y ambientes

Todas las rutas cuelgan del prefijo global /api bajo el recurso /event-criterias (por ejemplo POST /api/event-criterias).

Ambientes de Reten

AmbientePanel de AdminAPI Base URL
Developmentapp-development.reten.aihttps://api-development.reten.ai
Stagingapp-staging.reten.aihttps://api-staging.reten.ai
Productionapp.reten.aihttps://api.reten.ai

Usa la URL del panel de admin para gestionar claves de API y configuraciones de dispatch. Reemplaza BASE_URL en los ejemplos de código con la API Base URL de tu ambiente.

Autenticación

Todos los endpoints requieren un token JWT Bearer más la cabecera x-tenant-id que identifica el tenant sobre cuyo esquema opera la solicitud, y la cabecera x-project-id que identifica el proyecto en el que trabaja la solicitud (ver Autenticación → Contexto de Proyecto).

CabeceraObligatoriaValor
AuthorizationSíBearer <access_token>
x-tenant-idSíUUID del tenant
x-project-idSíUUID del proyecto
-H "Authorization: Bearer <access_token>"
-H "x-tenant-id: <tenant-id>"
-H "x-project-id: <project-id>"

Permisos

Cada ruta exige un permiso específico:

PermisoEndpoints
event-criteria:viewGET /event-criterias, GET /event-criterias/:id, GET /tables, GET /tables/:tableName/columns
event-criteria:createPOST /event-criterias
event-criteria:updatePATCH /event-criterias/:id
event-criteria:deleteDELETE /event-criterias/:id
event-criteria:view-sqlPOST /generate-sql, GET /:id/sql, POST /validate-from-body, POST /preview-from-body, POST /:id/preview

El catálogo (/tables y /tables/:tableName/columns) exige event-criteria:view, el mismo permiso de lectura del recurso: quien puede ver un filtro puede ver con qué se construye.

Códigos de estado

Los endpoints POST de solo lectura (generate-sql, validate-from-body, preview-from-body, :id/preview) responden 201 Created —no 200—, aunque no creen ningún recurso.

Método + rutaCódigoCuerpo de respuesta
POST /event-criterias (crear)201El filtro creado
GET /event-criterias200Lista paginada
GET /event-criterias/:id200El filtro
GET /event-criterias/tables200Tablas del catálogo
GET /tables/:tableName/columns200Columnas y semi-joins de la tabla
PATCH /event-criterias/:id200El filtro actualizado
DELETE /event-criterias/:id204(sin cuerpo)
POST /generate-sql201SQL generado
GET /:id/sql200SQL generado
POST /validate-from-body201Resultado de validación
POST /preview-from-body201Resultado de la muestra
POST /:id/preview201Resultado de la muestra

Formato de error

Los errores de validación, autorización y resolución siguen el formato de error estándar de la API:

{
  "statusCode": 400,
  "message": ["name should not be empty"],
  "error": "Bad Request"
}

En errores de validación de DTO, message es un arreglo de strings (una entrada por regla incumplida). La validación es estricta: se rechazan propiedades no declaradas, así que enviar un campo desconocido produce un 400.

Errores comunes en esta API:

  • 400 Bad Request — definición o DTO inválido (campo faltante, tipo incorrecto, enum fuera de rango, propiedad desconocida), o una regla de negocio incumplida.
  • 401 Unauthorized — falta o es inválido el Authorization: Bearer.
  • 403 Forbidden — el usuario no tiene el permiso requerido, o el x-tenant-id no está autorizado.
  • 404 Not Found — el id solicitado no existe en el tenant (Event criteria not found).

Paginación

El listado envuelve los resultados en PaginatedResponseDto<T>:

{
  "data": [],
  "pagination": {
    "page": 1,
    "per_page": 25,
    "total": 0,
    "total_pages": 0,
    "has_next": false,
    "has_previous": false
  }
}

Los campos dentro de pagination usan snake_case (per_page, total_pages, has_next, has_previous), a diferencia del resto del recurso que usa camelCase.

El detalle de los parámetros de paginación se documenta en Listar.

Glosario de enums

Catálogo de referencia rápida. El campo donde aparece cada uno y su forma exacta están en Definición.

SetOperatorEnum

Combinación de bloques de consulta dentro del mismo filtro (setOperator de un bloque).

  • UNION_DISTINCT · UNION_ALL · INTERSECT_DISTINCT

LogicalOperatorEnum

Encadenamiento de predicados dentro de un grupo del árbol de filtros.

  • AND · OR

ComparisonOperatorEnum

Operador de un predicado sobre una columna o sobre un sub-campo.

  • EQUALS · NOT_EQUALS · GREATER_THAN · LESS_THAN · GREATER_THAN_OR_EQUAL · LESS_THAN_OR_EQUAL · CONTAINS · NOT_CONTAINS · STARTS_WITH · ENDS_WITH · IS_NULL · IS_NOT_NULL · IN · NOT_IN · BETWEEN

AggregationOperatorEnum

Función de agregación sobre un operando (una columna, * o una expresión aritmética).

  • COUNT · SUM · AVG · MIN · MAX

ArithmeticOperatorEnum

Operador de una expresión aritmética dentro del operando de un agregado. SAFE_DIVIDE da NULL cuando el denominador es cero.

  • ADD · SUBTRACT · MULTIPLY · SAFE_DIVIDE

TimeOperatorEnum

Operador de la ventana temporal (timeWindow).

  • ALL_TIME · IN_THE_LAST · IN_THE_FIRST · SINCE · BETWEEN

IN_THE_FIRST no está soportado en este recurso: la ventana "en los primeros N" se ancla al origen de vida de un sujeto, y un filtro de eventos no tiene sujeto. Enviarla responde 400 con timeWindow IN_THE_FIRST is not supported: the catalog does not declare a lifetime origin.

TimeUnitEnum

Unidad de la ventana temporal.

  • DAYS · WEEKS · MONTHS · YEARS

JoinTypeEnum

Tipo de join entre tablas del catálogo.

  • INNER · LEFT · RIGHT · FULL

CatalogFieldTypeEnum

Tipo de dato de una columna escalar del catálogo de eventos. Determina qué operadores de comparación admite.

  • STRING · TIMESTAMP · BOOLEAN · FLOAT64 · INT64 · NUMERIC · BIGNUMERIC

Diferencias con audiencias

Los dos recursos comparten el query-builder, pero no son simétricos. Si llegas desde audiencias, estas son las suposiciones que no se trasladan:

AspectoAudienciasFiltros de eventos
Composición con otros criterioscomposedWithNo existe
Columna de identidadObligatoria en ≥1 bloque; 400 si faltaNo aplica — proyecta eventos, no sujetos
subjectColumn del SQLLa columna de identidadSiempre null
IN_THE_FIRSTSoportado400 — sin sujeto no hay origen de vida que anclar
Validar por idPOST /:id/validateNo existe; solo POST /validate-from-body
Conteos del listadoqueryBlockCount, compositionCountconditionCount — hojas del where de todos los bloques
Catálogo — columnasisIdentity e isDefaultTimeReference por columnaSin ambos; la referencia temporal es de la tabla (defaultTimeReferenceColumn)
Catálogo — semi-joinsNo declaraproducts → product_properties
Hojas del árbol de filtrospredicate, recordPredicatepredicate, recordPredicate, semiJoinPredicate
finalCteName del SQLEl del dominio de audienciasCTE_VALID_EVENTS