Saltar al contenido principal
Cada transacción Pix sigue un patrón: debitar al emisor, acreditar al receptor, quizás cobrar una tarifa. Cuando ese patrón existe solo en el código de la aplicación, cada equipo que toca Pix debe reimplementar la misma lógica de validación — y cada implementación es una oportunidad para inconsistencias. Las Transaction Routes mueven ese patrón al ledger mismo. Defines las reglas una vez, y Midaz las aplica en cada transacción automáticamente. El resultado son menos errores de integración, un rastro de auditoría claro y una única fuente de verdad sobre cómo fluye el dinero Pix a través de tu sistema. Esta página recorre dos escenarios del mundo real — una transferencia simple entre pares y una transferencia con cobro de tarifa — mostrando cómo configurar rutas y qué gana tu equipo al usarlas.

Por qué esto importa


Para equipos de producto y operaciones, las Transaction Routes significan flujos Pix predecibles y auditables sin depender de la aplicación para su cumplimiento. Cada transacción lleva una referencia a la ruta que siguió, lo que hace que las revisiones de cumplimiento y las investigaciones de incidentes sean directas. Para equipos de ingeniería, las rutas eliminan código de validación repetitivo. En lugar de verificar tipos de cuenta y destinos de tarifas en cada integración Pix, configuras las reglas una vez y dejas que Midaz se encargue de la aplicación a nivel de ledger.
Sin RutasCon Rutas
Cada integración debe aplicar sus propias reglas de cuentaDefine las reglas una vez, reutiliza en todas las transacciones Pix
Sin validación automática — las restricciones viven en el código de la aplicaciónMidaz rechaza transacciones que no coinciden con las reglas de la ruta
Agregar tarifas requiere cambios en cada integración PixAgrega una nueva Operation Route, crea una nueva variante de Transaction Route
Difícil rastrear qué patrón debía seguir una transacciónCada transacción almacena su ID de ruta — fácil de auditar
Para una mirada más profunda sobre cómo funcionan las Transaction Routes y las Operation Routes, consulta Transaction Routing.

Requisitos previos


Ambos escenarios asumen un entorno Midaz con la siguiente estructura ya establecida:
EntidadAliasTipoPropósito
Cuenta de Alice@alice_checkingcheckingEmisor — cuenta corriente principal de Alice
Cuenta de Bob@bob_checkingcheckingReceptor — cuenta corriente principal de Bob
Activo BRLReal brasileño, registrado como el activo operativo
Los valores en Midaz se representan en la unidad más pequeña de la moneda. Para BRL, 15000 significa R$ 150,00 (centavos).

Escenario 1: Transferencia Pix simple


Alice envía R$ 150,00 a Bob vía Pix. El dinero se mueve de una cuenta corriente a otra — sin tarifas, sin divisiones, solo una transferencia limpia entre pares.

El objetivo

  • Debitar la cuenta corriente de Alice en R$ 150,00
  • Acreditar la cuenta corriente de Bob en R$ 150,00
  • Validar que ambas cuentas sean del tipo checking antes de procesar
  • Hacer este patrón reutilizable para cada transferencia Pix entre cuentas corrientes

Configurando las rutas

1

Crear la Operation Route de origen

Esta ruta define el lado de débito de la transferencia. La regla account_type significa que cualquier cuenta del tipo checking es válida como origen — la ruta no codifica un emisor 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"
  }
}
Guarda el id devuelto — lo necesitarás al construir la Transaction Route.
2

Crear la Operation Route de destino

Esta ruta define el lado de crédito. Mismo tipo de regla: cualquier cuenta checking califica como receptor 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

Crear la Transaction Route

Agrupa ambas Operation Routes en una sola Transaction Route. Este es el patrón que representa “Transferencia Pix” en tu 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"
  }
}
Reemplaza los IDs de ejemplo con los IDs reales de las Operation Routes devueltos en los pasos anteriores.

Ejecutando una transferencia Pix

Con la ruta establecida, cada transferencia Pix hace referencia al ID de la Transaction Route. Midaz valida que las cuentas coincidan con las reglas de la ruta antes de procesar.
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"
  }
}

Qué sucede internamente

1

Midaz recibe la transacción

La solicitud incluye el ID de la Transaction Route en el campo route. Midaz carga la configuración de la ruta.
2

Validación del origen

Para cada entrada from, Midaz verifica la cuenta contra las reglas de la Operation Route de origen. La cuenta de Alice es del tipo checking — coincide con la regla account_type. La validación pasa.
3

Validación del destino

Para cada entrada to, Midaz verifica la cuenta contra las reglas de la Operation Route de destino. La cuenta de Bob es del tipo checking — la validación pasa.
4

La transacción se procesa

Ambas validaciones pasan, así que Midaz crea la transacción atómicamente: debita @alice_checking en R$ 150,00 y acredita @bob_checking en R$ 150,00.
Si Alice intentara enviar desde una cuenta savings, Midaz rechazaría la transacción — la ruta solo acepta cuentas checking como origen. No se necesita validación del lado de la aplicación.

Escenario 2: Transferencia Pix con cobro de tarifa


El mismo flujo que el Escenario 1, pero ahora el banco cobra una tarifa de R$ 1,50 en cada transferencia Pix. Esto agrega una tercera Operation Route para el destino de la tarifa, y el débito total de Alice aumenta a R$ 151,50.

Qué cambia

Ya tienes las Operation Routes de origen y destino del Escenario 1. Necesitas una Operation Route adicional para la tarifa y una nueva Transaction Route que agrupe las tres.
EntidadAliasTipoPropósito
Cuenta de ingresos por tarifas@revenue_pix_feesrevenueCuenta interna que recauda tarifas de transferencia Pix

Configurando la ruta de tarifa

1

Crear la Operation Route de tarifa

A diferencia de las rutas anteriores que usan account_type, esta usa el tipo de regla alias. Eso significa que apunta a una cuenta específica — @revenue_pix_fees — y ninguna otra cuenta puede 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

Crear la Transaction Route con tarifa

Esta ruta agrupa las rutas de origen y destino originales con la nueva ruta de tarifa. Es una Transaction Route separada de la transferencia simple — tu sistema puede ofrecer ambas 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
  }
}

Ejecutando una transferencia Pix con tarifa

Alice envía R$ 150,00 a Bob. El banco cobra R$ 1,50. El débito total de Alice es 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 es debitada R$ 151,50. Bob recibe R$ 150,00. El banco cobra R$ 1,50 en tarifas. Todo en una única transacción atómica — completamente balanceada, completamente auditable.

Qué habilita esto

  • Cobro de tarifas transparente — la tarifa es una entrada de ledger de primera clase, no metadatos ocultos. Los equipos de finanzas y cumplimiento ven exactamente a dónde fueron los R$ 1,50.
  • Bloques de construcción reutilizables — las Operation Routes de origen y destino se comparten entre las variantes simple y con tarifa. Solo agregas lo que cambia.
  • Control a nivel de ruta — tu sistema puede ofrecer tanto “Transferencia PIX” como “Transferencia PIX con Tarifa” como productos distintos, cada uno respaldado por su propia Transaction Route.
  • Evolución fácil — ¿necesitas una tarifa basada en porcentaje? ¿Una división entre múltiples cuentas de ingresos? Agrega nuevas Operation Routes y compón una nueva Transaction Route. Los flujos existentes permanecen intactos.

Entendiendo los tipos de regla


Los dos tipos de regla tienen propósitos diferentes. Elegir el correcto depende de si la cuenta en una ruta debe ser dinámica o fija.
Tipo de reglaFormato validIfComportamientoCuándo usar
account_typeArray de strings — ej., ["checking"] o ["checking", "savings"]Acepta cualquier cuenta que coincida con uno de los tipos especificadosParticipantes dinámicos — el emisor o receptor puede ser cualquier cuenta de ese tipo
aliasString — ej., "@revenue_pix_fees"Debe apuntar a una cuenta específica por su aliasParticipantes fijos — la ruta siempre apunta a la misma cuenta, como una cuenta de tarifas o liquidación
Puedes combinar ambos tipos de regla dentro de una sola Transaction Route. El Escenario 2 hace exactamente eso: account_type para el emisor y receptor dinámicos, alias para la cuenta de tarifas fija.

Qué necesitas para comenzar


RequisitoDetalles
Midaz (v3.x.x+)Ledger core con validación de Transaction Route habilitada
Configuración de validación de rutasConfigura TRANSACTION_ROUTE_VALIDATION en el .env del servicio Transaction para incluir tu organization_id:ledger_id
Cuentas y activoComo mínimo: dos cuentas de cliente y un activo BRL registrado en el ledger
Operation RoutesUna por tramo de operación (origen, destino, tarifa)
Transaction RouteAgrupa las Operation Routes en un patrón reutilizable
La validación de Transaction Route debe habilitarse explícitamente por ledger. Consulta Trabajando con Transaction Routing para los pasos de configuración.

Próximos pasos


Transaction Routing

Entiende cómo funcionan las Operation Routes y Transaction Routes a un nivel más profundo.

Transacciones

Aprende sobre el modelo de transacciones de doble entrada de Midaz y las capacidades N:N.

Pix con tarifas automatizadas

Combina el Plugin Pix con el Fees Engine para la gestión automatizada de tarifas.

Pix Switch

Explora la arquitectura completa del Plugin Pix y los modelos de conexión.