POST /v1/validations, age de acordo com ALLOW / DENY / REVIEW e segue em frente. O Tracer nunca chama de volta a sua stack. Não há webhooks nem callbacks, e a integração termina com a resposta.
O que muda na sua operação: a decisão deixa de ser lógica em processo e passa a ser uma chamada externa. A chamada é síncrona (requisição/resposta, sem webhooks), então ela fica no caminho crítico da transação. Bem feita, ela adiciona menos de 80ms p99 e te dá um ponto único para política e histórico de validação. Malfeita (sem timeout, sem estratégia de nova tentativa, sem fallback), ela se torna um ponto único de falha.
Trade-off: você adiciona um salto de rede. O contrato é simples: idempotente por requestId, sem callbacks, resposta determinística de três estados. Você deve pensar em timeouts, novas tentativas e o que fazer se o Tracer estiver inacessível. A maior parte deste guia é sobre isso.
Este guia cobre os requisitos de payload, o fluxo de integração e práticas que mantêm a chamada de validação dentro do seu orçamento de latência.
O Tracer fica fora do seu ledger: ele nunca chama o Midaz. Sua aplicação orquestra os dois. Ela chama o Tracer para validar e envia a transação para o Midaz apenas se a decisão for ALLOW. O Tracer avalia suas políticas e limites configurados em relação ao contexto que você envia, não aos saldos das contas. O ledger continua sendo a fonte da verdade para o que uma conta possui.
O Midaz também pode direcionar o Tracer por meio de um seam opcional por ledger. Ele continua sendo unidirecional, Ledger → Tracer. O restante deste guia cobre o padrão HTTP orquestrado pela aplicação. O contrato do seam aparece abaixo.
Visão geral da integração
O Tracer espera chamadas de sistemas de autorização (gateways de pagamento, orquestradores de workflow ou processadores de transação) que precisam de decisões de validação em tempo real. A integração segue um padrão simples de requisição-resposta:
Figura 1. Visão geral da integração com o Tracer
Seam de reserva do Midaz Ledger
Este seam opcional pertence ao Ledger HTTP v2. O Ledger HTTP v1 nunca o invoca. A API HTTP pública do Tracer é apenas v1 e não tem operações de reserva. O Ledger chama o serviço gRPC
lerian.midaz.reservation.v1.ReservationService. Esse serviço é um transporte interno de serviço para serviço, não uma API pública.
O Tracer sempre inicia esse listener gRPC, na porta 4021 por padrão. Para usar outra porta, defina TRACER_GRPC_PORT com um endereço de escuta no formato :4021.
No Ledger, defina TRACER_BASE_URL com o endereço do listener no formato host:port. Quando TRACER_BASE_URL não está definida, o Ledger não faz nenhuma chamada de reserva. O Ledger chama o Tracer apenas quando o tracer.mode por ledger é advisory ou enforce. Um modo não definido ou off ignora as reservas mesmo quando você define TRACER_BASE_URL. Um skip por chamada respeitado também contorna o seam.
O seam tem cinco transições:
Ordem de deploy
Faça o deploy do Tracer antes do deploy do Ledger do mesmo release do Midaz. Um Tracer anterior ao v4.3.0 aceita apenas os esquemasCARD, WIRE, PIX e CRYPTO. Ele recusa uma reserva com qualquer outro esquema. No modo enforce, o Ledger então rejeita a transação com 0532.
Um Tracer anterior ao v4.3.0 também não consegue ler uma validação armazenada com qualquer outro esquema. Isso inclui um pod que o rollout ainda não alcançou. Depois que o Tracer armazenar uma validação assim, não volte o Tracer para uma versão anterior ao v4.3.0.
Enquanto um Ledger do v4.2.0 ou posterior estiver em execução, não volte o Tracer para uma versão anterior ao v4.2.0. Um Tracer anterior descarta o tipo de conta, os metadados e o indicador de estorno de cada requisição de reserva.
Regras em uma reserva
Em cadaReserve, o Tracer avalia primeiro as suas regras ativas, com o mesmo avaliador de POST /v1/validations. Depois, ele reserva capacidade de limite. Em uma reserva, o padrão sem correspondência não se aplica. Quando nenhuma regra corresponde, a reserva segue para a verificação de limites. Uma reserva de estorno ignora as regras e ainda reserva capacidade de limite.
A requisição de reserva leva o valor, o ativo, o esquema de pagamento da transação, o timestamp da transação e os valores escalares de metadados, como strings. Ela também leva o ID e o tipo da primeira conta de origem e os IDs do segmento e do portfólio dessa conta. Ela não leva merchant nem o nome do segmento ou do portfólio. Uma reserva de estorno leva o esquema da transação original.
Limites e regras com escopo por segmento, portfólio ou esquema se aplicam à reserva. Uma reserva sem esquema corresponde apenas a escopos que não indicam esquema.
Resultados no Ledger
Uma negação de reserva é uma resposta bem-sucedida, não um erro de transporte. O modoadvisory nunca bloqueia a transação. O modo enforce rejeita a transação antes de qualquer movimentação de saldo:
Com a postura aberta, o Ledger também prossegue sem verificações de regras ou de limites quando o Tracer recusa as credenciais do Ledger.
O Ledger também pode retornar
0536 para uma reserva. A lista de erros do Midaz descreve cada código.
Falhas de confirmação e liberação não bloqueiam a transação.
Padrão Payload-Complete
O Tracer usa o Padrão Payload-Complete. Cada requisição deve carregar todo o contexto necessário para a validação. Esse design garante:
Suas responsabilidades
Como o sistema que integra, você é responsável por:- Enriquecer o payload com dados de conta, segmento, portfólio e comerciante antes de chamar o Tracer
- Fornecer contexto preciso para a avaliação de regras e limites. O Tracer não pode buscar dados ausentes
- Tratar a decisão (ALLOW, DENY ou REVIEW) de forma adequada no seu workflow
- Implementar a lógica de novas tentativas se o Tracer estiver temporariamente indisponível
- Gerenciar workflows de revisão quando o Tracer retorna
REVIEW. O Tracer não inclui gestão de casos
Responsabilidades do Tracer
O Tracer é responsável por:- Avaliar regras em relação ao contexto fornecido
- Verificar limites em relação ao uso atual
- Armazenar o histórico de validação para investigação e geração de relatórios
- Retornar a decisão com informações detalhadas
Fluxo de integração
Siga estas etapas para integrar seu sistema com o Tracer.
Etapa 1: Preparar o contexto da transação
Antes de chamar o Tracer, reúna todos os dados relevantes dos seus sistemas:Figura 2. Preparando o contexto da transação
Etapa 2: Chamar a API do Tracer
Envie uma requisição POST para/v1/validations com o contexto completo da transação, incluindo:
- Detalhes da transação (esquema de pagamento, subtipo, valor, ativo, timestamp)
- Informações da conta (obrigatório)
- Opcional: segmento, portfólio, comerciante e personalizados
Etapa 3: Tratar a resposta
Processe a decisão retornada pelo Tracer:
A resposta inclui o
validationId para correlação com o histórico de validação, detalhes sobre quais regras corresponderam e informações sobre o uso atual dos limites.
Usando metadados
Os metadados permitem passar campos personalizados que suas regras podem avaliar. Use isso para contexto como canal, informações do dispositivo, nível do cliente ou qualquer atributo específico do negócio.As chaves de metadados devem ser alfanuméricas com apenas underscores, com no máximo 64 caracteres. Máximo de 50 entradas por requisição.
Idempotência de requisição
As requisições de validação são idempotentes com base no campo
requestId. Se você enviar o mesmo requestId duas vezes, o Tracer retorna o resultado em cache da primeira requisição em vez de reprocessar.
O corpo da resposta é idêntico em ambos os casos. Recomenda-se que seu cliente trate os dois códigos de status como sucesso.
Timeouts de rede e novas tentativas podem causar requisições duplicadas. Sem idempotência, uma requisição repetida pode contar em dobro contra os limites ou criar registros de validação duplicados. O
requestId garante semântica de processamento exatamente uma vez.
Contrato de idempotência:
- Mesmo
requestId→ Mesma resposta (garantido) requestIddiferente → Processamento independente (mesmo que os dados da transação sejam idênticos)
Validação apenas por regras
POST /v1/validations/rules-only recebe a mesma requisição de POST /v1/validations e retorna a mesma resposta e os mesmos erros. O Tracer decide apenas pelas suas regras e não verifica nem conta nenhum limite de gastos. Use essa rota para avaliar um crédito recebido sem consumir um limite.
As duas rotas compartilham um único espaço de requestId. Um requestId já usado em qualquer uma das rotas retorna a decisão registrada para ele, então nunca reutilize um requestId entre as duas rotas.
O Tracer armazena uma validação apenas por regras como qualquer outra. Ela aparece em GET /v1/validations e nos números do dashboard. Apenas o snapshot da requisição no seu evento de auditoria a identifica, com rulesOnly: true.
Autenticação
O Tracer aceita dois modos de autenticação. Você pode usá-los de forma independente ou em conjunto.
Autenticação por chave de API
A opção mais simples. Envie sua chave de API no headerX-API-Key em cada requisição.
Autenticação via plugin (Access Manager)
O Tracer pode delegar a autenticação ao Lerian Access Manager. Isso permite autenticação centralizada em todos os serviços da Lerian.Prioridade de autenticação
Quando você habilita os dois modos, o Tracer usa esta prioridade:- Se
PLUGIN_AUTH_ENABLED=truee o endpoint não tiver a flag de apenas chave de API → autenticação via plugin - Se
API_KEY_ENABLED=trueou o endpoint carregar a flag de apenas chave de API → autenticação por chave de API
/v1/* documentada nesta referência.
Você pode configurar
POST /v1/validations e POST /v1/validations/rules-only para autenticação apenas por chave de API via API_KEY_ENABLED_ONLY_VALIDATION=true. Essas rotas então conferem a chave de API apenas quando API_KEY_ENABLED=true. Isso é útil em cenários de alta taxa de transferência em que a autenticação via plugin adiciona latência inaceitável.Autenticação na Lerian Cloud
Na Lerian Cloud, a autenticação funciona assim:- Cada requisição para
/v1/*deve carregar um token bearer JWT emitido pelo Access Manager:Authorization: Bearer <jwt>. tenantIdvem da claim do JWT, não de um header, path, body, metadados ou escopo de regra. Não existe um headerX-Tenant-ID. O identificador do tenant não tem efeito em nenhum outro lugar além da claim do token.
sub, retorna HTTP 401 e o código de erro 0474 de imediato. A claim sub é o que o escritor de auditoria usa para atribuir a ação a um principal. O Tracer falha de forma explícita em vez de registrar a mudança contra um ator de sistema genérico. Garanta que seus tokens do Access Manager sempre a carreguem.
Se o serviço estiver temporariamente no limite de capacidade para o seu tenant, as requisições retornam HTTP 503 com o código de erro 0466 e um header Retry-After. Aplique backoff e tente novamente.
Considerações de desempenho
Otimize sua integração para baixa latência e alta confiabilidade.
Orçamento de timeout
O Tracer visa uma resposta em menos de 80ms (p99). Configure o timeout do seu cliente de acordo:Estratégia de novas tentativas
Implemente a lógica de novas tentativas para falhas transitórias:Comportamento de fallback
Decida o que acontece quando o Tracer está indisponível:
Sua escolha depende da sua tolerância a risco e dos requisitos do negócio.
Atualidade dos dados
Como você controla o enriquecimento do payload, a atualidade dos dados é sua responsabilidade. O Tracer confia nos dados que você fornece e não pode detectar informações desatualizadas.
Formato de data e hora
Todos os campos de datetime devem usar o formato RFC3339 com fuso horário obrigatório: Formatos válidos:
Checklist de integração
Antes de ir para produção, verifique:
- Sua API Key está em vigor e segura
- Cada requisição inclui um requestId único (UUID)
- O cliente trata as respostas 201 e 200 como sucesso
- O timeout do seu cliente é de 100ms
- Sua lógica de novas tentativas cobre erros 5xx
- Você escolheu um comportamento de fallback
- Seu payload carrega todos os campos obrigatórios
- Os timestamps usam o formato RFC3339 com fuso horário
- Os códigos de ativo têm de 1 a 100 letras maiúsculas
- Seu sistema trata cada decisão (ALLOW/DENY/REVIEW)
- Seu sistema registra os IDs de validação para correlação com o histórico de validação
Exemplo de integração (pseudocódigo)
Próximos passos
- Motor de regras - Crie regras que avaliam o contexto que você fornece
- Limites de gastos - Configure limites que se aplicam aos escopos das suas transações
- Histórico de validação e compliance - Consulte o histórico de validação e use-o nos seus processos de compliance

