Configurações de Status de Retenção
Configuração por tenant dos status de retenção de usuário ativos.
O catálogo de cada tenant é semeado a partir dos codes de status de retenção padrão da plataforma no momento do setup do tenant, e pode ser re-sincronizado a qualquer momento a partir do diálogo de importação (que lê GET /api/user-retention-status-configs/defaults). Cada config vive inteiramente dentro do tenant: é identificado pelo seu code (único) e carrega o label de exibição do tenant — não há um catálogo global que o sustente.
GET /api/user-retention-status-configs
Lista todas as configurações de status de retenção de usuário do tenant.
Auth: Obrigatória — permissão activity:view
Exemplo
curl https://api.reten.ai/api/user-retention-status-configs \
-H "Authorization: Bearer <token>" \
-H "x-tenant-id: <tenant-id>"import axios from 'axios';
const response = await axios.get(
'https://api.reten.ai/api/user-retention-status-configs',
{
headers: {
Authorization: 'Bearer <token>',
'x-tenant-id': '<tenant-id>',
},
}
);
const configs = response.data;Resposta 200 OK
[
{
"id": "aa0e8400-e29b-41d4-a716-446655440000",
"code": "habit",
"label": "En hábito",
"isActive": true,
"createdAt": "2026-06-18T06:00:00.000Z",
"updatedAt": "2026-06-18T06:00:00.000Z"
},
{
"id": "bb0e8400-e29b-41d4-a716-446655440000",
"code": "dormant",
"label": "En riesgo",
"isActive": true,
"createdAt": "2026-06-18T06:00:00.000Z",
"updatedAt": "2026-06-18T06:00:00.000Z"
}
]GET /api/user-retention-status-configs/defaults
Retorna os status de retenção padrão da plataforma como um catálogo plano { code, label }. O app de administração usa isso para pré-preencher o diálogo de importação com os status que um tenant pode adotar.
Auth: Obrigatória — permissão activity:view
Este endpoint é de pré-preenchimento, não uma entidade. O payload é o catálogo de defaults fixo no código — não autoritativo e NÃO é persistido — e sempre lista todos os defaults, independentemente do que o tenant já possui. Para adotá-los, o admin escolhe os que ainda faltam e os cria via POST /api/user-retention-status-configs/bulk. Nada é criado ao chamar este endpoint.
Exemplo
curl https://api.reten.ai/api/user-retention-status-configs/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/user-retention-status-configs/defaults',
{
headers: {
Authorization: 'Bearer <token>',
'x-tenant-id': '<tenant-id>',
},
}
);
const defaults = response.data;Resposta 200 OK
[
{
"code": "sign_up",
"label": "Registrado"
},
{
"code": "habit",
"label": "En hábito"
}
]POST /api/user-retention-status-configs
Cria uma configuração de status de retenção para o tenant.
Auth: Obrigatória — permissão activity-config:manage
Corpo da Requisição
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
code | string | Sim | Code canônico do status de retenção (do catálogo) |
label | string | Sim | Etiqueta de exibição para este tenant |
Exemplo
curl -X POST https://api.reten.ai/api/user-retention-status-configs \
-H "Authorization: Bearer <token>" \
-H "x-tenant-id: <tenant-id>" \
-H "Content-Type: application/json" \
-d '{
"code": "habit",
"label": "En hábito"
}'import axios from 'axios';
const response = await axios.post(
'https://api.reten.ai/api/user-retention-status-configs',
{
code: 'habit',
label: 'En hábito',
},
{
headers: {
Authorization: 'Bearer <token>',
'x-tenant-id': '<tenant-id>',
},
}
);Resposta 201 Created
POST /api/user-retention-status-configs/bulk
Criação em massa de configurações de status de retenção do tenant.
Auth: Obrigatória — permissão activity-config:manage
Corpo da Requisição
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
items | array | Sim | Array de configurações a criar |
items[].code | string | Sim | Code canônico do status de retenção (do catálogo) |
items[].label | string | Sim | Etiqueta de exibição para este tenant |
Exemplo
curl -X POST https://api.reten.ai/api/user-retention-status-configs/bulk \
-H "Authorization: Bearer <token>" \
-H "x-tenant-id: <tenant-id>" \
-H "Content-Type: application/json" \
-d '{
"items": [
{
"code": "habit",
"label": "En hábito"
},
{
"code": "dormant",
"label": "En riesgo"
}
]
}'import axios from 'axios';
const response = await axios.post(
'https://api.reten.ai/api/user-retention-status-configs/bulk',
{
items: [
{
code: 'habit',
label: 'En hábito',
},
{
code: 'dormant',
label: 'En riesgo',
},
],
},
{
headers: {
Authorization: 'Bearer <token>',
'x-tenant-id': '<tenant-id>',
},
}
);Resposta 201 Created
PATCH /api/user-retention-status-configs/:id
Atualiza uma configuração de status de retenção do tenant.
Auth: Obrigatória — permissão activity-config:manage
Corpo da Requisição
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
label | string | Não | Etiqueta de exibição |
is_active | boolean | Não | Habilitar ou desabilitar esta configuração |
Exemplo
curl -X PATCH https://api.reten.ai/api/user-retention-status-configs/<id> \
-H "Authorization: Bearer <token>" \
-H "x-tenant-id: <tenant-id>" \
-H "Content-Type: application/json" \
-d '{
"label": "Etiqueta Atualizada"
}'import axios from 'axios';
const response = await axios.patch(
'https://api.reten.ai/api/user-retention-status-configs/<id>',
{
label: 'Etiqueta Atualizada',
},
{
headers: {
Authorization: 'Bearer <token>',
'x-tenant-id': '<tenant-id>',
},
}
);Resposta 200 OK
DELETE /api/user-retention-status-configs/:id
Desativa uma configuração de status de retenção do tenant.
Auth: Obrigatória — permissão activity-config:manage
Exemplo
curl -X DELETE https://api.reten.ai/api/user-retention-status-configs/<id> \
-H "Authorization: Bearer <token>" \
-H "x-tenant-id: <tenant-id>"import axios from 'axios';
const response = await axios.delete(
'https://api.reten.ai/api/user-retention-status-configs/<id>',
{
headers: {
Authorization: 'Bearer <token>',
'x-tenant-id': '<tenant-id>',
},
}
);