Reten Docs
Activity Generation Configs

Atualizar Activity Generation Config

Atualiza somente os metadados da activity generation config.

PATCH /api/activity-generation-configs/:id

Atualiza somente os metadados de uma AGC. Este endpoint nunca toca os pilares de ciclo de vida — para alterar activation, engagement ou resurrection, use PUT /:id/lifecycle.

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

Todos os campos são opcionais; apenas os campos enviados são atualizados. Os corpos de requisição são snake_case.

CampoTipoObrigatórioDescrição
namestringNãoNome da config; não pode ser vazio
descriptionstringNãoDescrição em texto livre
audience_idUUID | nullNãoAudiência própria da AGC; null a remove (veja abaixo)

audience_id funciona assim:

  • omitido — a AGC mantém sua audiência atual;
  • um id de audiência — deve ser uma audiência do projeto ativo; caso contrário, a API responde 400;
  • null — remove a audiência própria da AGC: audienceId passa a null, e as leituras (GET /:id e a listagem) retornam a audiência raiz do projeto como effectiveAudienceId, então a AGC volta a rodar sobre a audiência raiz (veja Audiência efetiva).

Os dados dos pilares de ciclo de vida não podem ser alterados aqui. Este endpoint edita apenas os campos de metadados próprios da AGC.

Exemplo

curl -X PATCH https://api.reten.ai/api/activity-generation-configs/f47ac10b-58cc-4372-a567-0e02b2c3d479 \
  -H "Authorization: Bearer <token>" \
  -H "x-tenant-id: <tenant-id>" \
  -H "x-project-id: <project-id>" \
  -H "Content-Type: application/json" \
  -d '{ "name": "Main funnel lifecycle", "description": "Renamed for clarity" }'
import axios from 'axios';

const id = 'f47ac10b-58cc-4372-a567-0e02b2c3d479';
const response = await axios.patch(
  `https://api.reten.ai/api/activity-generation-configs/${id}`,
  { name: 'Main funnel lifecycle', description: 'Renamed for clarity' },
  { headers: { Authorization: 'Bearer <token>', 'x-tenant-id': '<tenant-id>', 'x-project-id': '<project-id>' } },
);
const updated = response.data;

Resposta 200 OK

Retorna a AGC atualizada com sua configuração aninhada completa — os três pilares e seus filhos — no mesmo formato camelCase que GET /:id, mas sem effectiveAudienceId nem configHashes: leia a AGC com GET /:id para obtê-los.

{
  "id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
  "projectId": "3f6c2b1a-8d4e-4f7a-9b2c-5e1d0a7f6c34",
  "name": "Main funnel lifecycle",
  "description": "Renamed for clarity",
  "audienceId": "1f0d2c3b-4a59-4687-9c12-abcdef012345",
  "status": "active",
  "updatedBy": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
  "createdAt": "2026-06-10T14:00:00.000Z",
  "updatedAt": "2026-06-17T11:05:00.000Z",
  "activationConfig": {
    "id": "2a8f0c11-6b22-4d33-8e44-aa55bb66cc77",
    "name": "Activation",
    "description": "First-week activation moments",
    "sourceTable": "events",
    "sourceColumns": ["user_id", "event_id"],
    "dateColumn": "occurred_at",
    "activityGenerationConfigId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
    "aggregationMethod": "nunique",
    "isActive": true,
    "updatedBy": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
    "createdAt": "2026-06-10T14:00:00.000Z",
    "updatedAt": "2026-06-10T14:00:00.000Z",
    "activationMoments": [
      {
        "id": "3b9a1d22-7c33-4e44-9f55-bb66cc77dd88",
        "activationConfigId": "2a8f0c11-6b22-4d33-8e44-aa55bb66cc77",
        "statusCode": "aha",
        "userRetentionStatusConfigId": "aa11bb22-cc33-4d44-9e55-ff66aa77bb88",
        "minActions": 3,
        "windowDays": 7,
        "timeWindow": 30,
        "priority": 1,
        "isActive": true,
        "createdAt": "2026-06-10T14:00:00.000Z",
        "updatedAt": "2026-06-10T14:00:00.000Z"
      }
    ]
  },
  "engagementConfig": {
    "id": "5d1c3f44-9e55-4066-b177-dd88ee99ffaa",
    "name": "Engagement",
    "description": "Active-user engagement levels",
    "sourceTable": "events",
    "sourceColumns": ["user_id", "event_id"],
    "dateColumn": "occurred_at",
    "activityGenerationConfigId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
    "engagementWindowDays": 28,
    "minLifetimeActionsForEngaged": 1,
    "countingMethod": "active_days",
    "isActive": true,
    "updatedBy": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
    "createdAt": "2026-06-10T14:00:00.000Z",
    "updatedAt": "2026-06-10T14:00:00.000Z",
    "engagementLevels": [
      {
        "id": "6e2d4055-af66-4177-c288-ee99ffaa00bb",
        "engagementConfigId": "5d1c3f44-9e55-4066-b177-dd88ee99ffaa",
        "statusCode": "casual",
        "userRetentionStatusConfigId": "cc33dd44-ee55-4f66-a077-bb99ccaaddbb",
        "label": "Casual",
        "minThreshold": 1,
        "maxThreshold": null,
        "order": 1,
        "isActive": true,
        "createdAt": "2026-06-10T14:00:00.000Z",
        "updatedAt": "2026-06-10T14:00:00.000Z"
      }
    ]
  },
  "resurrectionConfig": {
    "id": "8a4f6277-c188-4399-e400-aa00bb11ccdd",
    "name": "Resurrection",
    "description": "Recovery vs. churn classification",
    "sourceTable": "events",
    "sourceColumns": ["user_id"],
    "dateColumn": "occurred_at",
    "activityGenerationConfigId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
    "isActive": true,
    "updatedBy": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
    "createdAt": "2026-06-10T14:00:00.000Z",
    "updatedAt": "2026-06-10T14:00:00.000Z",
    "resurrectionThresholds": [
      {
        "id": "9b5a7388-d299-44aa-f511-bb11ccdd22ee",
        "resurrectionConfigId": "8a4f6277-c188-4399-e400-aa00bb11ccdd",
        "statusCode": "dormant",
        "userRetentionStatusConfigId": "ee55ff66-aa77-4188-c299-ddbbeeccffdd",
        "label": "Dormant",
        "thresholdDays": 30,
        "order": 1,
        "isActive": true,
        "createdAt": "2026-06-10T14:00:00.000Z",
        "updatedAt": "2026-06-10T14:00:00.000Z"
      }
    ]
  }
}

Respostas de Erro

StatusDescrição
400Validação falhou: um campo com valor inválido, ou um campo que o endpoint não aceita — como projectId, status ou um pilar (activation, engagement, resurrection)
400id não é um UUID
400audience_id não é uma audiência do projeto ativo — La audiencia no existe en este proyecto.
404Não existe uma activity generation config com esse id no projeto ativo (incluindo uma AGC de outro projeto) — Activity generation config <id> not found
409Outra AGC do projeto ativo já tem esse nome — An activity generation config with name "<name>" already exists