Reten Docs
Audiencias

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ámetroTipoDescripción
idUUIDID 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

CampoTipoDescripción
idstring (UUID)Identificador del criterio.
namestringNombre del criterio.
descriptionstring | nullDescripción; null si no tiene.
typeAudienceCriteriaTypeEnumAUDIENCE | FILTER.
isActivebooleanSi el criterio está activo.
ownerIdstring (UUID)Usuario creador.
updatedBystring (UUID)Último usuario que lo editó.
createdAtstring (ISO 8601)Fecha de creación.
updatedAtstring (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.

CampoTipoDescripción
idstring (UUID)Identificador del bloque.
ordernumberPosición del bloque (ascendente).
setOperatorSetOperatorEnum | nullOperador de conjunto que combina este bloque con el resultado previo; null en el primer bloque.
fromobjectFuente de datos: { table: string, joins: IJoin[] } — tabla base y cruces.
selectobjectSelección: { distinct: boolean, items: ISelectItem[] } — columnas o agregados.
timeWindowobject | nullVentana temporal (unión discriminada por timeOperator); null si no aplica.
whereobjectÁrbol de filtros: grupos AND/OR recursivos con predicados de columna.
groupByIColumnRef[] | nullColumnas de agrupación, o null.
havingobject | nullÁrbol de filtros sobre agregados (misma forma que where, con hojas sobre un agregado), o null.

Donde:

  • fromtable es la tabla base del catálogo; cada elemento de joins es { type: JoinTypeEnum, table: string, on: IJoinPredicate[] }, y cada predicado de join es { left: IColumnRef, right: IColumnRef }. Un IColumnRef es { 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 de timeOperator: ALL_TIME no lleva más campos; IN_THE_LAST / IN_THE_FIRST llevan reference, unit y value; SINCE lleva reference y from; BETWEEN lleva reference, from y to.

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.

CampoTipoDescripción
idstring (UUID)Identificador de la composición.
operandCriteriaIdstring (UUID)Id del audience criteria operando que se combina.
operandCriteriaNamestringNombre del criterio operando ('' si no se resuelve).
setOperatorSetOperatorEnumOperador de conjunto que combina la audiencia operando.

Respuestas de Error

EstadoDescripción
401Falta o es inválido el Authorization: Bearer.
403El usuario no tiene el permiso audience-criteria:view, o el x-tenant-id no está autorizado.
404No existe un audience criteria con ese id en el tenant.