Skip to main content
O Plugin Pix Indireto (BTG) conecta-se a diversos serviços da Lerian e provedores externos para processar pagamentos Pix. Configurá-lo envolve definir a conexão do plugin com cada serviço e preparar os dados de que esses serviços precisam para operar. O plugin é executado em duas camadas principais — uma Aplicação que expõe a API Pix e processa a lógica de negócio, e um conjunto de Workers que tratam dos webhooks de entrada vindos do BTG, da entrega de eventos de saída para o seu sistema e da conciliação DICT com o BACEN. As duas camadas compartilham a mesma configuração de base (licença, Midaz, CRM, BTG), mas têm suas próprias configurações específicas de serviço.

Pré-requisitos


Antes de começar, certifique-se de que você tem:
  • Seu ISPB (Identificador do Sistema de Pagamentos Brasileiro) — o identificador de 8 dígitos derivado do CNPJ da sua instituição
  • Acesso às suas instâncias do Midaz e do CRM (implantadas e em execução)
  • Acesso aos serviços do provedor BTG (o BTG fornece as credenciais)
PIX_ISPB também é usado para detectar transferências intra-PSP (P2P): quando o ISPB de destino de uma transferência corresponde a esse valor, o plugin liquida a transferência internamente em vez de roteá-la para o BTG, ainda reportando-a ao BACEN. Consulte Transferências intra-PSP.

1. Licença


O plugin é uma solução enterprise e requer uma licença válida para operar. A Lerian fornece a chave de licença durante o onboarding.
Documentação relacionada: Licença da Lerian

2. Access Manager (opcional)


O Access Manager trata da autenticação do plugin. Quando habilitado, ele valida todas as requisições recebidas antes que elas cheguem à API do plugin.
Quando PLUGIN_AUTH_ENABLED=true, o plugin valida o cabeçalho Authorization de cada requisição para garantir que:
  • O token pertence a um usuário ou aplicação autorizado
  • O token concede acesso ao endpoint e método de API solicitados
Você só precisa fornecer credenciais de cliente (CLIENT_ID / CLIENT_SECRET) para os serviços Midaz, CRM e Fee se esses serviços também tiverem a autenticação do Access Manager habilitada.
Documentação relacionada: Access Manager

3. Midaz


O Midaz é o ledger central de todas as transações Pix que o plugin processa. O plugin registra toda operação de cash-in, cash-out e devolução no Midaz como uma transação de partidas dobradas.

Conexão


Requisitos de ativo


Configure um ativo na sua organização e ledger com estas propriedades: Vincule todas as contas ao seu ledger usando o ativo BRL. O plugin rejeita operações em contas que não correspondam a essa configuração.

Configuração de conta


Antes de usar o plugin, crie no Midaz uma conta para cada cliente sob o seu ISPB. Use o endpoint Create an Account para configurar as contas. Cada conta deve:
  • Pertencer à organização e ao ledger que você configurou
  • Usar o ativo BRL

Cabeçalho X-Account-Id


Muitas operações Pix exigem o cabeçalho X-Account-Id para identificar qual conta executa a ação. Esse ID corresponde ao ID da conta no ledger do Midaz. Quando você chama um endpoint do plugin, o valor de X-Account-Id informa ao plugin:
  • Qual conta usar nas operações de ledger
  • Quais dados do cliente buscar no CRM
  • Qual saldo validar e atualizar

Como o plugin usa o ID da conta

O plugin usa o ID da conta de forma diferente dependendo do tipo de operação:

Conformidade da conta


O plugin não impõe restrições de conta em nível de negócio, como contas bloqueadas ou suspensas. Sua aplicação deve validar o status da conta antes de chamar o plugin. Para impedir liquidações Pix em uma conta específica, bloqueie-a diretamente no Midaz. O plugin recebe uma rejeição ao tentar registrar a transação. Documentação relacionada:

4. CRM


O CRM armazena as informações do cliente (titular) e suas contas bancárias associadas. Toda conta do Midaz deve ter um titular e uma conta alias correspondentes no CRM para realizar operações Pix. O plugin consulta os dados do CRM para:
  • Registrar e validar chaves Pix
  • Montar as mensagens de pagamento para o BACEN
  • Autorizar transações recebidas
  • Processar fluxos de devolução e disputa

Conexão


Titulares


Os dados do titular representam o cliente que é dono da conta. Crie cada titular no CRM antes de executar qualquer operação Pix para esse cliente.

Campos obrigatórios

Campos opcionais

Documentação relacionada: Create a Holder

Contas alias


As contas alias vinculam uma conta do Midaz aos seus dados bancários. Cada conta alias deve incluir as informações bancárias que o ecossistema Pix exige para o processamento de transações.

Campos obrigatórios

O campo bankingDetails.branch deve conter exatamente 4 dígitos. Complete com zeros à esquerda se necessário. Por exemplo, se o número da agência for 1, registre-o como 0001. O plugin só consegue validar a conta no CRM quando o código da agência segue esse formato.

Tipos de conta suportados

Documentação relacionada: Create an Alias Account

5. Provedor BTG


O BTG é o participante direto que conecta sua instituição à infraestrutura Pix do BACEN. O BTG fornece as credenciais diretamente quando sua instituição se cadastra na integração indireta com o BACEN.

Conexão


mTLS (segurança de webhook)


O TLS mútuo (mTLS) adiciona uma camada extra de segurança ao validar o certificado do BTG nas requisições de webhook. Isso garante que os webhooks recebidos realmente se originam do BTG.
Sempre habilite o mTLS em ambientes de produção. Desabilite-o apenas durante o desenvolvimento local.

6. Serviço de Fee (opcional)


Habilite o cálculo de taxas para cobrar e distribuir automaticamente as taxas sobre pagamentos recebidos. Isso é opcional — se você não configurar, o plugin processa as transações sem cálculo de taxas.

Conexão


Como funciona


Quando você define CASHIN_FEE_CALCULATION_TYPE=segment, o plugin:
  1. Recupera o segmento associado à conta recebedora
  2. Calcula as taxas aplicáveis antes de processar a transação no Midaz
  3. Distribui o pagamento recebido de acordo com as regras de pacote vinculadas a esse segmento

Passos de configuração


  1. Crie segmentos no Midaz — Defina os segmentos de conta que determinam as regras de taxa
  2. Configure pacotes no Fees Engine — Vincule cada segmento às suas regras de cálculo de taxa
  3. Atribua segmentos às contas — Crie ou atualize contas do Midaz com o ID de segmento apropriado
Documentação relacionada:

7. Conciliação DICT (VSync)


O VSync concilia seus dados DICT locais com o BACEN processando todos os eventos relacionados a chaves do dia. Isso garante que seu estado local permaneça consistente com os registros oficiais do BACEN.
Durante a conciliação, o banco de dados bloqueia temporariamente as operações de escrita para evitar inconsistências de dados com o BACEN. Planeje a janela de bloqueio de escrita para períodos de baixo tráfego.
O intervalo CIDR restringe quais redes podem disparar a conciliação. O plugin rejeita automaticamente as requisições de fora desse intervalo.

Configuração de cache Redis


O VSync usa o Redis para armazenar em cache as entradas BTG/DICT e os titulares do CRM durante a conciliação. Em implantações via Helm, o REDIS_HOST padrão aponta para o sidecar Valkey embutido, portanto nenhuma configuração extra é necessária para uma instalação padrão.
Em implantações via Helm, o REDIS_HOST padrão aponta para o sidecar Valkey embutido (<release-name>-valkey:6379) — nenhuma configuração de Redis adicional é necessária, a menos que você se conecte a uma instância externa.

Conexão (sempre usada)

Pool de conexões e retentativas (sempre usado)

Autenticação (opcional — usada apenas se definida)

TLS (opcional — usado apenas se REDIS_TLS=true)

Autenticação GCP IAM (opcional — usada apenas se REDIS_USE_GCP_IAM=true)

TTLs de cache do VSync (sempre usados)

8. Segurança de webhook interno


O plugin usa um canal de comunicação interno entre os serviços Worker e Aplicação. Assinaturas HMAC-SHA256 protegem esse canal para evitar adulteração e ataques de replay.
Use exatamente o mesmo valor de INTERNAL_WEBHOOK_SECRET nos serviços Aplicação e Worker. Uma divergência faz com que o plugin rejeite todos os webhooks internos.

9. Camadas de worker


O plugin opera com três camadas de worker, cada uma tratando de uma parte diferente do ciclo de vida do Pix. Todos os workers são executados como serviços separados ao lado da aplicação principal.

Worker de entrada


O worker de entrada recebe notificações de webhook do BTG e as encaminha para a sua aplicação para processamento.

Worker de saída


O worker de saída envia notificações de eventos do plugin para a sua aplicação via webhooks. É assim que o seu sistema se mantém informado sobre eventos Pix (transferências, devoluções, reivindicações, disputas).

Prioridade de resolução de URL

O plugin resolve as URLs de webhook nesta ordem, usando a primeira correspondência:
  1. URL de entidade — Uma URL específica para o tipo de evento (por exemplo, WEBHOOK_DICT_CLAIM_URL)
  2. URL de fluxo — Uma URL para a categoria mais ampla (por exemplo, WEBHOOK_DICT_URL)
  3. URL padrão — A URL de fallback (WEBHOOK_DEFAULT_URL)
Você pode começar apenas com WEBHOOK_DEFAULT_URL para receber todos os eventos em um único endpoint e, em seguida, dividir gradualmente em URLs específicas por entidade conforme o seu sistema evolui.
Para um aprofundamento sobre tipos de evento de webhook, payloads, comportamento de retentativa e boas práticas, consulte o guia de Webhooks.

Worker de conciliação


O worker de conciliação precisa das mesmas credenciais da camada Aplicação para estes serviços:
  • CRM — URL e credenciais
  • BTG — URL e credenciais
  • Midaz — ID da organização
Consulte as seções correspondentes acima para detalhes sobre cada configuração. Você pode restringir quando o worker opera configurando uma janela de tempo específica. Isso é especialmente útil para agendar as tarefas de conciliação em horários de baixo movimento. O plugin suporta janelas de tempo que cruzam a meia-noite.
Se você deixar os dois campos vazios, o worker é executado sem restrições de horário — 24/7.
O worker sempre interpreta a janela de conciliação no fuso horário America/Sao_Paulo (BRT), independentemente do relógio do contêiner ou da variável TZ. O worker incorpora os dados de fuso horário da IANA. A janela permanece alinhada ao bloqueio de escrita do DICT do BACEN, mesmo em imagens mínimas ou distroless. Você não precisa configurar TZ.
Os endpoints de cashout e devolução do Pix Indireto suportam idempotência através do cabeçalho de requisição X-Idempotency, com TTL configurável via X-TTL. Para estratégias de retentativa e detalhes de implementação, consulte Retentativas e idempotência.

10. Observabilidade (OpenTelemetry)


O plugin vem com instrumentação completa do OpenTelemetry (traces, métricas e logs) nas camadas Aplicação e Worker. Todo fluxo Pix é rastreado de ponta a ponta — transferências (cash-in e cash-out), devoluções, webhooks de entrada e saída, conciliação DICT e liquidação intra-PSP — para que você possa acompanhar um único pagamento ao longo das chamadas ao plugin, Midaz, CRM e BTG. A telemetria fica desabilitada por padrão. Habilite-a e aponte o exportador OTLP para o seu collector:
Quando ENABLE_TELEMETRY=true, OTEL_EXPORTER_OTLP_ENDPOINT é obrigatório. Defina as mesmas variáveis OTel na Aplicação e em cada Worker para que os traces se correlacionem entre os serviços.

Exportador: gRPC e TLS


O plugin exporta traces, métricas e logs via OTLP/gRPC. O esquema do endpoint controla a segurança do transporte:
Exportadores inseguros (texto plano) são rejeitados fora de ambientes de desenvolvimento. Em staging ou produção, use um endpoint https://, ou reconheça explicitamente o risco por meio da permissão de OTEL inseguro da lib-commons somente quando você controlar totalmente o caminho de rede até o collector.

Exemplo: endpoint do collector


Aponte o plugin para qualquer collector compatível com OTLP (o OpenTelemetry Collector, Grafana LGTM/Alloy, etc.) escutando na porta gRPC:
O collector então distribui a telemetria para os seus backends de tracing, métricas e logging.

11. Saúde e prontidão


A Aplicação e os Workers expõem uma sonda de prontidão em /readyz (junto com as verificações de liveness padrão). Aponte a sonda de prontidão do seu orquestrador para esse endpoint para que o tráfego só seja roteado quando o serviço e suas dependências estiverem prontos.

Finalidade da transferência (MED 2.0)


O endpoint de cashout aceita um cabeçalho opcional X-Purpose que identifica a finalidade da transação, usado em transferências de devolução do MED 2.0. Quando omitido, o padrão é TRANSFER.
Os valores suportados são TRANSFER e INSTANT_PAYMENT_REFUND. Consulte MED 2.0 — Recuperação de Fundos para detalhes.

Próximos passos


Com o plugin totalmente configurado, você está pronto para começar a operar o Pix. Explore estes tópicos para se aprofundar: