Apoio às condições

Endpoints auxiliares para montar e conferir condições que envolvem clientes, localização e categorias.

Buscar clientes

POST /api/promotions/customers

Permissã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

CampoTipoDescrição
customersIdlong[]Clientes incluídos individualmente, além dos que atenderem aos filtros.
customersId_Neqlong[]Clientes removidos do resultado final.
filtersGrouparrayConjuntos 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.
promotionIdlongJunto com conditionId, identifica uma condição de clientes já salva. Os clientes já vinculados a ela ficam fora do resultado dos filtros.
conditionIdlongconditionPromotionId da condição de clientes (de Obter promoção).
linkedCustomersbooltrue: inclui no resultado os clientes já vinculados à condição informada. false sem filtersGroup: retorna todos os clientes da loja.
searchSelectedstringBusca por nome ou e-mail dentro do resultado.
pageintPágina (1 a 9999). Padrão: 1.
limitintItens por página (1 a 100). Padrão: 10.
orderBystringcustomerId, name ou email, sem diferenciar maiúsculas. Padrão: customerId.
orderDirectionint1 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[])

CampoTipoDescrição
searchstringID, nome, e-mail, CPF ou CNPJ.
customersIdFilter_Neqlong[]Clientes desconsiderados neste conjunto.
fieldsGroupslong[]IDs de campos de informação cadastral (fieldId de GET /api/informationsgroups/fields).
valuesGroupsstring[]Valores aceitos para esses campos (GET /api/informationsgroups/fields/values?FieldsIds={fieldId}).
lastPurchaseobject{ "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.
averagePriceobject{ "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.
registrationDateobject{ "startDate": datetime|null, "endDate": datetime|null } — data de cadastro.
statesstring[]UFs do endereço residencial (ex.: "SP"). Use abbreviation de Estados.
citiesstring[]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 limites

Em averagePrice, registrationDate e nas datas de lastPurchase (sem dateFilter), 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

{
  "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/states

Permissã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/cities

Permissã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/averagePurchasePrice

Permissã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}/customers

Permissã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âmetroTipoDescriçã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.
searchstring (query)Busca por nome ou e-mail.
pageint (query)1 a 9999. Padrão: 1.
limitint (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}/categories

Permissã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âmetroTipoDescrição
promotionId (obrigatório)long (path)ID da promoção.
conditionPromotionId (obrigatório)long (path)conditionPromotionId da condição.
searchstring (query)Busca por nome.
pageint (query)1 a 9999. Padrão: 1.
limitint (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}/categories

Permissã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-permission

Permissã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.

CampoTipoDescrição
conditions (obrigatório)arrayCondiçõ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

{ "data": { "allowsDisclosure": false } }