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, …).
Filtros de registroCondiciones sobre los elementos de una columna RECORD REPEATED (attributes): existe al menos un elemento que cumple el sub-filtro.
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, …).

Columna de identidad

Toda audience criteria es un segmento con identidad propia: al menos uno de sus bloques de consulta debe proyectar la columna de identidad de la tabla base (por ejemplo user_id). La regla es incondicional — una definición que no la expone se rechaza con 400.

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, 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
audience-criteria:viewGET /audience-criterias, GET /audience-criterias/:id, GET /tables, GET /tables/:tableName/columns
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-*) responden 201 Created —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
GET /tables200Tablas del catálogo
GET /tables/:tableName/columns200Columnas del catálogo
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 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).
  • 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 proyecto activo.

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.

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 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

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 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