Pular para o conteúdo principal

Segmentos

Gerenciamento de segmentos de usuários para targeting de feature flags.

Endpoints

MétodoEndpointDescriçãoPermissão
POST/api/v1/segmentsCriar segmentoSEGMENTS_CREATE
GET/api/v1/segmentsListar segmentosSEGMENTS_READ
GET/api/v1/segments/:idObter segmentoSEGMENTS_READ
PATCH/api/v1/segments/:idAtualizar segmentoSEGMENTS_UPDATE
DELETE/api/v1/segments/:idExcluir segmentoSEGMENTS_DELETE

Atributos

CampoTipoObrigatórioDescrição
keystringSimIdentificador único (alfanumerico, hifens, underscores)
namestringSimNome de exibicao (max 200 caracteres)
descriptionstringNãoDescrição (max 1000 caracteres)
ruleTypeenumNãoTipo de regra: SIMPLE ou DMN (default: SIMPLE)
ruleContentstringNãoConteudo da regra (JSON para SIMPLE, XML para DMN)
decisionIdstring (UUID)NãoID de uma decisão do Decision Engine (para DMN)

Criar Segmento

POST /api/v1/segments

Cria um novo segmento de usuários.

Request - Segmento SIMPLE

curl -X POST 'https://feature-flags.stg.catalisa.app/api/v1/segments' \
-H 'Authorization: Bearer SEU_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"key": "premium-users",
"name": "Premium Users",
"description": "Usuários com plano premium",
"ruleType": "SIMPLE",
"ruleContent": "{\"operator\":\"AND\",\"conditions\":[{\"attribute\":\"plan\",\"operator\":\"eq\",\"value\":\"premium\"}]}"
}'

Response (201 Created)

{
"data": {
"type": "segments",
"id": "550e8400-e29b-41d4-a716-446655440001",
"attributes": {
"key": "premium-users",
"name": "Premium Users",
"description": "Usuários com plano premium",
"ruleType": "SIMPLE",
"ruleContent": "{\"operator\":\"AND\",\"conditions\":[{\"attribute\":\"plan\",\"operator\":\"eq\",\"value\":\"premium\"}]}",
"createdAt": "2024-01-15T10:30:00Z",
"updatedAt": "2024-01-15T10:30:00Z"
},
"links": {
"self": "/api/v1/segments/550e8400-e29b-41d4-a716-446655440001"
}
}
}

Listar Segmentos

GET /api/v1/segments

Lista segmentos com suporte a paginação.

Query Parameters

ParâmetroTipoDescrição
page[number]integerNúmero da pagina
page[size]integerItens por pagina (max 100)
curl 'https://feature-flags.stg.catalisa.app/api/v1/segments' \
-H 'Authorization: Bearer SEU_TOKEN'

Response (200 OK)

{
"data": [
{
"type": "segments",
"id": "550e8400-e29b-41d4-a716-446655440001",
"attributes": {
"key": "premium-users",
"name": "Premium Users",
"ruleType": "SIMPLE"
}
},
{
"type": "segments",
"id": "550e8400-e29b-41d4-a716-446655440002",
"attributes": {
"key": "beta-testers",
"name": "Beta Testers",
"ruleType": "SIMPLE"
}
}
],
"meta": {
"totalItems": 2,
"totalPages": 1,
"currentPage": 1
},
"links": {
"self": "/api/v1/segments?page[number]=1&page[size]=20"
}
}

Obter Segmento

GET /api/v1/segments/:id

Obtém detalhes de um segmento específico.

curl 'https://feature-flags.stg.catalisa.app/api/v1/segments/550e8400-e29b-41d4-a716-446655440001' \
-H 'Authorization: Bearer SEU_TOKEN'

Response (200 OK)

{
"data": {
"type": "segments",
"id": "550e8400-e29b-41d4-a716-446655440001",
"attributes": {
"key": "premium-users",
"name": "Premium Users",
"description": "Usuários com plano premium",
"ruleType": "SIMPLE",
"ruleContent": "{\"operator\":\"AND\",\"conditions\":[{\"attribute\":\"plan\",\"operator\":\"eq\",\"value\":\"premium\"}]}",
"createdAt": "2024-01-15T10:30:00Z",
"updatedAt": "2024-01-15T10:30:00Z"
},
"links": {
"self": "/api/v1/segments/550e8400-e29b-41d4-a716-446655440001"
}
}
}

Atualizar Segmento

PATCH /api/v1/segments/:id

Atualiza um segmento existente. A atualização invalida automaticamente o cache de membership.

curl -X PATCH 'https://feature-flags.stg.catalisa.app/api/v1/segments/550e8400-e29b-41d4-a716-446655440001' \
-H 'Authorization: Bearer SEU_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"name": "Premium Users v2",
"ruleContent": "{\"operator\":\"OR\",\"conditions\":[{\"attribute\":\"plan\",\"operator\":\"eq\",\"value\":\"premium\"},{\"attribute\":\"plan\",\"operator\":\"eq\",\"value\":\"enterprise\"}]}"
}'

Response (200 OK)

{
"data": {
"type": "segments",
"id": "550e8400-e29b-41d4-a716-446655440001",
"attributes": {
"key": "premium-users",
"name": "Premium Users v2",
"ruleContent": "{\"operator\":\"OR\",\"conditions\":[...]}",
"updatedAt": "2024-01-15T11:00:00Z"
}
}
}

Excluir Segmento

DELETE /api/v1/segments/:id

Remove um segmento. Não pode ser excluido se estiver sendo usado por targeting rules.

curl -X DELETE 'https://feature-flags.stg.catalisa.app/api/v1/segments/550e8400-e29b-41d4-a716-446655440001' \
-H 'Authorization: Bearer SEU_TOKEN'

Response (204 No Content)

Sem corpo de resposta.


Tipos de Regra

SIMPLE

Regras simples baseadas em condições sobre atributos do usuário:

{
"operator": "AND",
"conditions": [
{ "attribute": "plan", "operator": "eq", "value": "premium" },
{ "attribute": "age", "operator": "gte", "value": 18 }
]
}

Estrutura

CampoTipoDescrição
operatorenumAND ou OR - como combinar as condições
conditionsarrayLista de condições
conditions[].attributestringNome do atributo a verificar
conditions[].operatorenumOperador de comparacao
conditions[].valueanyValor para comparar

Operadores

OperadorDescriçãoExemplo
eqIgualplan == "premium"
neqDiferentestatus != "blocked"
gtMaior queage > 18
gteMaior ou igualscore >= 700
ltMenor queattempts < 3
lteMenor ou igualbalance <= 0
inEsta na listacountry in ["BR", "US"]
notInNão esta na listastatus notIn ["blocked", "pending"]
containsContém (string)email contains "@gmail"
startsWithComeça comname startsWith "John"
endsWithTermina comemail endsWith ".com"

Atributo Especial: userId

O atributo userId e tratado de forma especial e e extraido diretamente do contexto de avaliação:

{
"conditions": [
{ "attribute": "userId", "operator": "in", "value": ["user-1", "user-2"] }
]
}

DMN

Regras complexas usando tabelas de decisão DMN (Decision Model and Notation):

{
"key": "complex-eligibility",
"name": "Complex Eligibility",
"ruleType": "DMN",
"ruleContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>...", // XML DMN
// ou
"decisionId": "550e8400-e29b-41d4-a716-446655440099" // Referencia ao Decision Engine
}

O segmento DMN retorna true se o output da decisão for:

  • Um boolean true
  • Um objeto com campo isMember: true, match: true ou result: true
  • Qualquer valor truthy

Exemplos de Segmentos

Usuários de Pais Específico

{
"key": "brazil-users",
"name": "Brazil Users",
"ruleType": "SIMPLE",
"ruleContent": "{\"conditions\":[{\"attribute\":\"country\",\"operator\":\"eq\",\"value\":\"BR\"}]}"
}

Usuários com Alto Score

{
"key": "high-score-users",
"name": "High Score Users",
"ruleType": "SIMPLE",
"ruleContent": "{\"conditions\":[{\"attribute\":\"creditScore\",\"operator\":\"gte\",\"value\":700}]}"
}

Combinacao AND

{
"key": "premium-active",
"name": "Premium and Active",
"ruleType": "SIMPLE",
"ruleContent": "{\"operator\":\"AND\",\"conditions\":[{\"attribute\":\"plan\",\"operator\":\"eq\",\"value\":\"premium\"},{\"attribute\":\"status\",\"operator\":\"eq\",\"value\":\"active\"}]}"
}

Combinacao OR

{
"key": "vip-users",
"name": "VIP Users",
"ruleType": "SIMPLE",
"ruleContent": "{\"operator\":\"OR\",\"conditions\":[{\"attribute\":\"plan\",\"operator\":\"eq\",\"value\":\"enterprise\"},{\"attribute\":\"totalSpent\",\"operator\":\"gte\",\"value\":10000}]}"
}

Lista de Usuários Específicos

{
"key": "beta-testers",
"name": "Beta Testers",
"ruleType": "SIMPLE",
"ruleContent": "{\"conditions\":[{\"attribute\":\"userId\",\"operator\":\"in\",\"value\":[\"user-1\",\"user-2\",\"user-3\"]}]}"
}

Erros Comuns

CódigoErroDescrição
400VALIDATIONCampos obrigatorios ausentes ou ruleContent invalido
404NOT_FOUNDSegmento nao encontrado
409CONFLICTSegmento com mesma key ja existe
409CONFLICTSegmento em uso por targeting rules (ao excluir)