APIs de Lerian
Esta sección responde preguntas comunes sobre las APIs de Lerian. Cubre 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. La API acepta tamaños de página más grandes después de que reinicies la aplicación.Importante: Un tamaño de página mayor puede ralentizar los tiempos de respuesta, especialmente con grandes conjuntos de datos. Prueba en staging antes de cambiar producción.Multi-tenancy y SaaS
Estas preguntas cubren el aislamiento de datos, el 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
Estas preguntas cubren 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.
- fiat: Un tipo alternativo para monedas fiduciarias; como
currency, el código del Activo debe seguir la norma ISO 4217. - 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 tiene dos valores de account_id correspondientes. Creas un Portafolio para ese CPF para vincular ambas cuentas bajo una única estructura. Esto facilita encontrar y gestionar las 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) se vincula 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)?
- Cuando creas un Activo (por ejemplo, BRL) en el Ledger de Midaz, Midaz también crea una Cuenta Externa para ese Activo.
- Esta Cuenta Externa refleja los saldos que la institución mantiene fuera de Midaz. Esos saldos pueden estar en una cuenta PI, una cuenta de liquidación, una cuenta de reserva, o una cuenta bancaria tradicional o de pago.
- Para depositar fondos desde fuera del Ledger de Midaz en una cuenta de usuario, sigue estos pasos:
- Crea una transacción con la Cuenta Externa como origen y las cuentas objetivo como destino.
- Midaz debita la Cuenta Externa por el monto (por lo que se vuelve negativa) y acredita las cuentas de destino según los valores en el payload 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 los datos de la transacción a través de las APIs y luego genera un recibo visual en el formato que elijas.
- Con el Reporter — Extrae los datos de la transacción y crea recibos visuales personalizados.
- A través del Console — Accede a los datos de la transacción directamente en Lerian Console.
Entidades
¿Cómo puedo crear una Entidad?
¿Cómo puedo crear una Entidad?
entity_id) acepta IDs externos. Midaz no impone ninguna validación en este campo. Puedes usar los IDs que ya existen en tu base de datos e integrarlos 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?
X-Idempotency-Replayed en true.¿Cuál es el TTL predeterminado si no envío X-TTL?
¿Cuál es el TTL predeterminado si no envío X-TTL?
X-TTL para definir un valor personalizado en segundos.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, como Activos, Pasivos, Ingresos y Gastos. Asígnalas a cuentas en tu Ledger. Cuando habilitas la función Tipos de Cuenta, el campo
typeen la API de Cuentas se vuelve obligatorio y debe coincidir con un valor registrado. - Rutas Contables — Usa Rutas de Operación para validar cada pierna de una transacción. Por ejemplo, un débito debe provenir de una cuenta de tipo
user_wallet. Usa Rutas Contables (el recursotransactionRouteen la API) para definir patrones completos de transacción que coincidan con tu lógica contable.
Plugins
Los plugins extienden Midaz con integración y orquestación de procesos. Proporcionan abstracciones para que puedas enfocarte en tu modelo de negocio en lugar de lógica del sistema fuera de tu dominio. Las preguntas siguientes cubren cómo funcionan los plugins, cómo los despliegas y las opciones disponibles.
¿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: Lerian desarrolla e integra estos plugins en el Ledger de Midaz. Lerian brinda soporte completo para ellos.
- Plugins de Marketplace: Los socios de Lerian crean estos plugins para nichos de mercado específicos. Lerian ayuda a integrarlos en Midaz. Los socios los ofrecen y les dan soporte directamente.
Fees Engine
Estas preguntas cubren el Fees Engine. Fees Engine es una capacidad con licencia de Midaz que se ejecuta dentro del proceso unificado del ledger.
Conceptos Generales
¿Qué es el Fees Engine?
¿Qué es el Fees Engine?
- 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 Fees Engine en el ecosistema Lerian?
¿Cómo se integra el Fees Engine en el ecosistema Lerian?
¿Qué necesito enviar en cada solicitud al Fees Engine?
¿Qué necesito enviar en cada solicitud al Fees Engine?
X-Organization-Id con el ID de tu organización en Midaz. Este header delimita la solicitud a una organización. Es específico del Fees Engine, no un identificador de tenant. La plataforma sigue resolviendo el contexto de tu tenant automáticamente desde el JWT. Cuando el plugin de autenticación está activo, también envías un Bearer token en el header Authorization.¿Qué base de datos utiliza el Fees Engine?
¿Qué base de datos utiliza el Fees Engine?
deletedAt. Un registro eliminado no aparece en los listados, pero aún puedes auditarlo.¿Cuál es la versión mínima de Midaz necesaria para usar el Fees Engine?
¿Cuál es la versión mínima de Midaz necesaria para usar el Fees Engine?
Paquetes de Tarifas
¿Qué es un Paquete de Tarifas?
¿Qué es un Paquete de Tarifas?
Package) es un conjunto de reglas de cobro bajo un feeGroupLabel. Cada paquete se vincula a una Organización + Ledger y, opcionalmente, a un Segment. Un paquete puede contener varias tarifas (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 en false cuando creas o actualizas el paquete. El Fees Engine omite un paquete desactivado durante el cálculo de tarifas, incluso cuando el contexto de la transacción coincide con su alcance.¿Cómo funciona el alcance de un paquete (minimumAmount / maximumAmount)?
¿Cómo funciona el alcance de un paquete (minimumAmount / maximumAmount)?
[minimumAmount, maximumAmount]. Si el valor de la transacción queda fuera de este rango, el Fees Engine ignora el paquete.Ejemplo: Un paquete con minimumAmount: 100 y maximumAmount: 5000 cobra tarifas solo en transacciones entre 100 y 5.000.maximumAmount, 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. El Fees Engine considera entonces el paquete solo para transacciones con esa ruta, como "PIX", "TED" o "BOLETO".¿Qué son los waivedAccounts?
¿Qué son los waivedAccounts?
waivedAccounts, el Fees Engine no aplica las tarifas del paquete a ella.¿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 el Fees Engine calcula la tarifa. Consulta Modelos de Cálculo para detalles completos. Hay tres opciones:¿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 que combinan flat y percentage. El Fees Engine calcula ambos y aplica el mayor resultado.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 Fees Engine evalúa todos y aplica el mayor. Ten en cuenta que 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 el Fees Engine calcula la tarifa:originalAmount: el valor original de la transacción, antes de cualquier tarifa.afterFeesAmount: el valor de la transacción después de que se apliquen las tarifas de mayor prioridad.
priority: 1 se ejecuta primero, por lo que 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, el Fees Engine deduce la tarifa del monto que envía el remitente. El destinatario recibe el monto descontado, y el remitente paga extra para cubrir el cargo.Cuando false, el Fees Engine cobra la tarifa por separado. El remitente envía el monto completo, y el Fees Engine debita la tarifa 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. El Fees Engine ejecuta primero los valores menores.priority: 1→ se ejecuta primero (obligatoriamente usaoriginalAmount)priority: 2→ se ejecuta después, puede usarafterFeesAmount
¿Qué es creditAccount?
¿Qué es creditAccount?
creditAccount diferente. Esto ayuda cuando diferentes tarifas pertenecen a 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 el Fees Engine no cobra las primeras 100 transacciones del período.¿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?
¿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 simula la tarifa de un paquete específico (packageId). No necesitas una transacción real. Funciona bien para:- Mostrar el costo estimado al usuario antes de la confirmación.
- 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 tener referenceAmount: "originalAmount". Es la primera tarifa en ejecutarse, por lo que 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". Actualiza 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 exceder el minimumAmount del paquete. Esto evita una tarifa mayor que el valor mínimo de la 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, el tipo es percentage y el valor supera 100. Una tarifa porcentual deducible del 100% anularía el valor de la transacción. Los valores superiores a 100 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 mantiene un precio en las transacciones por encima del mayor rango definido."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 combines 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 uses 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. Proporciona 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 los elimina de la base de datos. La API no expone endpoints de restauración por defecto. Contacta al equipo de Lerian si necesitas recuperar un registro eliminado. Para la lista completa de códigos de error, consulta la referencia de Códigos de Error.
