APIs de Lerian
Esta sección responde preguntas frecuentes sobre las APIs de Lerian, cubriendo comportamiento general, configuración y mejores prácticas en todos los servicios.
¿Existe un número máximo de registros por página en los listados de API? ¿Puedo aumentar este límite?
¿Existe un número máximo de registros por página en los listados de API? ¿Puedo aumentar este límite?
MAX_PAGINATION_LIMIT en tu configuración de despliegue. Una vez actualizada y reiniciada la aplicación, la API aceptará tamaños de página más grandes.Importante: Aumentar el tamaño de página puede afectar los tiempos de respuesta, especialmente en entornos que manejan grandes conjuntos de datos. Siempre prueba exhaustivamente en staging antes de aplicar cambios en producción.Multi-tenancy y SaaS
Preguntas frecuentes sobre aislamiento de datos, alcance de tenant y cómo funciona multi-tenancy en los despliegues de Lerian.
¿Mis datos están aislados de los de otros clientes en SaaS?
¿Mis datos están aislados de los de otros clientes en SaaS?
¿Necesito pasar un ID de tenant en mis solicitudes de API?
¿Necesito pasar un ID de tenant en mis solicitudes de API?
¿Puedo tener múltiples Organizaciones bajo un solo tenant?
¿Puedo tener múltiples Organizaciones bajo un solo tenant?
¿La API es diferente entre SaaS y despliegues autoalojados?
¿La API es diferente entre SaaS y despliegues autoalojados?
Midaz
Aquí encontrarás respuestas a preguntas comunes sobre Organizaciones, Ledgers, Cuentas, Transacciones y más en Midaz.
Organizaciones
¿Las diferentes Organizaciones se comunican entre sí?
¿Las diferentes Organizaciones se comunican entre sí?
¿Puedo usar una única licencia en múltiples Organizaciones?
¿Puedo usar una única licencia en múltiples Organizaciones?
¿Puede una Organización tener múltiples Plugins?
¿Puede una Organización tener múltiples Plugins?
¿Puede una Organización tener múltiples Ledgers?
¿Puede una Organización tener múltiples Ledgers?
¿Puedo crear transacciones entre una Organización Padre y una Organización Hija?
¿Puedo crear transacciones entre una Organización Padre y una Organización Hija?
Ledgers
¿Los diferentes Ledgers se comunican entre sí?
¿Los diferentes Ledgers se comunican entre sí?
¿Cómo puedo hacer transacciones entre Ledgers?
¿Cómo puedo hacer transacciones entre Ledgers?
¿Necesito un Ledger separado para cada Plugin?
¿Necesito un Ledger separado para cada Plugin?
Activos
¿Puede un Activo vincularse a múltiples Cuentas?
¿Puede un Activo vincularse a múltiples Cuentas?
¿Qué tipos de Activos puedo usar?
¿Qué tipos de Activos puedo usar?
- currency: Monedas fiduciarias tradicionales como BRL, USD y EUR.
- crypto: Activos digitales como BTC, ETH y otras criptomonedas.
- commodities: Bienes tangibles como oro, soja y petróleo.
- others: Activos personalizados, incluyendo puntos de lealtad y valores tokenizados.
Portafolios
¿Cómo funciona un Portafolio?
¿Cómo funciona un Portafolio?
segment_id, también tendrá dos valores correspondientes de account_id. Para simplificar la recuperación, se crea un Portafolio para ese CPF, vinculando ambas cuentas bajo una única estructura. Esto garantiza un acceso y gestión más fáciles de cuentas relacionadas.Cuentas
¿Puede una Cuenta estar asociada con múltiples Activos?
¿Puede una Cuenta estar asociada con múltiples Activos?
¿Qué es una Cuenta Externa?
¿Qué es una Cuenta Externa?
¿Cómo puedo crear una Cuenta Externa?
¿Cómo puedo crear una Cuenta Externa?
¿Puede una Cuenta estar vinculada a varios Segmentos?
¿Puede una Cuenta estar vinculada a varios Segmentos?
account_id) puede estar vinculada solo a un Segmento (segment_id).¿Existe un límite en cuántas Cuentas puedo crear en Midaz?
¿Existe un límite en cuántas Cuentas puedo crear en Midaz?
¿Cuál es el proceso para agregar fondos a una cuenta o realizar un depósito usando dinero que proviene de fuera del entorno del Ledger (Midaz)?
¿Cuál es el proceso para agregar fondos a una cuenta o realizar un depósito usando dinero que proviene de fuera del entorno del Ledger (Midaz)?
- En el Ledger de Midaz, cuando se crea un Activo (por ejemplo, BRL), también se genera una Cuenta Externa asociada con ese activo.
- Esta Cuenta Externa actúa como puerta de enlace entre el ecosistema de Lerian y el mundo externo. En otras palabras, sirve como espejo de los saldos mantenidos por la institución en su cuenta PI, cuenta de liquidación, cuenta de reserva, o incluso una cuenta bancaria tradicional o de pago que mantiene los fondos reales.
- Para depositar fondos en una cuenta de usuario con un Activo específico proveniente de fuera del Ledger de Midaz, el proceso es el siguiente:
- Inicia una transacción donde la fuente es la Cuenta Externa y el destino es la(s) cuenta(s) objetivo.
- Como resultado, la Cuenta Externa se debitará por el monto transferido (volviéndose negativa), mientras que la(s) cuenta(s) destino se acreditarán en consecuencia, según los valores proporcionados en la carga útil de la transacción.
Transacciones
¿Cuál es la estructura mínima de una Transacción?
¿Cuál es la estructura mínima de una Transacción?
- Operación 1: Debitar R$ 100 de la Cuenta A.
- Operación 2: Acreditar R$ 100 a la Cuenta B.
¿Es posible generar un recibo de transferencia en PDF que contenga los detalles de una transacción completada?
¿Es posible generar un recibo de transferencia en PDF que contenga los detalles de una transacción completada?
- Vía APIs – Recupera datos de transacciones a través de nuestras APIs, permitiéndote generar un recibo visual en el formato de tu elección.
- Usando el Reporter – Extrae datos de transacciones y crea recibos visuales personalizados.
- A través de Lerian Console – Accede a información de transacciones directamente desde Lerian Console.
Entidades
¿Cómo puedo crear una Entidad?
¿Cómo puedo crear una Entidad?
entity_id) está abierta para IDs externos, sin validación impuesta por Midaz. Esto significa que puedes usar los IDs que ya existen en tu base de datos, integrándolos sin problemas en tu sistema.Idempotencia
¿Qué sucede si no envío una clave de idempotencia?
¿Qué sucede si no envío una clave de idempotencia?
¿Puedo reutilizar una clave de idempotencia en diferentes endpoints?
¿Puedo reutilizar una clave de idempotencia en diferentes endpoints?
¿Qué sucede si cambio el TTL en un reintento?
¿Qué sucede si cambio el TTL en un reintento?
¿La respuesta reproducida siempre será idéntica?
¿La respuesta reproducida siempre será idéntica?
¿Cuál es el TTL predeterminado si no envío X-TTL?
¿Cuál es el TTL predeterminado si no envío X-TTL?
Contabilidad en Midaz
¿Cómo puedo reflejar mi propio Plan de Cuentas en Midaz?
¿Cómo puedo reflejar mi propio Plan de Cuentas en Midaz?
- Tipos de Cuenta – Crea las categorías lógicas de tu plan (por ejemplo, Activos, Pasivos, Ingresos, Gastos) y asígnalas a cuentas en tu Ledger. Cuando la función de Tipos de Cuenta está habilitada, el campo tipo en la API de Cuentas se vuelve obligatorio y debe coincidir con uno de los valores que has registrado.
- Enrutamiento de Transacciones – Usa Rutas de Operación para validar cada “pierna” de una transacción (por ejemplo, el débito debe provenir de un tipo de cuenta
user_wallet) y Rutas de Transacción para definir patrones completos de transacción que se alineen con tu lógica contable.
Plugins
Los plugins extienden las capacidades de Midaz, habilitando integración fluida y orquestación de procesos. Diseñados para eliminar complejidad, proporcionan abstracciones poderosas que te permiten enfocarte en tu modelo de negocio mientras garantizan eficiencia y escalabilidad. Explora las preguntas más comunes sobre cómo funcionan los plugins, su despliegue y las opciones disponibles para mejorar tus operaciones.
¿Qué son los Plugins?
¿Qué son los Plugins?
¿Pueden usarse los plugins sin Midaz?
¿Pueden usarse los plugins sin Midaz?
¿Cómo se distribuyen los plugins?
¿Cómo se distribuyen los plugins?
¿Qué opciones de plugins ofrece Lerian?
¿Qué opciones de plugins ofrece Lerian?
- Plugins Nativos: Desarrollados e integrados completamente en el Ledger de Midaz por Lerian, estos plugins garantizan soporte completo e integración fluida con la plataforma.
- Plugins de Marketplace: Creados por socios de Lerian para servir nichos de mercado específicos, estos plugins están disponibles en el marketplace. Lerian facilita su integración en Midaz, pero su oferta y soporte son gestionados directamente por los socios respectivos.
Plugin Fees
Preguntas frecuentes sobre el Plugin Fees — el servicio de Lerian responsable de calcular y cobrar tarifas sobre transacciones financieras.
Conceptos Generales
¿Qué es el Plugin Fees?
¿Qué es el Plugin Fees?
- Paquetes de Tarifas (
/v1/packages): define las reglas de cobro por transacción (tarifa fija, porcentual, o el mayor entre ambos). - Billing Packages (
/v1/billing-packages): define cobros periódicos por volumen de transacciones o por mantenimiento de cuentas. - Cálculo y Estimación (
/v1/feesy/v1/estimates): endpoints para calcular tarifas en tiempo real o simular antes de confirmar.
¿Cómo se integra el Plugin Fees en el ecosistema Lerian?
¿Cómo se integra el Plugin Fees en el ecosistema Lerian?
¿Qué necesito enviar en cada solicitud al Plugin Fees?
¿Qué necesito enviar en cada solicitud al Plugin Fees?
X-Organization-Id con el ID de tu organización en Midaz. Este es un header de alcance de organización específico del Plugin Fees, no un identificador de tenant — el contexto de tu tenant se resuelve automáticamente desde el JWT. Cuando el plugin de autenticación está activo, también se requiere un Bearer token en el header Authorization.¿Qué base de datos utiliza el Plugin Fees?
¿Qué base de datos utiliza el Plugin Fees?
deletedAt. Esto significa que los registros “eliminados” no aparecen en los listados, pero pueden ser auditados.¿Cuál es la versión mínima de Midaz necesaria para usar el Plugin Fees?
¿Cuál es la versión mínima de Midaz necesaria para usar el Plugin Fees?
Paquetes de Tarifas
¿Qué es un Paquete de Tarifas?
¿Qué es un Paquete de Tarifas?
Package) es un conjunto de reglas de cobro agrupadas bajo un feeGroupLabel. Cada paquete está vinculado a una Organización + Ledger y, opcionalmente, a un Segment. Un paquete puede contener múltiples tarifas individuales (objetos Fee), cada una con su propia lógica de cálculo. Más información sobre Paquetes de Tarifas.¿Cómo crear un Paquete de Tarifas?
¿Cómo crear un Paquete de Tarifas?
POST /v1/packages con el siguiente cuerpo. Consulta la referencia de la API Create Package para detalles completos.¿Se puede desactivar un paquete temporalmente?
¿Se puede desactivar un paquete temporalmente?
enable: false al crear o actualizar el paquete. Un paquete desactivado no se considera en el cálculo de tarifas, incluso si el contexto de la transacción coincide con tu alcance.¿Cómo funciona el alcance de un paquete (minimumAmount / maximumAmount)?
¿Cómo funciona el alcance de un paquete (minimumAmount / maximumAmount)?
[minimumAmount, maximumAmount]. Si la transacción no encaja en este rango, el paquete se ignora.Ejemplo: Un paquete con minimumAmount: 100 y maximumAmount: 5000 solo cobrará tarifas en transacciones entre 100 y 5.000.maximumAmount no está definido, el paquete puede aplicarse sin límite superior — verifica las reglas de validación de tu versión.¿Puedo filtrar un paquete por ruta de transacción?
¿Puedo filtrar un paquete por ruta de transacción?
transactionRoute en el paquete. Cuando está definido, el paquete solo se considerará en transacciones con esa ruta específica (ej: "PIX", "TED", "BOLETO").¿Qué son los waivedAccounts?
¿Qué son los waivedAccounts?
waivedAccounts, las tarifas del paquete no se aplican.¿Los endpoints de listado tienen paginación?
¿Los endpoints de listado tienen paginación?
GET /v1/packages, GET /v1/billing-packages) soportan los parámetros de query limit y page para paginación.Modelos de Cálculo
¿Qué modelos de cálculo están disponibles?
¿Qué modelos de cálculo están disponibles?
applicationRule dentro de calculationModel define cómo se calcula la tarifa. Consulta Modelos de Cálculo para detalles completos. Hay tres opciones:| Regla | Descripción |
|---|---|
flatFee | Tarifa fija en valor absoluto |
percentual | Tarifa porcentual sobre el valor de referencia |
maxBetweenTypes | Calcula flat y porcentual; aplica el mayor resultado |
¿Cómo configurar una tarifa fija (flatFee)?
¿Cómo configurar una tarifa fija (flatFee)?
flat:¿Cómo configurar una tarifa porcentual (percentual)?
¿Cómo configurar una tarifa porcentual (percentual)?
percentage:¿Cómo funciona maxBetweenTypes?
¿Cómo funciona maxBetweenTypes?
maxBetweenTypes requiere 2 o más cálculos (combinando flat y percentage). El sistema calcula ambos y aplica el mayor valor resultante.Ejemplo: Tarifa mínima de 3,00 o 1% del valor — el que sea mayor:¿Puedo mezclar múltiples porcentajes en maxBetweenTypes?
¿Puedo mezclar múltiples porcentajes en maxBetweenTypes?
flat y percentage — el sistema evalúa todos y aplica el mayor. Sin embargo, flatFee y percentual requieren exactamente 1 cálculo; solo maxBetweenTypes acepta 2 o más.Campos Importantes
¿Qué es referenceAmount y cómo afecta el cálculo?
¿Qué es referenceAmount y cómo afecta el cálculo?
referenceAmount define sobre qué valor se calcula la tarifa:originalAmount: valor original de la transacción, antes de que se aplique cualquier tarifa.afterFeesAmount: valor de la transacción después de que las tarifas de mayor prioridad ya se hayan aplicado.
priority: 1 (la primera en ejecutarse) debe usar originalAmount. No hay tarifas anteriores que considerar.¿Qué es isDeductibleFrom y cuándo debo usarlo?
¿Qué es isDeductibleFrom y cuándo debo usarlo?
isDeductibleFrom: true, la tarifa se deduce del monto enviado por el remitente. El destinatario recibe el monto ya descontado, y el remitente paga extra para cubrir el cargo.Cuando false, la tarifa se cobra por separado (el remitente envía el monto completo y la tarifa se debita aparte).Restricciones:isDeductibleFrom: truerequierereferenceAmount: originalAmount- Si el tipo es
percentage: el valor no puede exceder 100 - Si el tipo es
flat: el valor no puede exceder elminimumAmountdel paquete
¿Cómo funciona el campo priority?
¿Cómo funciona el campo priority?
priority define el orden de ejecución de las tarifas dentro de un paquete. Valores menores se ejecutan primero.priority: 1→ se ejecuta primero (obligatoriamente usaoriginalAmount)priority: 2→ se ejecuta después, puede usarafterFeesAmount
¿Qué es creditAccount?
¿Qué es creditAccount?
creditAccount diferente — útil cuando diferentes tarifas necesitan contabilizarse en centros de costo distintos.¿Para qué sirven routeFrom y routeTo dentro de una tarifa?
¿Para qué sirven routeFrom y routeTo dentro de una tarifa?
Billing Packages
¿Qué son los Billing Packages?
¿Qué son los Billing Packages?
volume: cobra según la cantidad de transacciones en un período, con precios escalonados (tiers).maintenance: cobra una tarifa fija por cuenta en un alcance determinado.
¿Cuándo usar billing de tipo volume?
¿Cuándo usar billing de tipo volume?
maxQuantity). No puede haber brechas ni superposiciones entre tiers.¿Cuándo usar billing de tipo maintenance?
¿Cuándo usar billing de tipo maintenance?
segmentId, portfolioId o aliases) y el valor de la tarifa.accountTarget debe tener exactamente uno de los tres campos: segmentId, portfolioId o aliases (máximo 100 aliases).¿Cómo funcionan los tiers en el billing de volumen?
¿Cómo funcionan los tiers en el billing de volumen?
- Deben ser contiguos — sin brechas entre escalones (
minQuantitydel siguiente =maxQuantitydel anterior + 1). - No pueden tener superposición.
- El último tier debe ser ilimitado (sin
maxQuantity).
¿Qué es freeQuota?
¿Qué es freeQuota?
freeQuota: 100 significa que las primeras 100 transacciones del período no se cobran.¿Qué son los discountTiers?
¿Qué son los discountTiers?
tiers principales.¿Qué es countMode en el billing de volumen?
¿Qué es countMode en el billing de volumen?
perRoute: cuenta transacciones por ruta (ej: total de PIX aprobados).perAccount: cuenta transacciones por cuenta individualmente.
Cálculo y Estimación de Tarifas
¿Cuál es la diferencia entre /v1/fees y /v1/estimates?
¿Cuál es la diferencia entre /v1/fees y /v1/estimates?
| Endpoint | Cuándo usar |
|---|---|
POST /v1/fees | Calcular la tarifa real de una transacción en curso. El sistema busca automáticamente los paquetes aplicables según el ledger, segment, ruta y valor. Consulta la referencia de la API Calculate Fees. |
POST /v1/estimates | Simular la tarifa de un paquete específico antes de confirmar la transacción. Útil para mostrar al usuario final el costo antes de ejecutar. Consulta la referencia de la API Simulate Fees. |
¿Cómo funciona /v1/fees?
¿Cómo funciona /v1/fees?
ledgerId— obligatoriosegmentId— opcionaltransactionRoute— opcional- Valor de la transacción — comparado con
minimumAmount/maximumAmountdel paquete
¿Cómo funciona /v1/estimates?
¿Cómo funciona /v1/estimates?
/v1/estimates permite simular la tarifa de un paquete específico (packageId), sin necesitar una transacción real. Ideal para:- Mostrar el costo estimado al usuario antes de confirmar.
- Probar configuraciones de paquetes recién creados.
- Construir simuladores de tarifas en tu producto.
¿Puedo usar /v1/estimates en producción para mostrar tarifas al usuario final?
¿Puedo usar /v1/estimates en producción para mostrar tarifas al usuario final?
/v1/estimates es un endpoint de solo lectura — no altera estado ni registra transacciones. Es seguro usarlo en flujos de UX para mostrar el costo antes de la confirmación.¿Cómo calcular el billing?
¿Cómo calcular el billing?
Errores Comunes
"Priority 1 must use originalAmount" — ¿qué significa?
"Priority 1 must use originalAmount" — ¿qué significa?
priority: 1 debe obligatoriamente tener referenceAmount: "originalAmount". Esto ocurre porque es la primera en calcularse — no hay tarifas anteriores sobre las cuales basar el cálculo.Corrección:"isDeductibleFrom requires originalAmount" — ¿cómo resolver?
"isDeductibleFrom requires originalAmount" — ¿cómo resolver?
isDeductibleFrom: true solo pueden usar referenceAmount: "originalAmount". Actualice el campo:"Flat fee value cannot exceed minimumAmount" — ¿por qué?
"Flat fee value cannot exceed minimumAmount" — ¿por qué?
isDeductibleFrom: true y el tipo es flat, el valor de la tarifa no puede ser mayor que el minimumAmount del paquete. Esto evita escenarios donde la tarifa supera el valor mínimo de la propia transacción.Ejemplo: Si minimumAmount: 100, la tarifa flat no puede exceder 100."Percentage value cannot exceed 100" — ¿cuándo ocurre?
"Percentage value cannot exceed 100" — ¿cuándo ocurre?
isDeductibleFrom: true y el tipo es percentage con un valor superior a 100. Una tarifa porcentual deducible del 100% anularía el valor de la transacción — valores superiores son inválidos."Tiers must be contiguous" — ¿cómo corregir?
"Tiers must be contiguous" — ¿cómo corregir?
minQuantity de cada tier sea exactamente maxQuantity + 1 del tier anterior."Last tier must be unbounded" — ¿qué significa?
"Last tier must be unbounded" — ¿qué significa?
maxQuantity). Esto garantiza que las transacciones por encima del mayor rango definido aún sean tarifadas."accountTarget must have exactly one of: segmentId, portfolioId, aliases"
"accountTarget must have exactly one of: segmentId, portfolioId, aliases"
maintenance, el campo accountTarget acepta solo una de las tres opciones. No combine campos:¿El campo aliases en accountTarget tiene algún límite?
¿El campo aliases en accountTarget tiene algún límite?
aliases acepta un máximo de 100 aliases por Billing Package de tipo maintenance."flatFee requires exactly 1 calculation of type flat"
"flatFee requires exactly 1 calculation of type flat"
applicationRule: "flatFee" acepta exactamente 1 cálculo, y debe ser de tipo flat. No use percentage con flatFee."percentual requires exactly 1 calculation of type percentage"
"percentual requires exactly 1 calculation of type percentage"
flatFee, el applicationRule: "percentual" acepta exactamente 1 cálculo de tipo percentage."maxBetweenTypes requires 2 or more calculations"
"maxBetweenTypes requires 2 or more calculations"
maxBetweenTypes requiere al menos 2 cálculos para funcionar — necesita valores para comparar. Proporcione al menos un flat y un percentage.El paquete no se está aplicando a la transacción — ¿qué verificar?
El paquete no se está aplicando a la transacción — ¿qué verificar?
enable: ¿el paquete está activo (enable: true)?ledgerId: ¿el paquete está vinculado al ledger correcto?minimumAmount/maximumAmount: ¿el valor de la transacción está dentro del rango?transactionRoute: si el paquete tienetransactionRoute, ¿la transacción usa la misma ruta?segmentId: si el paquete está vinculado a un segmento específico, ¿la cuenta pertenece a él?waivedAccounts: ¿la cuenta está listada como exenta?
¿Se puede recuperar un registro eliminado?
¿Se puede recuperar un registro eliminado?
deletedAt) y no se eliminan de la base de datos. Sin embargo, la API no expone endpoints de restauración por defecto. Contacte al equipo de Lerian si necesita recuperar un registro eliminado accidentalmente. Para la lista completa de códigos de error, consulta la referencia de Códigos de Error.
