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âmetro | Tipo | Descrição |
|---|---|---|
id | UUID | ID 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.
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | string | Não | Nome da config; não pode ser vazio |
description | string | Não | Descrição em texto livre |
audience_id | UUID | null | Não | Audiê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:audienceIdpassa anull, e as leituras (GET /:ide a listagem) retornam a audiência raiz do projeto comoeffectiveAudienceId, 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
| Status | Descrição |
|---|---|
400 | Validaçã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) |
400 | id não é um UUID |
400 | audience_id não é uma audiência do projeto ativo — La audiencia no existe en este proyecto. |
404 | Não existe uma activity generation config com esse id no projeto ativo (incluindo uma AGC de outro projeto) — Activity generation config <id> not found |
409 | Outra AGC do projeto ativo já tem esse nome — An activity generation config with name "<name>" already exists |