Reten Docs
Activity Generation Configs

Actualizar Activity Generation Config

Actualiza solo los metadatos de una activity generation config.

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

Actualiza solo los metadatos de una AGC. Este endpoint nunca toca los pilares de ciclo de vida — para cambiar activation, engagement o resurrection, usa PUT /:id/lifecycle.

Auth: Requerida — permiso activity-generation-config:update

Parámetros de Ruta

ParámetroTipoDescripción
idUUIDID de la activity generation config

Cuerpo de la Solicitud

Todos los campos son opcionales; solo se actualizan los campos que envías. Los cuerpos de solicitud son snake_case.

CampoTipoRequeridoDescripción
namestringNoNombre de la config; no puede ir vacío
descriptionstringNoDescripción de texto libre
audience_idUUID | nullNoAudiencia propia de la AGC; null la quita (ver abajo)

audience_id funciona así:

  • omitido — la AGC conserva su audiencia actual;
  • un id de audiencia — tiene que ser una audiencia del proyecto activo; si no, la API responde 400;
  • null — quita la audiencia propia de la AGC: audienceId pasa a null, y las lecturas (GET /:id y el listado) devuelven la audiencia raíz del proyecto como effectiveAudienceId, así que la AGC vuelve a correr sobre la audiencia raíz (ver Audiencia efectiva).

Los datos de los pilares de ciclo de vida no pueden cambiarse aquí. Este endpoint solo edita los campos de metadatos propios de la AGC.

Ejemplo

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;

Respuesta 200 OK

Devuelve la AGC actualizada con su configuración anidada completa — los tres pilares y sus hijos — en la misma forma camelCase que GET /:id, pero sin effectiveAudienceId ni configHashes: lee la AGC con GET /:id para obtenerlos.

{
  "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"
      }
    ]
  }
}

Respuestas de Error

EstadoDescripción
400Validación fallida: un campo con un valor inválido, o un campo que el endpoint no acepta — como projectId, status o un pilar (activation, engagement, resurrection)
400id no es un UUID
400audience_id no es una audiencia del proyecto activo — La audiencia no existe en este proyecto.
404No existe una activity generation config con ese id en el proyecto activo (incluida una AGC de otro proyecto) — Activity generation config <id> not found
409Otra AGC del proyecto activo ya tiene ese nombre — An activity generation config with name "<name>" already exists