Pular para o conteúdo principal
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 passa de uma constante compilada em um serviço para uma definição armazenada que você cria, ativa, aumenta e interrompe. Cada decisão que o toca reporta o que consumiu.
Este guia é para 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. O id que você nomeia decide a resposta para “R$ 20.000 por conta”:
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. Sem resetTime, esse valor entra na contagem de agosto, não na de julho.
Para mover a fronteira, defina resetTime em HH:MM UTC ao criar um limite DAILY, WEEKLY ou MONTHLY. Por exemplo, "03:00" começa cada período à meia-noite em São Paulo (UTC-3). Você não pode alterar resetTime após a criação. Veja Horário de reinício. 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 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 pelo período atual do limite. Ele reporta o escopo que mais consumiu e conta a capacidade retida por reservas não confirmadas do ledger do Midaz. Use-o para ver quanto do teto o período atual já consumiu. 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, asset e resetTime não são. O Tracer rejeita uma requisição que envie qualquer um deles com 0380, e um período, ativo ou horário de reinício 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, scheme 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.” Sem resetTime, os períodos começam às 00:00 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. Crie o limite com um resetTime para mover a fronteira.
  • “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.

Códigos de erro

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

Referência rápida