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.
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.
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.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:
| Propriedade | Valor |
|---|---|
| Tipo | currency |
| Código | BRL |
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 está executando 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:| Tipo de fluxo | Como o plugin usa o ID da conta |
|---|---|
| Não transacional (por exemplo, criação de chaves ou QR Codes) | Busca os dados do cliente e da conta bancária no CRM |
| Transacional (por exemplo, pagamentos, devoluções) | Busca os dados do cliente para iniciar o pagamento |
| Valida os dados da conta para autorização de pagamento recebido | |
| Executa a transação no ledger |
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 é responsável por 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
| Campo | Requisito | Exemplo |
|---|---|---|
name | No máximo 120 caracteres | Maria Silva Santos |
document | Para NATURAL_PERSON, um CPF com 11 dígitos; para LEGAL_PERSON, um CNPJ com 14 dígitos (apenas números) | 12345678900 |
type | Tipo de pessoa (valores enum do CRM) | NATURAL_PERSON |
Campos opcionais
| Campo | Quando usar |
|---|---|
legalPerson.tradeName | Ao associar um nome fantasia aos dados da chave |
addresses.primary | Obrigatório para a criação de cobrança com vencimento |
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
| Campo | Requisito | Exemplo |
|---|---|---|
accountId | ID da conta no Midaz (UUID) | 3c90c3cc-0d44-4b50-8888-8dd25736052a |
bankingDetails.branch | Exatamente 4 dígitos | 0001 |
bankingDetails.account | De 1 a 20 dígitos | 123456789 |
bankingDetails.type | Tipo de conta (veja a tabela abaixo) | CACC |
bankingDetails.openingDate | Formato YYYY-MM-DD | 2024-01-15 |
Tipos de conta suportados
| Código | Descrição |
|---|---|
CACC | Conta corrente |
SLRY | Conta salário |
SVGS | Conta poupança |
TRAN | Conta de pagamento |
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.
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:
- Recupera o segmento associado à conta recebedora
- Calcula as taxas aplicáveis antes de processar a transação no Midaz
- Distribui o pagamento recebido de acordo com as regras de pacote vinculadas a esse segmento
Passos de configuração
- Crie segmentos no Midaz — Defina os segmentos de conta que determinam as regras de taxa
- Configure pacotes no Fee Engine — Vincule cada segmento às suas regras de cálculo de taxa
- Atribua segmentos às contas — Crie ou atualize contas do Midaz com o ID de segmento apropriado
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.
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)
| Var | Tipo | Padrão | Descrição |
|---|---|---|---|
REDIS_HOST | string (host:port, CSV) | <release>-valkey:6379 (Helm chart) | Endereço(s) do Redis. O padrão aponta para o Valkey embutido (<release-name>-valkey:6379). Múltiplos endereços separados por vírgula definem a topologia Sentinel/Cluster. |
REDIS_MASTER_NAME | string | "" | Nome do master do Sentinel. Vazio = standalone (conexão direta). |
REDIS_DB | int | 0 | Número do banco de dados lógico do Redis. |
REDIS_PROTOCOL | int | 3 | Versão do protocolo RESP (2 ou 3). |
Pool de conexões e retentativas (sempre usado)
| Var | Tipo | Padrão | Descrição |
|---|---|---|---|
REDIS_POOL_SIZE | int | 10 | Máximo de conexões no pool. |
REDIS_MIN_IDLE_CONNS | int | 0 | Mínimo de conexões ociosas mantidas prontas. |
REDIS_READ_TIMEOUT | int (segundos) | 3 | Timeout da operação de leitura. |
REDIS_WRITE_TIMEOUT | int (segundos) | 3 | Timeout da operação de escrita. |
REDIS_DIAL_TIMEOUT | int (segundos) | 5 | Timeout para estabelecer a conexão inicial. |
REDIS_POOL_TIMEOUT | int (segundos) | 2 | Timeout aguardando uma conexão livre do pool. |
REDIS_MAX_RETRIES | int | 3 | Máximo de retentativas para um comando que falhou. |
REDIS_MIN_RETRY_BACKOFF | int (milissegundos) | 8 | Atraso mínimo entre retentativas. |
REDIS_MAX_RETRY_BACKOFF | int (segundos) | 512 | Atraso máximo entre retentativas. Observação: armazenado em segundos no código (unidade diferente da mínima). |
Autenticação (opcional — usada apenas se definida)
| Var | Tipo | Padrão | Descrição |
|---|---|---|---|
REDIS_PASSWORD | string (secret) | "" | Senha do Redis. Vazio = sem autenticação por senha. |
TLS (opcional — usado apenas se REDIS_TLS=true)
| Var | Tipo | Padrão | Descrição |
|---|---|---|---|
REDIS_TLS | bool | false | Habilita o TLS. Obrigatoriamente true em DEPLOYMENT_MODE=saas (validado na inicialização). |
REDIS_CA_CERT | string (PEM base64) | "" | Certificado CA (base64) para validar o servidor quando o TLS estiver ativo. |
Autenticação GCP IAM (opcional — usada apenas se REDIS_USE_GCP_IAM=true)
| Var | Tipo | Padrão | Descrição |
|---|---|---|---|
REDIS_USE_GCP_IAM | bool | false | Habilita a autenticação GCP IAM (Memorystore) em vez de senha. |
REDIS_SERVICE_ACCOUNT | string | "" | Conta de serviço do GCP que gera o token de acesso. |
GOOGLE_APPLICATION_CREDENTIALS | string | "" | Caminho das credenciais do GCP (lido via CredentialsBase64FromEnvValue) para gerar o token. |
REDIS_TOKEN_LIFETIME | int (minutos) | 60 | Tempo de vida do token IAM gerado. |
REDIS_TOKEN_REFRESH_DURATION | int (minutos) | 45 | Intervalo de renovação do token (deve ser menor que o tempo de vida). |
TTLs de cache do VSync (sempre usados)
| Var | Tipo | Padrão | Descrição |
|---|---|---|---|
CACHE_BTG_ENTRY_TTL | Go duration | 30m | TTL do cache para entradas BTG/DICT no Redis. Valor negativo reverte para o padrão. |
CACHE_CRM_HOLDER_TTL | Go duration | 30m | TTL do cache para titulares do CRM no Redis. Valor negativo reverte para o padrão. |
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.
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:- URL de entidade — Uma URL específica para o tipo de evento (por exemplo,
WEBHOOK_DICT_CLAIM_URL) - URL de fluxo — Uma URL para a categoria mais ampla (por exemplo,
WEBHOOK_DICT_URL) - URL padrão — A URL de fallback (
WEBHOOK_DEFAULT_URL)
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
Se você deixar os dois campos vazios, o worker é executado sem restrições de horário — 24/7.
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:
| Valor do endpoint | Transporte | Segurança |
|---|---|---|
https://collector:4317 | gRPC sobre TLS | Seguro (recomendado para produção) |
http://collector:4317 | gRPC, texto plano | Inseguro — inferido automaticamente |
collector:4317 (apenas host:port) | gRPC, texto plano | Inseguro — inferido automaticamente |
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:
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.
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:
- Webhooks — Tipos de evento, payloads, retentativas e boas práticas
- MED 2.0 — Recuperação de Fundos — Recuperação de fraude entre contas e o cabeçalho X-Purpose
- Operações de devolução — Devoluções parciais distribuídas e desbloqueio
- Transferências intra-PSP — Liquidação P2P interna e reporte TRCK002
- Domínios principais: DICT — Entendendo a gestão de chaves Pix
- Domínios principais: transações — Fluxos e ciclo de vida das transações
- Domínios principais: QR Codes — Geração de QR Code estático e dinâmico
- Referência da API — Documentação completa da API para operações de DICT, Reivindicações, Transações, QR Codes e MED

