Apoio às condições
Endpoints auxiliares para montar e conferir condições que envolvem clientes, localização e categorias.
Buscar clientes
POST /api/promotions/customersPermissão: Cadastro de promoções — visualização
Pesquisa clientes da loja por filtros combináveis. Use-o para pré-visualizar quem será atingido pela condição de clientes específicos: o objeto de filtro enviado aqui é o mesmo que vai dentro da condição.
Corpo da requisição
| Campo | Tipo | Descrição |
|---|---|---|
customersId | long[] | Clientes incluídos individualmente, além dos que atenderem aos filtros. |
customersId_Neq | long[] | Clientes removidos do resultado final. |
filtersGroup | array | Conjuntos de filtros (tabela abaixo). Dentro de um conjunto, todos os filtros preenchidos se aplicam. Use um único conjunto por busca e confira o resultado antes de salvar. |
promotionId | long | Junto com conditionId, identifica uma condição de clientes já salva. Os clientes já vinculados a ela ficam fora do resultado dos filtros. |
conditionId | long | conditionPromotionId da condição de clientes (de Obter promoção). |
linkedCustomers | bool | true: inclui no resultado os clientes já vinculados à condição informada. false sem filtersGroup: retorna todos os clientes da loja. |
searchSelected | string | Busca por nome ou e-mail dentro do resultado. |
page | int | Página (1 a 9999). Padrão: 1. |
limit | int | Itens por página (1 a 100). Padrão: 10. |
orderBy | string | customerId, name ou email, sem diferenciar maiúsculas. Padrão: customerId. |
orderDirection | int | 1 crescente, -1 decrescente. Padrão: 1. |
Todos os campos são opcionais. Valores fora das faixas e listas acima retornam 400 (VALIDATION_FAILED). Os clientes informados em customersId entram no resultado mesmo que já estejam vinculados à condição.
Conjunto de filtros (filtersGroup[])
filtersGroup[])| Campo | Tipo | Descrição |
|---|---|---|
search | string | ID, nome, e-mail, CPF ou CNPJ. |
customersIdFilter_Neq | long[] | Clientes desconsiderados neste conjunto. |
fieldsGroups | long[] | IDs de campos de informação cadastral (fieldId de GET /api/informationsgroups/fields). |
valuesGroups | string[] | Valores aceitos para esses campos (GET /api/informationsgroups/fields/values?FieldsIds={fieldId}). |
lastPurchase | object | { "purchaseSituation": bool|null, "dateFilter": int|null, "startDate": datetime|null, "endDate": datetime|null }. purchaseSituation: true = comprou no período, false = não comprou, null = ignora o filtro inteiro. dateFilter usa os Períodos e substitui as datas. |
averagePrice | object | { "minValue": decimal|null, "maxValue": decimal|null } — ticket médio dos pedidos do cliente. Use Faixa de valor de pedidos para conhecer os limites da loja. |
registrationDate | object | { "startDate": datetime|null, "endDate": datetime|null } — data de cadastro. |
states | string[] | UFs do endereço residencial (ex.: "SP"). Use abbreviation de Estados. |
cities | string[] | Cidades no formato "Cidade - UF", exatamente como retornadas por Cidades. Com cidades e estados no mesmo conjunto, o cliente entra se estiver em uma das cidades ou em um dos estados. |
Faixas precisam dos dois limitesEm
averagePrice,registrationDatee nas datas delastPurchase(semdateFilter), informe os dois limites ou nenhum. Com só um dos limites, o filtro não funciona como esperado (em geral não encontra nenhum cliente). Para “a partir de R$ 300”, use um máximo bem acima de qualquer ticket médio possível: o ticket médio considera todos os pedidos do cliente e pode passar do maior valor de Faixa de valor de pedidos.
Exemplo
{
"customersId": [501],
"filtersGroup": [
{
"lastPurchase": { "purchaseSituation": true, "dateFilter": 5 },
"averagePrice": { "minValue": 300, "maxValue": 1000000 },
"states": ["SP", "RJ"]
}
],
"page": 1, "limit": 10, "orderBy": "name", "orderDirection": 1
}Clientes de SP ou RJ que compraram nos últimos 6 meses com ticket médio a partir de R$ 300, mais o cliente 501.
Resposta 200
200{
"data": [ { "customerId": 501, "name": "Maria Souza", "email": "[email protected]" } ],
"total": 842, "totalGeneral": 15230, "page": 1, "limit": 10
}total é a quantidade de clientes que atendem à busca; totalGeneral, o total de clientes da loja. Resultados idênticos podem vir de cache por até 5 minutos.
Estados
GET /api/promotions/customers/statesPermissão: Cadastro de promoções — visualização
Lista os estados brasileiros. Use stateId na condição de estado (argumento 9) e abbreviation no filtro states da busca de clientes.
{ "data": [ { "stateId": 25, "name": "São Paulo", "abbreviation": "SP" } ] }Cidades
GET /api/promotions/customers/citiesPermissão: Cadastro de promoções — visualização
Lista as cidades presentes nos endereços cadastrados na loja, no formato aceito pelo filtro cities.
{ "data": [ { "city": "Campinas - SP" } ] }Faixa de valor de pedidos
GET /api/promotions/customers/averagePurchasePricePermissão: Cadastro de promoções — visualização
Retorna o menor e o maior valor de pedido da loja, em reais inteiros. Pedidos cancelados e em algumas outras situações não entram. Útil para definir a faixa de averagePrice.
{ "data": { "minValue": 12, "maxValue": 8450 } }Clientes de uma condição
GET /api/promotions/{promotionId}/conditions/{conditionPromotionId}/customersPermissão: Cadastro de promoções — visualização
Lista os clientes vinculados a uma condição de clientes específicos já salva. Um conditionPromotionId desatualizado (anterior ao último PUT) retorna lista vazia, não 404.
| Parâmetro | Tipo | Descrição |
|---|---|---|
promotionId (obrigatório) | int (path) | ID da promoção. |
conditionPromotionId (obrigatório) | int (path) | conditionPromotionId da condição (subgrupo 4), obtido em Obter promoção. |
search | string (query) | Busca por nome ou e-mail. |
page | int (query) | 1 a 9999. Padrão: 1. |
limit | int (query) | 1 a 100. Padrão: 50. |
{ "data": [ { "customerId": 501, "name": "Maria Souza", "email": "[email protected]" } ], "total": 1, "totalGeneral": 842, "page": 1, "limit": 50 }Categorias de uma condição
GET /api/promotions/{promotionId}/conditions/{conditionPromotionId}/categoriesPermissão: Cadastro de promoções — visualização
Lista, com nome e situação, as categorias usadas por uma condição de categoria (subgrupos 10, 21, 22 e 23).
| Parâmetro | Tipo | Descrição |
|---|---|---|
promotionId (obrigatório) | long (path) | ID da promoção. |
conditionPromotionId (obrigatório) | long (path) | conditionPromotionId da condição. |
search | string (query) | Busca por nome. |
page | int (query) | 1 a 9999. Padrão: 1. |
limit | int (query) | 1 a 100. Padrão: 10. |
{ "data": [ { "categoryId": 15, "name": "Camisetas", "active": true } ], "total": 1, "totalGeneral": 2, "page": 1, "limit": 10 }Categorias de um desconto
GET /api/promotions/{promotionId}/actions/{discountPromotionId}/categoriesPermissão: Cadastro de promoções — visualização
Mesma resposta do endpoint anterior, para descontos aplicados a categorias: percentual em categorias e preço fixo por quantidade em categorias. Informe o discountPromotionId obtido em Obter promoção. Aceita search, page e limit (1 a 100, padrão 10).
Permissão de divulgação
POST /api/promotions/disclosure-permissionPermissão: Cadastro de promoções — visualização
Informa se um conjunto de condições permite selos e textos de divulgação. Se alguma condição não permitir, envie stamps e disclosure vazios na promoção.
| Campo | Tipo | Descrição |
|---|---|---|
conditions (obrigatório) | array | Condições completas, no mesmo formato do payload de criação (com logicOperator e arguments). Condições incompletas ou não reconhecidas são ignoradas; [] retorna true. Sem o campo, a resposta é 400. |
{ "conditions": [ { "conditionGroup": 1, "conditionSubGroup": 1, "logicOperator": { "id": 1, "arguments": [ { "id": 7, "values": ["true"] } ] } } ] }Resposta 200
200{ "data": { "allowsDisclosure": false } }Updated about 2 hours ago

