Reten Docs
Activity Generation Configs

Atualizar Lifecycle Configs

Atualização in-place de um ou mais pilares de ciclo de vida em uma AGC.

PUT /api/activity-generation-configs/:id/lifecycle

Atualiza um ou mais pilares de ciclo de vida de uma AGC in-place, em uma única transação atômica.

Auth: Obrigatório — permissão activity-generation-config:update

Parâmetros de Rota

ParâmetroTipoDescrição
idUUIDID da activity generation config

Corpo da Requisição

Envie apenas os pilares que deseja atualizar. Cada pilar enviado edita o pilar correspondente da AGC da rota — uma AGC tem exatamente um de cada tipo, então o corpo não o identifica. Dentro de um pilar, envie apenas os campos que deseja alterar (os mesmos de criar); os campos omitidos mantêm o valor atual. Os corpos de requisição são snake_case.

CampoTipoObrigatórioDescrição
activationobjectNãoCampos de ativação a atualizar. Omitir para deixar activation intocado.
engagementobjectNãoCampos de engajamento a atualizar. Omitir para deixar engagement intocado.
resurrectionobjectNãoCampos de ressurreição a atualizar. Omitir para deixar resurrection intocado.

Editar um pilar mantém seu id — o mesmo que você lê em GET /:id.

Reconciliação de filhos (por id)

Cada item filho (um moment / level / threshold) carrega um id opcional. Quando um pilar inclui seu array de filhos (moments / levels / thresholds), os filhos são reconciliados contra as linhas existentes; quando o array é omitido, os filhos ficam intocados:

Filho na requisiçãoEfeito
COM id correspondente a um filho existenteAtualizado in-place (id preservado)
SEM idInserido como um novo filho
Filho existente ausente do arrayExcluído

A operação inteira roda em uma única transação — ou todas as alterações são aplicadas, ou nenhuma é.

Exemplo — atualizar apenas engagement

Editar um nível (mantido por seu id), adicionar um nível novo (sem id) e remover um nível omitindo-o.

curl -X PUT https://api.reten.ai/api/activity-generation-configs/f47ac10b-58cc-4372-a567-0e02b2c3d479/lifecycle \
  -H "Authorization: Bearer <token>" \
  -H "x-tenant-id: <tenant-id>" \
  -H "x-project-id: <project-id>" \
  -H "Content-Type: application/json" \
  -d '{
    "engagement": {
      "name": "Engagement",
      "source_table": "events",
      "source_columns": ["user_id", "event_id"],
      "date_column": "occurred_at",
      "engagement_window_days": 28,
      "min_lifetime_actions_for_engaged": 1,
      "counting_method": "active_days",
      "levels": [
        {
          "id": "6e2d4055-af66-4177-c288-ee99ffaa00bb",
          "status_code": "casual",
          "user_retention_status_config_id": "cc33dd44-ee55-4f66-a077-bb99ccaaddbb",
          "label": "Casual",
          "min_threshold": 1,
          "max_threshold": 9,
          "order": 1
        },
        {
          "status_code": "power",
          "user_retention_status_config_id": "1122aabb-3344-4ccd-9eef-556677889900",
          "label": "Power",
          "min_threshold": 10,
          "order": 2
        }
      ]
    }
  }'
import axios from 'axios';

const id = 'f47ac10b-58cc-4372-a567-0e02b2c3d479';
const body = {
  engagement: {
    name: 'Engagement',
    source_table: 'events',
    source_columns: ['user_id', 'event_id'],
    date_column: 'occurred_at',
    engagement_window_days: 28,
    min_lifetime_actions_for_engaged: 1,
    counting_method: 'active_days',
    levels: [
      {
        id: '6e2d4055-af66-4177-c288-ee99ffaa00bb', // tem id -> atualizado in-place
        status_code: 'casual',
        user_retention_status_config_id: 'cc33dd44-ee55-4f66-a077-bb99ccaaddbb',
        label: 'Casual',
        min_threshold: 1,
        max_threshold: 9,
        order: 1,
      },
      {
        // sem id -> inserido como um novo nível
        status_code: 'power',
        user_retention_status_config_id: '1122aabb-3344-4ccd-9eef-556677889900',
        label: 'Power',
        min_threshold: 10,
        order: 2,
      },
      // o nível anterior "core" foi omitido -> excluído
    ],
  },
  // activation e resurrection são omitidos -> ficam intocados
};

await axios.put(
  `https://api.reten.ai/api/activity-generation-configs/${id}/lifecycle`,
  body,
  { headers: { Authorization: 'Bearer <token>', 'x-tenant-id': '<tenant-id>', 'x-project-id': '<project-id>' } },
);

Neste exemplo: o nível casual é atualizado in-place (seu id é preservado), um novo nível power é inserido, e o nível core anterior — ausente do array — é excluído. activation e resurrection são omitidos, então ficam intocados.

Resposta 200 OK

Corpo vazio. Busque GET /:id depois para ler os pilares atualizados e os configHashes recalculados.

Respostas de Erro

StatusDescrição
400Validação falhou — inclusive um pilar que traz id (o pilar é sempre o da AGC da rota) ou um id de filho que não pertence a esse pilar
404Activity generation config não encontrada