Obtener Audiencia
Obtiene un audience criteria por id, con su definición completa — bloques de consulta y composiciones anidadas.
GET /api/audience-criterias/:id
Devuelve un único audience criteria con su definición completa: los datos base
del recurso más el árbol anidado de bloques de consulta (queryBlocks) y
composiciones (compositions).
Auth: Requerida — permiso audience-criteria:view
Parámetros de Ruta
| Parámetro | Tipo | Descripción |
|---|---|---|
id | UUID | ID del audience criteria. |
Ejemplo
curl https://api.reten.ai/api/audience-criterias/f47ac10b-58cc-4372-a567-0e02b2c3d479 \
-H "Authorization: Bearer <token>" \
-H "x-tenant-id: <tenant-id>"import axios from 'axios';
const id = 'f47ac10b-58cc-4372-a567-0e02b2c3d479';
const response = await axios.get(
`https://api.reten.ai/api/audience-criterias/${id}`,
{ headers: { Authorization: 'Bearer <token>', 'x-tenant-id': '<tenant-id>' } },
);
const criteria = response.data;Respuesta 200 OK
La respuesta es el recurso base más queryBlocks (ordenados por order
ascendente) y compositions. Todos los campos usan camelCase; los instantes
se serializan a ISO 8601.
{
"id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"name": "Clientes activos últimos 30 días",
"description": "Usuarios con al menos una compra pagada en el último mes",
"type": "AUDIENCE",
"isActive": true,
"ownerId": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"updatedBy": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"createdAt": "2026-06-10T14:00:00.000Z",
"updatedAt": "2026-06-15T09:30:00.000Z",
"queryBlocks": [
{
"id": "2a8f0c11-6b22-4d33-8e44-aa55bb66cc77",
"order": 0,
"setOperator": null,
"from": {
"table": "orders",
"joins": [
{
"type": "INNER",
"table": "users",
"on": [
{
"left": { "table": "orders", "column": "user_id" },
"right": { "table": "users", "column": "id" }
}
]
}
]
},
"select": {
"distinct": true,
"items": [
{
"kind": "column",
"column": { "table": "users", "column": "id" },
"alias": "user_id"
}
]
},
"timeWindow": {
"timeOperator": "IN_THE_LAST",
"reference": { "table": "orders", "column": "created_at" },
"unit": "DAYS",
"value": 30
},
"where": {
"kind": "group",
"logicalOperator": "AND",
"children": [
{
"kind": "predicate",
"column": { "table": "orders", "column": "status" },
"comparisonOperator": "EQUALS",
"value": "paid"
}
]
},
"groupBy": null,
"having": null
},
{
"id": "5d1c3f44-9e55-4066-b177-dd88ee99ffaa",
"order": 1,
"setOperator": "UNION_DISTINCT",
"from": { "table": "subscriptions", "joins": [] },
"select": {
"distinct": true,
"items": [
{
"kind": "column",
"column": { "table": "subscriptions", "column": "user_id" },
"alias": "user_id"
}
]
},
"timeWindow": { "timeOperator": "ALL_TIME" },
"where": {
"kind": "group",
"logicalOperator": "AND",
"children": [
{
"kind": "predicate",
"column": { "table": "subscriptions", "column": "plan" },
"comparisonOperator": "IN",
"value": ["pro", "enterprise"]
}
]
},
"groupBy": null,
"having": null
}
],
"compositions": [
{
"id": "8a4f6277-c188-4399-e400-aa00bb11ccdd",
"operandCriteriaId": "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d",
"operandCriteriaName": "Clientes VIP",
"setOperator": "INTERSECT_DISTINCT"
}
]
}Campos base
| Campo | Tipo | Descripción |
|---|---|---|
id | string (UUID) | Identificador del criterio. |
name | string | Nombre del criterio. |
description | string | null | Descripción; null si no tiene. |
type | AudienceCriteriaTypeEnum | AUDIENCE | FILTER. |
isActive | boolean | Si el criterio está activo. |
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. |
queryBlocks[]
Arreglo de bloques de consulta, ordenados por order ascendente. Cada bloque
describe una consulta (tabla, columnas, filtros, tiempo, cruces y agregaciones)
que luego se combina con los demás mediante setOperator.
| Campo | Tipo | Descripción |
|---|---|---|
id | string (UUID) | Identificador del bloque. |
order | number | Posición del bloque (ascendente). |
setOperator | SetOperatorEnum | null | Operador de conjunto que combina este bloque con el resultado previo; null en el primer bloque. |
from | object | Fuente de datos: { table: string, joins: IJoin[] } — tabla base y cruces. |
select | object | Selección: { distinct: boolean, items: ISelectItem[] } — columnas o agregados. |
timeWindow | object | null | Ventana temporal (unión discriminada por timeOperator); null si no aplica. |
where | object | Árbol de filtros: grupos AND/OR recursivos con predicados de columna. |
groupBy | IColumnRef[] | null | Columnas de agrupación, o null. |
having | object | null | Árbol de filtros sobre agregados (misma forma que where, con hojas sobre un agregado), o null. |
Donde:
from—tablees la tabla base del catálogo; cada elemento dejoinses{ type: JoinTypeEnum, table: string, on: IJoinPredicate[] }, y cada predicado de join es{ left: IColumnRef, right: IColumnRef }. UnIColumnRefes{ table: string, column: string }.select.items— cada item es una columna ({ kind: "column", column: IColumnRef, alias?: string }) o un agregado ({ kind: "aggregate", aggregate: IAggregate, alias: string }).timeWindow— su forma depende detimeOperator:ALL_TIMEno lleva más campos;IN_THE_LAST/IN_THE_FIRSTllevanreference,unityvalue;SINCEllevareferenceyfrom;BETWEENllevareference,fromyto.
La estructura completa del árbol de filtros (where / having), de la
selección y de la ventana temporal se documenta en detalle en
Crear y
Generar SQL. Los valores de
cada enum están en el glosario de la sección.
compositions[]
Arreglo de composiciones: otras audiencias combinadas con esta mediante un operador de conjunto.
| Campo | Tipo | Descripción |
|---|---|---|
id | string (UUID) | Identificador de la composición. |
operandCriteriaId | string (UUID) | Id del audience criteria operando que se combina. |
operandCriteriaName | string | Nombre del criterio operando ('' si no se resuelve). |
setOperator | SetOperatorEnum | Operador de conjunto que combina la audiencia operando. |
Respuestas de Error
| Estado | Descripción |
|---|---|
401 | Falta o es inválido el Authorization: Bearer. |
403 | El usuario no tiene el permiso audience-criteria:view, o el x-tenant-id no está autorizado. |
404 | No existe un audience criteria con ese id en el tenant. |
Listar Audiencias
Lista paginada de audience criterias del tenant, con filtros por tipo y búsqueda por nombre — solo resumen, sin el árbol de definición.
Crear Audience Criteria
Crea un criterio de audiencia a partir de su definición completa (bloques de consulta, filtros, ventana temporal, agregaciones y composiciones).