Reten Docs

Lifecycle Defaults

Platform default values to prefill the AGC creation wizard.

GET /api/lifecycle-defaults

Return the three lifecycle pillars pre-filled with platform default values, resolved against the tenant's retention status catalog.

Auth: Required — activity-generation-config:view permission

This endpoint is prefill for the AGC creation wizard, not an entity. The payload is non-authoritative and NOT persisted — the admin edits these defaults and submits them via POST /api/activity-generation-configs. Nothing is created by calling this endpoint.

Serialization exception: unlike the three pillar resources (which respond in camelCase), this response is snake_case (e.g. source_table, min_lifetime_actions_for_engaged, status_code) because it is a hardcoded defaults payload, not a serialized entity.

What it returns

  • Each pillar (activation, engagement, resurrection) comes with default scalar settings and a default set of items (moments / levels / thresholds).
  • Every item is resolved against the tenant's retention status catalog, so it carries status_code, user_retention_status_config_id, and label.
  • The activation source fields (source_table, source_columns, date_column) are null by design — the admin fills these in the wizard.

Example

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;

Response 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
      }
    ]
  }
}

Field names within each item are snake_case here (status_code, min_actions, window_days, min_threshold, max_threshold, threshold_days, order). When the admin submits the wizard, these map to the snake_case request body of POST /api/activity-generation-configs.