Skip to main content
Uma decisão de produto ou de risco chegou como uma frase: “no máximo R$ 20.000 por conta por mês.” Este guia transforma essa frase em um teto ativo e mostra onde ler quanto dele resta para um cliente. O que muda na sua operação: o teto deixa de ser uma constante compilada em um serviço. Ele passa a ser uma definição armazenada que você cria, ativa, aumenta e interrompe, e cada decisão que o toca reporta o que consumiu.
Para quem é este guia? Times de produto e de risco que definem o teto, e desenvolvedores que conectam POST /v1/validations ao caminho de pagamento. Os passos 1 e 2 são decisões a tomar antes de qualquer chamada. Os passos 3 a 6 são as chamadas.

Antes de começar


  • Tracer em execução e acessível, com uma chave de API. Veja Primeiros passos
  • O id da conta, do portfólio ou do segmento ao qual o teto se aplica
  • O código do ativo das transações que você quer limitar
  • Familiaridade com tipos de limite, janelas de tempo e períodos personalizados. Veja Limites de gastos
Todas as chamadas abaixo enviam a chave de API como X-API-Key e rodam contra http://localhost:4020.

Passo 1: Decida a quem o teto se dirige


Um limite carrega uma lista de objetos de escopo, e cada objeto nomeia a que o limite se aplica. Estes campos estão disponíveis dentro de um objeto: Campos dentro de um mesmo objeto se combinam com AND. Um campo que você omite funciona como curinga. Entre objetos, a lista se combina com OR, então um limite com dois objetos se aplica quando qualquer um deles corresponde. A escolha que decide a resposta para “R$ 20.000 por conta” é qual id você nomeia:
O teto se aplica a essa conta. Ele conta os gastos dessa conta e de nenhuma outra. Para um teto por conta em uma carteira de clientes, cada conta recebe seu próprio limite.
Um limite também carrega um asset, e o Tracer apenas confere um limite contra uma transação quando os dois correspondem. O Tracer não confere um limite criado em BRL contra uma transação em USD. Uma carteira que liquida em duas moedas precisa de um limite para cada uma.
Um limite deve carregar pelo menos um objeto de escopo, e cada objeto deve definir pelo menos um campo. O Tracer rejeita uma lista vazia ou um objeto vazio. Veja O que dá errado.

Passo 2: Escolha o período


limitType decide tanto o tamanho da janela do teto quanto quando uma nova contagem começa. O Tracer oferece cinco: “por mês” é MONTHLY.
A fronteira é UTC, não o horário local. Um cliente em São Paulo gastando às 21:30 do dia 31 de julho está às 00:30 UTC do dia 1º de agosto. Esse valor entra na contagem de agosto, não na de julho. Quando um teto usa termos locais, espere que as últimas horas do mês local pertençam ao mês seguinte.
CUSTOM recebe customStartDate e customEndDate e é o formato para uma campanha ou uma promoção. Esses dois campos pertencem a CUSTOM. O Tracer os rejeita nos outros quatro tipos. Para restringir um teto a certas horas do dia, veja janelas de tempo.

Passo 3: Crie o limite


POST /v1/limits armazena a definição. O Tracer a cria em DRAFT e ainda não a confere contra transações.
Uma chamada bem-sucedida responde 201. O corpo carrega o limite armazenado. Dois campos importam agora:
Os nomes são únicos entre limites, e o conjunto de caracteres é restrito. name aceita letras ASCII e dígitos, espaços, e -, _, ., (, ). O Tracer rejeita um acento, ou um traço digitado como travessão, com 0371. O Tracer rejeita um nome que outro limite ativo já possui, com 0442. Excluir um limite libera o nome novamente.
Para o payload completo e todos os campos opcionais, veja Criar um limite.

Passo 4: Ative-o


O Tracer não confere um limite em DRAFT. A ativação é o que o coloca no caminho:
A resposta carrega o limite com status definido como ACTIVE. A partir daqui, o Tracer confere contra este limite toda POST /v1/validations cuja transação corresponda ao escopo e ao ativo.
Ativar no meio do mês não importa o histórico do mês. O Tracer conta uma transação contra um limite no momento em que decide sobre ela. Gastos que aconteceram enquanto o limite estava em DRAFT não entram na contagem. Um teto ativado no dia 20 rege o que acontece a partir do dia 20.
Veja Ativar um limite.

Passo 5: Veja quanto resta


Toda resposta de POST /v1/validations carrega limitUsageDetails, com uma entrada para cada limite que o Tracer conferiu:
No exemplo acima, uma compra de R$ 1.500 levou um mês que estava em 18.500 a exatamente 20.000 e esgotou o teto. O Tracer nega a próxima transação nessa conta até agosto. Quando uma transação excede um limite, a decisão é DENY e reason é limit_exceeded. O Tracer não soma à contagem o valor que teria cruzado o teto. Um limite produz uma negação, não um sinalizador para revisão. Para ir de uma negação dessas de volta ao limite que a causou, veja Revisando uma transação negada.

A outra leitura

GET /v1/limits/{limitId}/usage responde com um total do limite, não de um período. Ele soma os contadores de uso registrados contra ele, entre os períodos e escopos que acumulou. Use-o para revisar quanto um limite absorveu no total, não para responder quanto resta a um cliente este mês. O Tracer exclui um contador 90 dias após o fim do seu período. Em um limite de longa duração, esse total cobre apenas os períodos ainda retidos, não o ciclo de vida completo do limite. Veja Rastreamento de uso. Veja Obter um snapshot de uso de um limite.

Passo 6: Altere, pause ou remova


1

Aumente ou diminua o teto

name, description, maxAmount e scopes são editáveis, assim como os campos de janela de tempo e de período personalizado. limitType e asset não são. O Tracer rejeita uma requisição que envie qualquer um dos dois com 0380, e um período ou ativo diferente significa um novo limite. O Tracer rejeita um corpo vazio com 0183. Veja Atualizar um limite.Alterar o teto não limpa a contagem em andamento. Diminua-o abaixo do que o período atual já consumiu, e o Tracer nega a conta até o próximo período começar.
2

Pare de aplicá-lo

O limite passa para INACTIVE e o Tracer para de conferi-lo. Ele mantém sua definição e seu lugar na , e POST /v1/limits/{limitId}/activate o coloca de volta no caminho. Veja Desativar um limite.
3

Volte-o para rascunho

Move um limite INACTIVE de volta para DRAFT. Veja Retornar um limite ao rascunho.
4

Remova-o

Responde 204. Você precisa desativar antes um limite que está ACTIVE no momento. O Tracer rejeita a exclusão com 0363, que é o que evita que um teto ativo desapareça por acidente. Veja Excluir um limite.

Encontre os limites que você já tem

GET /v1/limits os lista, e filtra pelos mesmos campos de escopo que você definiu no Passo 1:
name, status, limit_type, account_id, segment_id, portfolio_id, merchant_id, transaction_type e sub_type filtram. Os resultados são paginados por cursor. Veja Listar limites, e Obter um limite para um por id.

O que dá errado


O que costuma dar errado ao configurar um teto:
  • “O cliente gastou mais do que devia e nada o impediu.” Confira status primeiro. O Tracer não confere um limite em DRAFT ou INACTIVE. Depois, confira se o asset do limite corresponde ao da transação, e se o escopo nomeia o id que a transação realmente carregou.
  • “O teto do segmento acabou no segundo dia.” Um limite com escopo de segmento é um único orçamento para o segmento inteiro, não um por conta dentro dele. Um teto por conta significa um limite endereçado a cada conta.
  • “O mês virou algumas horas mais cedo.” As fronteiras de período são UTC. Gastos após as 21:00 em UTC-3 pertencem ao próximo dia UTC, e no último dia do mês, ao mês seguinte.
  • “Aumentei o limite e a conta continua sendo negada.” Aumentar o teto não limpa a contagem. Confirme que o novo maxAmount está acima do que o período já consumiu.
  • GET /v1/limits/{id}/usage reporta mais do que o cliente gastou este mês.” Esse endpoint totaliza os contadores registrados para o limite, entre períodos e escopos. Para o período atual, leia limitUsageDetails na resposta de validação.

Códigos de erro

A lista completa está em Lista de erros do Tracer.

Referência rápida