Reten Docs
Audiencias

Audiencias

Construye segmentos de usuarios/comercios con un query-builder, sin escribir SQL, y genera, valida y previsualiza la consulta resultante.

Descripción general

Un Audience Criteria es un segmento de usuarios o comercios definido con un query-builder —tabla → columnas → filtros → joins → agregaciones → combinación de bloques y audiencias— 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 y define sobre ella columnas, filtros, tiempo, cruces y agregaciones.
FiltrosCondiciones por columna con un operador de comparación (EQUALS, IN, BETWEEN, …).
Ventana temporalAcota el bloque a un período de tiempo (IN_THE_LAST 30 DAYS, SINCE, …).
Cruces (joins)Une el bloque con otras tablas del catálogo (INNER, LEFT, …).
AgregacionesResume columnas del bloque en una métrica (COUNT, SUM, AVG, …).
ComposicionesCombina varios bloques y otras audiencias con operadores de conjunto (UNION_DISTINCT, …).

AUDIENCE vs FILTER

El campo type distingue dos usos del mismo recurso (enum AudienceCriteriaTypeEnum):

  • AUDIENCE — un segmento con identidad propia, pensado para reutilizarse y combinarse con otras audiencias.
  • FILTER — un criterio auxiliar que refina o restringe, típicamente embebido dentro de otra configuración.

Ambos comparten exactamente la misma estructura de definición; solo cambia la intención de uso.

Endpoints

Base URL y ambientes

Todas las rutas cuelgan del prefijo global /api bajo el recurso /audience-criterias (por ejemplo POST /api/audience-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.

CabeceraObligatoriaValor
AuthorizationBearer <access_token>
x-tenant-idUUID del tenant
-H "Authorization: Bearer <access_token>"
-H "x-tenant-id: <tenant-id>"

Permisos

Cada ruta exige un permiso específico vía el decorador @Auth(...):

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

Códigos de estado

Los endpoints POST de solo lectura (generate-sql, validate-*, preview-*) no declaran un código explícito, por lo que NestJS responde 201 Created por defecto —no 200—, aunque no creen ningún recurso.

Método + rutaCódigoCuerpo de respuesta
POST /audience-criterias (crear)201El criterio creado
GET /audience-criterias200Lista paginada
GET /audience-criterias/:id200El criterio
PATCH /audience-criterias/:id200El criterio actualizado
DELETE /audience-criterias/:id204(sin cuerpo)
POST /generate-sql201SQL generado
GET /:id/sql200SQL generado
POST /validate-from-body201Resultado de validación
POST /:id/validate201Resultado de validación
POST /preview-from-body201Resultado de la muestra
POST /:id/preview201Resultado de la muestra

Formato de error

Los errores siguen el formato por defecto de NestJS:

{
  "statusCode": 400,
  "message": ["type must be one of the following values: AUDIENCE, FILTER"],
  "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).
  • 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.

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 (page, per_page, filtros) se documenta en Listar.

Glosario de enums

Catálogo de referencia rápida. Cada página de endpoint vuelve a listar los valores válidos junto al campo donde aparecen.

AudienceCriteriaTypeEnum

Tipo del criterio (campo type).

  • AUDIENCE · FILTER

SetOperatorEnum

Combinación de bloques/audiencias en composedWith.

  • UNION_DISTINCT · UNION_ALL · INTERSECT_DISTINCT

LogicalOperatorEnum

Encadenamiento de predicados dentro de un grupo.

  • AND · OR

ComparisonOperatorEnum

Operador de un predicado sobre una columna.

  • 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 una columna.

  • COUNT · SUM · AVG · MIN · MAX

TimeOperatorEnum

Operador de la ventana temporal (timeWindow).

  • ALL_TIME · IN_THE_LAST · IN_THE_FIRST · SINCE · BETWEEN

TimeUnitEnum

Unidad de la ventana temporal.

  • DAYS · WEEKS · MONTHS · YEARS

JoinTypeEnum

Tipo de join entre tablas del catálogo.

  • INNER · LEFT · RIGHT · FULL

AudienceFieldTypeEnum

Tipo de dato de un campo del catálogo de audiencias.

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

Forma del valor según el operador de comparación

La forma que toma value depende del comparisonOperator del predicado:

OperadoresForma de valueEjemplo
IS_NULL, IS_NOT_NULLSin valor (NONE)(se omite)
IN, NOT_INLista no vacía (LIST)["a", "b", "c"]
BETWEENPar ordenado (RANGE)[10, 20]
El resto (EQUALS, GREATER_THAN, CONTAINS, …)Escalar único (SINGLE)"activo" · 42