Skip to main content
O Plugin Pix Indireto (BTG) conecta a vários serviços da Lerian e a provedores externos para processar pagamentos Pix. Para configurá-lo, você define a conexão do plugin com cada serviço e prepara os dados de que esses serviços precisam. O plugin roda em duas camadas principais. A Application expõe a API do Pix e processa a lógica de negócio. Os Workers tratam os webhooks recebidos do BTG, a entrega de eventos ao seu sistema e a conciliação do DICT com o BACEN. As duas camadas compartilham a mesma configuração de base (licença, Midaz, CRM, BTG), mas têm as próprias configurações específicas de serviço.

Pré-requisitos


Antes de começar, confirme que você tem:
  • O 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 (com deploy feito e rodando)
  • Acesso aos serviços do provedor BTG (o BTG fornece as credenciais)
PIX_ISPB também serve para detectar transferências intra-PSP (P2P): quando o ISPB de destino de uma transferência é igual a esse valor, o plugin a liquida internamente em vez de encaminhá-la ao BTG, e continua reportando ao BACEN. Veja Transferências intra-PSP.

1. Licença


O plugin é uma solução enterprise e exige 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 cuida da autenticação do plugin. Quando está habilitado, ele valida todas as requisições recebidas antes de elas chegarem à API do plugin.
Quando PLUGIN_AUTH_ENABLED=true, o plugin valida o header Authorization de cada requisição para garantir que:
  • O token pertence a um usuário ou aplicação autorizada
  • O token dá acesso ao endpoint e ao método da API solicitados
Você precisa fornecer credenciais de cliente (CLIENT_ID / CLIENT_SECRET) para os serviços Midaz, CRM e de tarifas apenas 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 lança cada operação de cash-in, cash-out e devolução no Midaz como uma transação por partidas dobradas.

Conexão


Requisitos de ativo


Configure um ativo na sua organização e no seu 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 seguem essa configuração.

Configuração das contas


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

Header X-Account-Id


Muitas operações Pix exigem o header 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 diz ao plugin:
  • Qual conta usar nas operações do ledger
  • Quais dados de 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 formas diferentes conforme o tipo de operação:

Conformidade das contas


O plugin não aplica restrições de conta no nível de negócio, como contas bloqueadas ou suspensas. A 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 conta direto no Midaz. O plugin recebe uma rejeição quando tenta lançar a transação. Documentação relacionada:

4. CRM


O CRM guarda as informações do cliente (titular) e as contas bancárias associadas a ele. Cada conta do Midaz deve ter um titular e uma conta alias correspondentes no CRM para executar 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 as transações recebidas
  • Processar os workflows de devolução e de disputa

Conexão


Titulares


Os dados do titular representam o cliente 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: Criar um titular

Contas alias


As contas alias ligam uma conta do Midaz aos dados bancários dela. Cada conta alias deve incluir as informações bancárias que o ecossistema Pix exige para processar 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 é 1, registre como 0001. O plugin consegue validar a conta no CRM apenas quando o código da agência segue esse formato.

Tipos de conta aceitos

Documentação relacionada: Criar uma conta alias

5. Provedor BTG


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

Conexão


mTLS (segurança dos webhooks)


O TLS mútuo (mTLS) valida o certificado do BTG nas requisições de webhook. Ele confirma que os webhooks recebidos vêm do BTG.
Sempre habilite o mTLS em ambientes de produção. Desabilite apenas durante o desenvolvimento local.

6. Serviço de tarifas (opcional)


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

Conexão


Como funciona


Quando você define CASHIN_FEE_CALCULATION_TYPE=segment, o plugin:
  1. Busca o segmento associado à conta que recebe
  2. Calcula as tarifas aplicáveis antes de processar a transação no Midaz
  3. Distribui o pagamento recebido conforme as regras de pacote ligadas a esse segmento

Passos de configuração


  1. Crie segmentos no Midaz: defina os segmentos de conta que determinam as regras de tarifa
  2. Configure pacotes no Fees Engine: ligue cada segmento às regras de cálculo de tarifa dele
  3. Atribua segmentos às contas: crie ou atualize contas do Midaz com o ID de segmento adequado
Documentação relacionada:

  1. Conciliação do DICT (VSync)


O VSync concilia seus dados locais do DICT com o BACEN processando todos os eventos do dia relacionados a chaves. Isso garante que seu estado local fique consistente com os registros oficiais do BACEN.
Durante a conciliação, o banco 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.
A faixa CIDR restringe quais redes podem disparar a conciliação. O plugin rejeita automaticamente as requisições que vêm de fora dessa faixa.

Configuração do cache Redis


O VSync usa o Redis para fazer cache dos vínculos do BTG/DICT e dos titulares do CRM durante a conciliação. Nos deploys com Helm, o REDIS_HOST padrão aponta para o sidecar Valkey embutido, então uma instalação padrão não exige configuração extra.
Nos deploys com Helm, o REDIS_HOST padrão aponta para o sidecar Valkey embutido (<release-name>-valkey:6379). Nenhuma configuração adicional de Redis é necessária, a menos que você conecte a uma instância externa.

Conexão (sempre usada)

Pool de conexões e novas tentativas (sempre usados)

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

TLS (opcional, usado apenas se REDIS_TLS=true)

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

TTLs do cache do VSync (sempre usados)

8. Segurança dos webhooks internos


O plugin usa um canal de comunicação interno entre os serviços Worker e Application. As assinaturas HMAC-SHA256 protegem esse canal contra adulteração e ataques de replay.
Use exatamente o mesmo valor de INTERNAL_WEBHOOK_SECRET nos serviços Application e Worker. Uma divergência faz o plugin rejeitar todos os webhooks internos.

9. Camadas de worker


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

Worker de entrada


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

Worker de saída


O worker de saída envia as notificações de evento do plugin para a sua aplicação por webhooks. É assim que o seu sistema fica informado sobre os 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 que corresponder:
  1. URL de entidade: uma URL específica do 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 depois separar aos poucos em URLs por entidade conforme o seu sistema evolui.
Para tipos de evento de webhook, payloads, comportamento de novas tentativas e boas práticas, veja o guia de Webhooks.

Worker de conciliação


O worker de conciliação precisa das mesmas credenciais da camada Application para estes serviços:
  • CRM: URL e credenciais
  • BTG: URL e credenciais
  • Midaz: ID da organização
Veja as seções correspondentes acima para detalhes de cada configuração. Você pode restringir quando o worker opera configurando uma janela de horário específica. Isso ajuda a agendar as tarefas de conciliação fora do horário de pico. O plugin aceita janelas de horário que atravessam a meia-noite.
Se você deixar os dois campos vazios, o worker roda sem restrição de horário (24/7).
O worker sempre interpreta a janela de conciliação no fuso America/Sao_Paulo (BRT), qualquer que seja o relógio do contêiner ou a variável TZ. O worker embute os dados de fuso horário da IANA. A janela continua alinhada com o bloqueio de escrita do DICT do BACEN, mesmo em imagens mínimas ou distroless. Você não precisa definir TZ.
Os endpoints de cashout e de devolução do Pix Indireto aceitam idempotência pelo header de requisição X-Idempotency, com TTL configurável por X-TTL. Para estratégias de nova tentativa e detalhes de implementação, veja Novas tentativas e idempotência.

10. Observabilidade (OpenTelemetry)


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

Exporter: gRPC e TLS


O plugin exporta traces, métricas e logs por OTLP/gRPC. O esquema do endpoint controla a segurança do transporte:
Exporters inseguros (texto puro) são rejeitados fora de ambientes de desenvolvimento. Em staging ou produção, use um endpoint https://, ou aceite o risco explicitamente pela permissão de OTEL inseguro do lib-commons apenas quando você controla 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.) que escute na porta gRPC:
O collector então distribui a telemetria para os seus backends de tracing, métricas e logs.

11. Health e readiness


A Application e os Workers expõem uma probe de readiness em /readyz (ao lado das verificações padrão de liveness). Aponte a probe de readiness do seu orquestrador para esse endpoint para o tráfego ser roteado apenas quando o serviço e as dependências dele estiverem prontos.

Propósito da transferência (MED 2.0)


O endpoint de cashout aceita um header opcional X-Purpose que identifica o propósito da transação, usado nas transferências de devolução do MED 2.0. Quando omitido, o padrão é TRANSFER.
Os valores aceitos são TRANSFER e INSTANT_PAYMENT_REFUND. Veja MED 2.0 — Funds Recovery para detalhes.

Próximos passos


Com o plugin configurado, você pode começar a operar o Pix.