Reten Docs
Estados de Ciclo de Vida de Comercios

Listar Estados

Lista paginada de los estados de ciclo de vida del tenant, con filtros por código, etapa, AGC y frescura.

GET /api/commerce-lifecycle-snapshots

Devuelve una lista paginada de los estados de ciclo de vida del tenant, con filtros opcionales. Sin filtro de AGC, recorre los estados de todas las AGC del tenant.

Auth: Requerida — permiso commerce-lifecycle-snapshot:view

Encabezados

EncabezadoRequeridoValor
x-api-keySí (partner)YOUR_API_KEY

Alternativamente, con JWT: Authorization: Bearer <token> + x-tenant-id: <tenant-id>.

Parámetros de Consulta

ParámetroTipoPor defectoDescripción
pagenumber1Número de página (mínimo 1).
per_pagenumber25Elementos por página (mínimo 1, máximo 100).
codestring-Filtra por código de estado de retención (coincidencia exacta, ej. AT_RISK_MONTHLY).
stageenum-Filtra por etapa: ACTIVATION, ENGAGEMENT o RESURRECTION.
activity_generation_config_idUUID-Filtra por AGC. Si se omite, lista los estados de todas las AGC.
state_changed_sinceISO 8601-Devuelve solo estados cuyo state_changed_at es posterior a esta fecha. Útil para sincronización incremental.
sortstring-state_changed_atOrden por state_changed_at. Convención de prefijo -: state_changed_at → ascendente; -state_changed_at → descendente (más reciente primero).

Por defecto (sin sort) el orden es descendente por state_changed_at — los estados que cambiaron más recientemente aparecen primero. El único campo ordenable es state_changed_at; cualquier otro valor de sort devuelve 400.

Ejemplo

curl "https://api.reten.ai/api/commerce-lifecycle-snapshots?stage=ENGAGEMENT&per_page=25&state_changed_since=2026-06-01T00:00:00Z" \
  -H "x-api-key: YOUR_API_KEY"
const params = new URLSearchParams({
  stage: "ENGAGEMENT",
  per_page: "25",
  state_changed_since: "2026-06-01T00:00:00Z",
});
const response = await fetch(
  `https://api.reten.ai/api/commerce-lifecycle-snapshots?${params}`,
  { headers: { "x-api-key": "YOUR_API_KEY" } },
);
const data = await response.json();
import requests

response = requests.get(
    "https://api.reten.ai/api/commerce-lifecycle-snapshots",
    headers={"x-api-key": "YOUR_API_KEY"},
    params={
        "stage": "ENGAGEMENT",
        "per_page": 25,
        "state_changed_since": "2026-06-01T00:00:00Z",
    },
)
data = response.json()

Respuesta 200 OK

{
  "data": [
    {
      "id": "5d000000-0000-4000-8000-000000000001",
      "commerce_id": "c0000000-0000-4000-8000-000000000001",
      "external_id": "SV-001",
      "activity_generation_config_id": "a1b2c3d4-0000-4000-8000-000000000001",
      "code": "AT_RISK_MONTHLY",
      "label": "En riesgo (mensual)",
      "stage": "ENGAGEMENT",
      "last_computed_at": "2026-06-10T06:00:00.000Z",
      "state_changed_at": "2026-06-08T06:00:00.000Z"
    },
    {
      "id": "5d000000-0000-4000-8000-000000000002",
      "commerce_id": "c0000000-0000-4000-8000-000000000002",
      "external_id": "SV-002",
      "activity_generation_config_id": "a1b2c3d4-0000-4000-8000-000000000001",
      "code": "HEALTHY",
      "label": "Saludable",
      "stage": "ENGAGEMENT",
      "last_computed_at": "2026-06-10T06:00:00.000Z",
      "state_changed_at": "2026-06-03T06:00:00.000Z"
    }
  ],
  "pagination": {
    "page": 1,
    "per_page": 25,
    "total": 2,
    "total_pages": 1,
    "has_next": false,
    "has_previous": false
  }
}

Campos de paginación

CampoTipoDescripción
pagenumberPágina actual.
per_pagenumberElementos por página.
totalnumberConteo total exacto de estados que coinciden con los filtros.
total_pagesnumberceil(total / per_page).
has_nextbooleantrue si hay una página siguiente.
has_previousbooleantrue si hay una página anterior.

La forma de cada elemento de data es el recurso snapshot.

Errores

StatusDescripción
400Parámetro inválido (ej. sort fuera de la whitelist, stage no válido, per_page mayor a 100).
401Clave de API faltante o inválida.
403La credencial no tiene el permiso commerce-lifecycle-snapshot:view.