Reten Docs
Configuración de Actividades

Configuraciones de Estados de Retencion

Configuracion por tenant de estados de retencion de usuario activos.

El catalogo de cada tenant se siembra desde los codes de estado de retencion por defecto de la plataforma al momento del setup del tenant, y puede re-sincronizarse en cualquier momento desde el dialogo de importacion (que lee GET /api/user-retention-status-configs/defaults). Cada config vive por completo dentro del tenant: se identifica por su code (unico) y lleva el label de visualizacion del tenant — no hay un catalogo global que lo respalde.

GET /api/user-retention-status-configs

Lista todas las configuraciones de estados de retencion del tenant.

Auth: Requerida — permiso VIEW_ACTIVITIES

Ejemplo

curl https://api.reten.ai/api/user-retention-status-configs \
  -H "Authorization: Bearer <token>" \
  -H "x-tenant-id: <tenant-id>"
import axios from 'axios';

const response = await axios.get(
  'https://api.reten.ai/api/user-retention-status-configs',
  {
    headers: {
      Authorization: 'Bearer <token>',
      'x-tenant-id': '<tenant-id>',
    },
  }
);

const configs = response.data;

Respuesta 200 OK

[
  {
    "id": "aa0e8400-e29b-41d4-a716-446655440000",
    "code": "habit",
    "label": "En hábito",
    "isActive": true,
    "createdAt": "2026-06-18T06:00:00.000Z",
    "updatedAt": "2026-06-18T06:00:00.000Z"
  },
  {
    "id": "bb0e8400-e29b-41d4-a716-446655440000",
    "code": "dormant",
    "label": "En riesgo",
    "isActive": true,
    "createdAt": "2026-06-18T06:00:00.000Z",
    "updatedAt": "2026-06-18T06:00:00.000Z"
  }
]

GET /api/user-retention-status-configs/defaults

Devuelve los estados de retencion por defecto de la plataforma como un catalogo plano { code, label }. La app de administracion lo usa para prellenar el dialogo de importacion con los estados que un tenant puede adoptar.

Auth: Requerida — permiso VIEW_ACTIVITIES

Este endpoint es prellenado, no una entidad. El payload es el catalogo de defaults hardcodeado — no autoritativo y NO se persiste — y siempre lista todos los defaults sin importar lo que el tenant ya tenga. Para adoptarlos, el admin elige los que aun faltan y los crea via POST /api/user-retention-status-configs/bulk. Llamar a este endpoint no crea nada.

Ejemplo

curl https://api.reten.ai/api/user-retention-status-configs/defaults \
  -H "Authorization: Bearer <token>" \
  -H "x-tenant-id: <tenant-id>"
import axios from 'axios';

const response = await axios.get(
  'https://api.reten.ai/api/user-retention-status-configs/defaults',
  {
    headers: {
      Authorization: 'Bearer <token>',
      'x-tenant-id': '<tenant-id>',
    },
  }
);

const defaults = response.data;

Respuesta 200 OK

[
  {
    "code": "sign_up",
    "label": "Registrado"
  },
  {
    "code": "habit",
    "label": "En hábito"
  }
]

POST /api/user-retention-status-configs

Crea una configuracion de estado de retencion para el tenant.

Auth: Requerida — permiso MANAGE_ACTIVITY_CONFIG

Cuerpo de la Solicitud

CampoTipoRequeridoDescripcion
codestringSiCodigo canonico del estado de retencion (del catalogo)
labelstringSiEtiqueta de visualizacion para este tenant

Ejemplo

curl -X POST https://api.reten.ai/api/user-retention-status-configs \
  -H "Authorization: Bearer <token>" \
  -H "x-tenant-id: <tenant-id>" \
  -H "Content-Type: application/json" \
  -d '{
    "code": "habit",
    "label": "En hábito"
  }'
import axios from 'axios';

const response = await axios.post(
  'https://api.reten.ai/api/user-retention-status-configs',
  {
    code: 'habit',
    label: 'En hábito',
  },
  {
    headers: {
      Authorization: 'Bearer <token>',
      'x-tenant-id': '<tenant-id>',
    },
  }
);

Respuesta 201 Created


POST /api/user-retention-status-configs/bulk

Creacion masiva de configuraciones de estados de retencion del tenant.

Auth: Requerida — permiso MANAGE_ACTIVITY_CONFIG

Cuerpo de la Solicitud

CampoTipoRequeridoDescripcion
itemsarraySiArray de configuraciones a crear
items[].codestringSiCodigo canonico del estado de retencion (del catalogo)
items[].labelstringSiEtiqueta de visualizacion para este tenant

Ejemplo

curl -X POST https://api.reten.ai/api/user-retention-status-configs/bulk \
  -H "Authorization: Bearer <token>" \
  -H "x-tenant-id: <tenant-id>" \
  -H "Content-Type: application/json" \
  -d '{
    "items": [
      {
        "code": "habit",
        "label": "En hábito"
      },
      {
        "code": "dormant",
        "label": "En riesgo"
      }
    ]
  }'
import axios from 'axios';

const response = await axios.post(
  'https://api.reten.ai/api/user-retention-status-configs/bulk',
  {
    items: [
      {
        code: 'habit',
        label: 'En hábito',
      },
      {
        code: 'dormant',
        label: 'En riesgo',
      },
    ],
  },
  {
    headers: {
      Authorization: 'Bearer <token>',
      'x-tenant-id': '<tenant-id>',
    },
  }
);

Respuesta 201 Created


PATCH /api/user-retention-status-configs/:id

Actualiza una configuracion de estado de retencion del tenant.

Auth: Requerida — permiso MANAGE_ACTIVITY_CONFIG

Cuerpo de la Solicitud

CampoTipoRequeridoDescripcion
labelstringNoEtiqueta de visualizacion
is_activebooleanNoHabilitar o deshabilitar esta configuracion

Ejemplo

curl -X PATCH https://api.reten.ai/api/user-retention-status-configs/<id> \
  -H "Authorization: Bearer <token>" \
  -H "x-tenant-id: <tenant-id>" \
  -H "Content-Type: application/json" \
  -d '{
    "label": "Etiqueta Actualizada"
  }'
import axios from 'axios';

const response = await axios.patch(
  'https://api.reten.ai/api/user-retention-status-configs/<id>',
  {
    label: 'Etiqueta Actualizada',
  },
  {
    headers: {
      Authorization: 'Bearer <token>',
      'x-tenant-id': '<tenant-id>',
    },
  }
);

Respuesta 200 OK


DELETE /api/user-retention-status-configs/:id

Desactiva una configuracion de estado de retencion del tenant.

Auth: Requerida — permiso MANAGE_ACTIVITY_CONFIG

Ejemplo

curl -X DELETE https://api.reten.ai/api/user-retention-status-configs/<id> \
  -H "Authorization: Bearer <token>" \
  -H "x-tenant-id: <tenant-id>"
import axios from 'axios';

const response = await axios.delete(
  'https://api.reten.ai/api/user-retention-status-configs/<id>',
  {
    headers: {
      Authorization: 'Bearer <token>',
      'x-tenant-id': '<tenant-id>',
    },
  }
);

Respuesta 204 No Content