Skip to main content
Uma validação voltou como DENY ou REVIEW e alguém pergunta o motivo. Este guia leva você da decisão que o Tracer retornou até uma regra nomeada ou um limite de gastos nomeado. A partir daí, você chega ao registro armazenado e ao evento da que pode entregar a um auditor meses depois. O que muda na sua operação: a resposta para “por que isso foi bloqueado?” deixa de ser uma busca em log. Cada decisão chega com os identificadores do que a produziu. O mesmo registro responde pelo id anos depois, e você pode conferir seu evento de auditoria contra a cadeia de hash.
Para quem é este guia? Desenvolvedores integrando a chamada de validação, times de suporte e de disputas respondendo perguntas de clientes, e responsáveis por compliance preparando evidências. Os passos 1 a 4 precisam apenas da resposta que você já tem. Os passos 5 a 8 usam os endpoints de consulta.

Antes de começar


  • Tracer em execução e acessível, com uma chave de API. Veja Primeiros passos
  • Uma resposta DENY ou REVIEW para trabalhar, ou o validationId de uma delas
  • Familiaridade com o que regras e limites fazem. Veja o Motor de regras e Limites de gastos
Todas as chamadas abaixo enviam a chave de API como X-API-Key.

Passo 1: Leia a decisão que o Tracer retornou


POST /v1/validations responde com a decisão completa. Uma nova requisição responde 201. Um requestId repetido responde 200 com a decisão que o Tracer já havia registrado para essa chave.
Uma negativa produzida por uma regra se parece com isto:
Para o schema completo de requisição e resposta, veja Validar uma transação.
Armazene o validationId junto ao registro da sua própria transação. É a chave que o Passo 5 usa, e também é o resourceId do evento de auditoria no Passo 7.

Passo 2: Diferencie uma negativa de regra de uma negativa de limite


Leia reason primeiro. Ele nomeia o que produziu a decisão, e diz qual dos dois próximos passos seguir. reason traz o mesmo texto em decisões REVIEW (Rule matched with REVIEW action), e o Passo 3 lê uma revisão do mesmo jeito que lê uma negativa.
Em uma negativa de regra, limitUsageDetails volta vazio porque o Tracer para antes da verificação de limite, não porque nenhum limite se aplica à conta.

Passo 3: Nomeie a regra


matchedRuleIds lista toda regra que combinou, qualquer que seja a ação que cada uma carregue. Uma regra DENY e uma regra ALLOW podem aparecer juntas na mesma negativa. Recupere cada uma e leia sua action para encontrar a regra por trás da decisão:
A regra carrega o name, description, expression, action e scopes que um colega precisa ver para entender por que ela disparou. Veja Recuperar uma regra. Compare matchedRuleIds com evaluatedRuleIds quando a pergunta for a oposta: “por que minha regra não disparou?”. O Tracer não avaliou uma regra que está ausente de evaluatedRuleIds. Comece pelo status e pelo escopo dela, em vez da expressão.
Uma regra excluída desde a decisão não responde mais em GET /v1/rules/{id}. Seu histórico, incluindo quem a excluiu, permanece na trilha de auditoria. Veja Auditoria e compliance.

Passo 4: Nomeie o limite de gastos


Em uma negativa limit_exceeded, limitUsageDetails guarda uma entrada por limite que o Tracer verificou, e as entradas marcadas "exceeded": true são as que o valor levaria além do teto:
Leia a entrada excedida como a aritmética da negativa: attemptedAmount contra limitAmount. O campo currentUsage reporta o que o período atual e o escopo combinado desse limite conteriam com esta transação incluída. No exemplo acima, uma compra de 1500 levaria um teto diário de 50000 a 51500. Um limite PER_TRANSACTION não mantém contagem, então sua entrada reporta currentUsage como 0, e attemptedAmount contra limitAmount é toda a comparação. GET /v1/limits/{limitId} retorna o nome e a configuração atuais do limite. Veja Recuperar um limite. O registro da decisão guarda o teto, o período e o escopo que se aplicavam quando o Tracer tomou a decisão. Um limite alterado depois disso não muda o que o registro diz. Para como cada período conta e como o consumo acumula, veja Limites de gastos.

Passo 5: Recupere o registro depois


O Tracer armazena toda decisão sob seu validationId:
O registro responde com o contexto da transação que o Tracer avaliou (transactionType, amount, asset, transactionTimestamp, account, e os campos opcionais segment, portfolio, merchant e metadata), além dos mesmos decision, reason, matchedRuleIds, evaluatedRuleIds e limitUsageDetails que a resposta original carregava, e um createdAt. Veja Recuperar uma validação. Leia este registro em uma disputa. Ele guarda a entrada e o resultado em um único documento. Ele não muda quando regras ou limites mudam depois.

Passo 6: Encontre registros quando você não tem o id


GET /v1/validations lista decisões armazenadas, da mais recente para a mais antiga, com paginação por cursor:
Uma consulta sem datas cobre os últimos 90 dias, não o período completo de retenção. O Tracer aplica essa janela padrão apenas quando start_date e end_date estão ambos ausentes. Envie um dos dois, ou os dois, para alcançar um intervalo mais antigo.
Dois filtros respondem às perguntas para as quais este guia existe:
  • matched_rule_id={ruleId}: toda decisão armazenada com a qual esta regra combinou
  • exceeded_limit_id={limitId}: toda decisão armazenada que este limite bloqueou
Cada resultado é um resumo: validationId, decision, reason, amount, asset, transactionType, accountId, matchedRuleIds, exceededLimitIds, processingTimeMs e createdAt. Pegue o validationId do que você quer e recupere-o com o Passo 5 para o registro completo. Veja Listar validações para todo filtro e os campos de paginação.

Passo 7: Extraia o evento de auditoria por trás da decisão


A trilha de auditoria registra a decisão sob o validationId como o resourceId do evento:
O que o evento de auditoria acrescenta ao registro de validação:
A janela padrão de 90 dias se aplica aqui também: GET /v1/audit-events sem start_date nem end_date cobre os últimos 90 dias. Envie o intervalo que você quer quando a decisão for mais antiga que isso.
O mesmo endpoint carrega o ciclo de vida de regras e limites: quem os criou, ativou ou excluiu. Veja Listar eventos de auditoria para os filtros, e Auditoria e compliance para os tipos de evento e os períodos de retenção.

Passo 8: Verifique o evento de auditoria em uma auditoria


Passe o eventId para o endpoint de verificação:
isValid: true estabelece que todo registro do primeiro até o que você nomeou ainda corresponde ao hash armazenado com ele. Cada um também se liga ao hash do registro anterior a ele. Dentro desse intervalo, nenhum registro foi removido, reordenado ou teve a data alterada. totalChecked reporta quantos registros a verificação cobriu. Em uma verificação com falha, isValid é false, message reporta adulteração, e firstInvalidId carrega um número de sequência interno para o registro divergente. Esse número não é um id de evento de auditoria, então não é um valor para passar a GET /v1/audit-events/{id}. Veja Verificar um evento de auditoria.
Entregue os dois juntos: o evento recuperado no Passo 7 é o conteúdo da decisão, e o resultado da verificação é a evidência de que a cadeia que o guarda está íntegra. A chamada de verificação reporta sobre a cadeia. Ela não retorna o registro.

Armadilhas comuns


O que costuma dar errado em uma revisão:
  • “Minha consulta do ano passado voltou vazia.” Uma consulta sem start_date e sem end_date cobre os últimos 90 dias. Envie o intervalo que você quer.
  • matchedRuleIds tem três entradas e apenas uma negou.” O array guarda toda regra que combinou, qualquer que seja a ação que ela carregue. Recupere cada regra e leia sua action (Passo 3).
  • limitUsageDetails está vazio em uma negativa.” A decisão veio de uma regra, não de um limite. Leia reason (Passo 2).
  • currentUsage está mais alto do que o cliente realmente gastou.” Ele já inclui o valor tentado, então é uma projeção. Em um limite excedido, o contador permanece o mesmo, então o consumo armazenado não inclui esta transação.
  • “A regra que disparou não existe mais.” Regras excluídas param de responder em GET /v1/rules/{id}. Consulte seu ciclo de vida por GET /v1/audit-events?resource_type=rule&resource_id={ruleId}.

Códigos de erro

A lista completa está na lista de erros do Tracer.

Referência rápida