Reten Docs
Configuração de Ciclo de Vida

Valores Padrão de Ciclo de Vida

Valores padrão da plataforma para pré-preencher o assistente de criação do AGC.

GET /api/lifecycle-defaults

Retorna os três pilares de ciclo de vida pré-preenchidos com valores padrão da plataforma, resolvidos em relação ao catálogo de status de retenção do tenant.

Auth: Obrigatória — permissão activity-generation-config:view

Este endpoint é pré-preenchimento para o assistente de criação do AGC, não uma entidade. O payload não é autoritativo e NÃO é persistido — o admin edita esses valores padrão e os envia via POST /api/activity-generation-configs. Nada é criado ao chamar este endpoint.

Exceção de serialização: ao contrário dos três recursos de pilar (que respondem em camelCase), esta resposta é snake_case (ex.: source_table, min_lifetime_actions_for_engaged, status_code) porque é um payload de valores padrão fixo (hardcoded), não uma entidade serializada.

O que retorna

  • Cada pilar (activation, engagement, resurrection) vem com configurações escalares padrão e um conjunto padrão de itens (momentos / níveis / limiares).
  • Cada item é resolvido em relação ao catálogo de status de retenção do tenant, portanto carrega status_code, user_retention_status_config_id e label.
  • Os campos de fonte de ativação (source_table, source_columns, date_column) são null por design — o admin os preenche no assistente.

Exemplo

curl https://api.reten.ai/api/lifecycle-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/lifecycle-defaults', {
  headers: {
    Authorization: 'Bearer <token>',
    'x-tenant-id': '<tenant-id>',
  },
});

const defaults = response.data;

Resposta 200 OK

{
  "activation": {
    "aggregation_method": "count",
    "source_table": null,
    "source_columns": null,
    "date_column": null,
    "moments": [
      {
        "status_code": "aha",
        "user_retention_status_config_id": "rs222222-2222-2222-2222-222222222222",
        "label": "Aha",
        "min_actions": 1,
        "window_days": 7,
        "priority": 0
      }
    ]
  },
  "engagement": {
    "engagement_window_days": 28,
    "counting_method": "active_days",
    "min_lifetime_actions_for_engaged": 1,
    "levels": [
      {
        "status_code": "habit",
        "user_retention_status_config_id": "rs444444-4444-4444-4444-444444444444",
        "label": "En hábito",
        "min_threshold": 8,
        "max_threshold": null,
        "order": 0
      }
    ]
  },
  "resurrection": {
    "thresholds": [
      {
        "status_code": "dormant",
        "user_retention_status_config_id": "rs555555-5555-5555-5555-555555555555",
        "label": "En riesgo",
        "threshold_days": 30,
        "order": 0
      }
    ]
  }
}

Os nomes de campo dentro de cada item são snake_case aqui (status_code, min_actions, window_days, min_threshold, max_threshold, threshold_days, order). Quando o admin envia o assistente, esses campos mapeiam para o corpo da requisição em snake_case de POST /api/activity-generation-configs.