Pular para o conteúdo principal
Toda transação Pix segue um padrão: debitar o remetente, creditar o destinatário, talvez cobrar uma taxa. Quando esse padrão existe apenas no código da aplicação, cada equipe que toca o Pix precisa reimplementar a mesma lógica de validação — e cada implementação é uma chance de inconsistência. As Transaction Routes movem esse padrão para o próprio ledger. Você define as regras uma vez, e o Midaz as aplica em cada transação automaticamente. O resultado são menos erros de integração, uma trilha de auditoria clara e uma única fonte de verdade sobre como o dinheiro Pix flui pelo seu sistema. Esta página percorre dois cenários do mundo real — uma transferência simples entre pares e uma transferência com cobrança de taxa — mostrando como configurar rotas e o que sua equipe ganha ao usá-las.

Por que isso importa


Para equipes de produto e operações, as Transaction Routes significam fluxos Pix previsíveis e auditáveis sem depender da aplicação para cumprimento. Cada transação carrega uma referência à rota que seguiu, tornando revisões de conformidade e investigações de incidentes diretas. Para equipes de engenharia, as rotas eliminam código de validação repetitivo. Em vez de verificar tipos de conta e destinos de taxas em cada integração Pix, você configura as regras uma vez e deixa o Midaz cuidar da aplicação no nível do ledger.
Sem RotasCom Rotas
Cada integração deve aplicar suas próprias regras de contaDefina as regras uma vez, reutilize em todas as transações Pix
Sem validação automática — as restrições ficam no código da aplicaçãoO Midaz rejeita transações que não correspondem às regras da rota
Adicionar taxas requer mudanças em cada integração PixAdicione uma nova Operation Route, crie uma nova variante de Transaction Route
Difícil rastrear qual padrão uma transação deveria seguirCada transação armazena seu ID de rota — fácil de auditar
Para uma visão mais aprofundada de como as Transaction Routes e Operation Routes funcionam, consulte Transaction Routing.

Pré-requisitos


Ambos os cenários assumem um ambiente Midaz com a seguinte estrutura já estabelecida:
EntidadeAliasTipoPropósito
Conta da Alice@alice_checkingcheckingRemetente — conta corrente principal da Alice
Conta do Bob@bob_checkingcheckingDestinatário — conta corrente principal do Bob
Ativo BRLReal brasileiro, registrado como o ativo operacional
Os valores no Midaz são representados na menor unidade da moeda. Para BRL, 15000 significa R$ 150,00 (centavos).

Cenário 1: Transferência Pix simples


Alice envia R$ 150,00 para Bob via Pix. O dinheiro se move de uma conta corrente para outra — sem taxas, sem divisões, apenas uma transferência limpa entre pares.

O objetivo

  • Debitar a conta corrente da Alice em R$ 150,00
  • Creditar a conta corrente do Bob em R$ 150,00
  • Validar que ambas as contas são do tipo checking antes de processar
  • Tornar esse padrão reutilizável para cada transferência Pix entre contas correntes

Configurando as rotas

1

Criar a Operation Route de origem

Esta rota define o lado de débito da transferência. A regra account_type significa que qualquer conta do tipo checking é válida como origem — a rota não codifica um remetente específico.
POST /v1/organizations/{org_id}/ledgers/{ledger_id}/operation-routes

{
  "title": "PIX - Debit Sender",
  "description": "Debits the sender's checking account in a Pix transfer",
  "code": "PIX-SEND-SRC",
  "operationType": "source",
  "account": {
    "ruleType": "account_type",
    "validIf": ["checking"]
  },
  "metadata": {
    "payment_method": "pix",
    "direction": "outbound"
  }
}
Salve o id retornado — você precisará dele ao construir a Transaction Route.
2

Criar a Operation Route de destino

Esta rota define o lado de crédito. Mesmo tipo de regra: qualquer conta checking se qualifica como destinatário válido.
POST /v1/organizations/{org_id}/ledgers/{ledger_id}/operation-routes

{
  "title": "PIX - Credit Receiver",
  "description": "Credits the receiver's checking account in a Pix transfer",
  "code": "PIX-SEND-DST",
  "operationType": "destination",
  "account": {
    "ruleType": "account_type",
    "validIf": ["checking"]
  },
  "metadata": {
    "payment_method": "pix",
    "direction": "inbound"
  }
}
3

Criar a Transaction Route

Agrupe ambas as Operation Routes em uma única Transaction Route. Este é o padrão que representa “Transferência Pix” no seu sistema.
POST /v1/organizations/{org_id}/ledgers/{ledger_id}/transaction-routes

{
  "title": "PIX Transfer",
  "description": "Standard Pix transfer between two checking accounts",
  "operationRoutes": [
    "<pix-send-src-id>",
    "<pix-send-dst-id>"
  ],
  "metadata": {
    "payment_rail": "pix",
    "spi_message_type": "pacs.008",
    "regulation": "BCB_PIX"
  }
}
Substitua os IDs de exemplo pelos IDs reais das Operation Routes retornados nos passos anteriores.

Executando uma transferência Pix

Com a rota estabelecida, cada transferência Pix referencia o ID da Transaction Route. O Midaz valida que as contas correspondem às regras da rota antes de processar.
POST /v1/organizations/{org_id}/ledgers/{ledger_id}/transactions/json

{
  "chartOfAccountsGroupName": "PIX",
  "description": "Pix transfer from Alice to Bob",
  "code": "PIX-20260306-001",
  "route": "<pix-transfer-route-id>",
  "send": {
    "asset": "BRL",
    "value": 15000,
    "source": {
      "from": [
        {
          "accountAlias": "@alice_checking",
          "amount": { "asset": "BRL", "value": 15000 },
          "description": "Pix sent to Bob",
          "route": "<pix-send-src-id>"
        }
      ]
    },
    "distribute": {
      "to": [
        {
          "accountAlias": "@bob_checking",
          "amount": { "asset": "BRL", "value": 15000 },
          "description": "Pix received from Alice",
          "route": "<pix-send-dst-id>"
        }
      ]
    }
  },
  "metadata": {
    "pix_end_to_end_id": "E123456782026030614300000000001",
    "pix_key_type": "cpf",
    "pix_key": "123.456.789-00"
  }
}

O que acontece internamente

1

O Midaz recebe a transação

A requisição inclui o ID da Transaction Route no campo route. O Midaz carrega a configuração da rota.
2

Validação da origem

Para cada entrada from, o Midaz verifica a conta contra as regras da Operation Route de origem. A conta da Alice é do tipo checking — corresponde à regra account_type. A validação passa.
3

Validação do destino

Para cada entrada to, o Midaz verifica a conta contra as regras da Operation Route de destino. A conta do Bob é do tipo checking — a validação passa.
4

A transação é processada

Ambas as validações passam, então o Midaz cria a transação atomicamente: debita @alice_checking em R$ 150,00 e credita @bob_checking em R$ 150,00.
Se Alice tentasse enviar de uma conta savings, o Midaz rejeitaria a transação — a rota só aceita contas checking como origem. Nenhuma validação do lado da aplicação é necessária.

Cenário 2: Transferência Pix com cobrança de taxa


O mesmo fluxo do Cenário 1, mas agora o banco cobra uma taxa de R$ 1,50 em cada transferência Pix. Isso adiciona uma terceira Operation Route para o destino da taxa, e o débito total da Alice aumenta para R$ 151,50.

O que muda

Você já tem as Operation Routes de origem e destino do Cenário 1. Você precisa de uma Operation Route adicional para a taxa e uma nova Transaction Route que agrupe as três.
EntidadeAliasTipoPropósito
Conta de receita de taxas@revenue_pix_feesrevenueConta interna que coleta taxas de transferência Pix

Configurando a rota de taxa

1

Criar a Operation Route de taxa

Diferente das rotas anteriores que usam account_type, esta usa o tipo de regra alias. Isso significa que ela aponta para uma conta específica — @revenue_pix_fees — e nenhuma outra conta pode ser utilizada.
POST /v1/organizations/{org_id}/ledgers/{ledger_id}/operation-routes

{
  "title": "PIX - Fee Collection",
  "description": "Credits the bank's revenue account with the Pix transfer fee",
  "code": "PIX-FEE-DST",
  "operationType": "destination",
  "account": {
    "ruleType": "alias",
    "validIf": "@revenue_pix_fees"
  },
  "metadata": {
    "fee_type": "pix_transfer_fee"
  }
}
2

Criar a Transaction Route com taxa

Esta rota agrupa as rotas de origem e destino originais com a nova rota de taxa. É uma Transaction Route separada da transferência simples — seu sistema pode oferecer ambas as variantes.
POST /v1/organizations/{org_id}/ledgers/{ledger_id}/transaction-routes

{
  "title": "PIX Transfer with Fee",
  "description": "Pix transfer between checking accounts with fee collection",
  "operationRoutes": [
    "<pix-send-src-id>",
    "<pix-send-dst-id>",
    "<pix-fee-dst-id>"
  ],
  "metadata": {
    "payment_rail": "pix",
    "includes_fee": true
  }
}

Executando uma transferência Pix com taxa

Alice envia R$ 150,00 para Bob. O banco cobra R$ 1,50. O débito total da Alice é R$ 151,50.
POST /v1/organizations/{org_id}/ledgers/{ledger_id}/transactions/json

{
  "chartOfAccountsGroupName": "PIX",
  "description": "Pix transfer from Alice to Bob (with fee)",
  "code": "PIX-20260306-002",
  "route": "<pix-transfer-with-fee-route-id>",
  "send": {
    "asset": "BRL",
    "value": 15150,
    "source": {
      "from": [
        {
          "accountAlias": "@alice_checking",
          "amount": { "asset": "BRL", "value": 15150 },
          "description": "Pix sent to Bob + transfer fee",
          "route": "<pix-send-src-id>"
        }
      ]
    },
    "distribute": {
      "to": [
        {
          "accountAlias": "@bob_checking",
          "amount": { "asset": "BRL", "value": 15000 },
          "description": "Pix received from Alice",
          "route": "<pix-send-dst-id>"
        },
        {
          "accountAlias": "@revenue_pix_fees",
          "amount": { "asset": "BRL", "value": 150 },
          "description": "Pix transfer fee",
          "route": "<pix-fee-dst-id>"
        }
      ]
    }
  },
  "metadata": {
    "pix_end_to_end_id": "E123456782026030614300000000002",
    "fee_amount": 150
  }
}
Resultado: Alice é debitada em R$ 151,50. Bob recebe R$ 150,00. O banco coleta R$ 1,50 em taxas. Tudo em uma única transação atômica — totalmente balanceada, totalmente auditável.

O que isso possibilita

  • Cobrança de taxas transparente — a taxa é uma entrada de ledger de primeira classe, não metadados ocultos. As equipes de finanças e conformidade veem exatamente para onde foram os R$ 1,50.
  • Blocos de construção reutilizáveis — as Operation Routes de origem e destino são compartilhadas entre as variantes simples e com taxa. Você só adiciona o que muda.
  • Controle no nível da rota — seu sistema pode oferecer tanto “Transferência PIX” quanto “Transferência PIX com Taxa” como produtos distintos, cada um respaldado por sua própria Transaction Route.
  • Evolução fácil — precisa de uma taxa baseada em porcentagem? Uma divisão entre múltiplas contas de receita? Adicione novas Operation Routes e componha uma nova Transaction Route. Os fluxos existentes permanecem intactos.

Entendendo os tipos de regra


Os dois tipos de regra servem propósitos diferentes. Escolher o correto depende de se a conta em uma rota deve ser dinâmica ou fixa.
Tipo de regraFormato validIfComportamentoQuando usar
account_typeArray de strings — ex., ["checking"] ou ["checking", "savings"]Aceita qualquer conta que corresponda a um dos tipos especificadosParticipantes dinâmicos — o remetente ou destinatário pode ser qualquer conta daquele tipo
aliasString — ex., "@revenue_pix_fees"Deve apontar para uma conta específica pelo seu aliasParticipantes fixos — a rota sempre aponta para a mesma conta, como uma conta de taxas ou liquidação
Você pode combinar ambos os tipos de regra dentro de uma única Transaction Route. O Cenário 2 faz exatamente isso: account_type para o remetente e destinatário dinâmicos, alias para a conta de taxas fixa.

O que você precisa para começar


RequisitoDetalhes
Midaz (v3.x.x+)Ledger core com validação de Transaction Route habilitada
Configuração de validação de rotasConfigure TRANSACTION_ROUTE_VALIDATION no .env do serviço Transaction para incluir seu organization_id:ledger_id
Contas e ativoNo mínimo: duas contas de cliente e um ativo BRL registrado no ledger
Operation RoutesUma por trecho de operação (origem, destino, taxa)
Transaction RouteAgrupa as Operation Routes em um padrão reutilizável
A validação de Transaction Route deve ser habilitada explicitamente por ledger. Consulte Trabalhando com Transaction Routing para os passos de configuração.

Próximos passos


Transaction Routing

Entenda como as Operation Routes e Transaction Routes funcionam em um nível mais profundo.

Transações

Aprenda sobre o modelo de transações de dupla entrada do Midaz e as capacidades N:N.

Pix com taxas automatizadas

Combine o Plugin Pix com o Fees Engine para gestão automatizada de taxas.

Pix Switch

Explore a arquitetura completa do Plugin Pix e os modelos de conexão.