APIs de Lerian
Esta sección responde preguntas comunes sobre las APIs de Lerian.
¿Hay un número máximo de registros por página en los listados de la API? ¿Puedo aumentar este límite?
¿Hay un número máximo de registros por página en los listados de la API? ¿Puedo aumentar este límite?
MAX_PAGINATION_LIMIT en la configuración de tu despliegue. La mayoría de los listados acepta tamaños de página mayores después de que reinicies la aplicación.Importante: un tamaño de página mayor puede hacer más lentos los tiempos de respuesta, sobre todo con volúmenes de datos grandes. Prueba en staging antes de cambiar producción.Tenants en Lerian Cloud
Estas preguntas cubren el aislamiento de datos y el alcance del tenant en Lerian Cloud.
¿Mis datos están aislados de otras instituciones en SaaS?
¿Mis datos están aislados de otras instituciones en SaaS?
¿Necesito enviar un ID de tenant en mis solicitudes a la API?
¿Necesito enviar un ID de tenant en mis solicitudes a la API?
¿Puedo tener varias Organizations bajo un mismo tenant?
¿Puedo tener varias Organizations bajo un mismo tenant?
¿La API es diferente entre los despliegues SaaS y self-hosted?
¿La API es diferente entre los despliegues SaaS y self-hosted?
Midaz
Estas preguntas cubren Organizations, Ledgers, Accounts, Transactions y más en Midaz.
Organizations
¿Las diferentes Organizations se comunican entre sí?
¿Las diferentes Organizations se comunican entre sí?
¿Puedo usar una sola licencia en varias Organizations?
¿Puedo usar una sola licencia en varias Organizations?
¿Una Organization puede tener varios Plugins?
¿Una Organization puede tener varios Plugins?
¿Una Organization puede tener varios Ledgers?
¿Una Organization puede tener varios Ledgers?
¿Puedo crear transacciones entre una Organization padre y una Organization hija?
¿Puedo crear transacciones entre una Organization padre y una Organization hija?
settings.crossLedger.enabled como true, y ninguno puede tener accounting.validateRoutes definido como true. También puedes orquestar la transferencia con estos pasos:Ledgers
¿Los diferentes Ledgers se comunican entre sí?
¿Los diferentes Ledgers se comunican entre sí?
settings.crossLedger.enabled como true.¿Cómo puedo hacer transacciones entre Ledgers?
¿Cómo puedo hacer transacciones entre Ledgers?
POST /v2/transactions/direct o POST /v2/transactions/hold con tramos en cada Ledger. Cada Ledger participante debe definir settings.crossLedger.enabled como true. Midaz crea una transacción balanceada por Ledger. También puedes mover el monto a través de una External Account en dos pasos:¿Necesito un Ledger separado para cada Plugin?
¿Necesito un Ledger separado para cada Plugin?
Assets
¿Un Asset puede vincularse a varias Accounts?
¿Un Asset puede vincularse a varias Accounts?
¿Qué tipos de Assets puedo usar?
¿Qué tipos de Assets puedo usar?
- currency: monedas fiduciarias tradicionales como BRL, USD y EUR.
- fiat: un tipo alternativo para monedas fiduciarias; al igual que
currency, el código del Asset debe seguir la norma ISO 4217. - crypto: activos digitales como BTC, ETH y otras criptomonedas.
- commodity: bienes tangibles como oro, soja y petróleo.
- others: Assets personalizados, incluidos puntos de fidelidad y valores tokenizados.
Portfolios
¿Cómo funciona un Portfolio?
¿Cómo funciona un Portfolio?
segmentId tiene dos cuentas correspondientes. Creas un Portfolio para ese CPF para vincular ambas cuentas bajo una sola estructura.Accounts
¿Una Account puede asociarse con varios Assets?
¿Una Account puede asociarse con varios Assets?
¿Qué es una External Account?
¿Qué es una External Account?
¿Cómo puedo crear una External Account?
¿Cómo puedo crear una External Account?
type como external con un alias.¿Una Account puede vincularse a varios Segments?
¿Una Account puede vincularse a varios Segments?
segmentId).¿Hay un límite de cuántas Accounts puedo crear en Midaz?
¿Hay un límite de cuántas Accounts puedo crear en Midaz?
¿Cuál es el proceso para agregar fondos a una cuenta o hacer un cash-in usando dinero que proviene de fuera del entorno del Ledger (Midaz)?
¿Cuál es el proceso para agregar fondos a una cuenta o hacer un cash-in usando dinero que proviene de fuera del entorno del Ledger (Midaz)?
- Cuando creas un Asset (por ejemplo, BRL) en el Ledger de Midaz, Midaz también crea una External Account para ese Asset.
- Esta External Account 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 reservas o una cuenta bancaria o de pago tradicional.
- Para depositar fondos desde fuera del Ledger de Midaz hacia una cuenta de usuario, sigue estos pasos:
- Crea una transacción con la External Account como origen y las cuentas objetivo como destino.
- Midaz debita la External Account por el monto y acredita las cuentas destino por los valores del payload de la transacción.
Transactions
¿Cuál es la estructura mínima de una Transaction?
¿Cuál es la estructura mínima de una Transaction?
- 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 con los detalles de una transacción completada?
¿Es posible generar un recibo de transferencia en PDF con los detalles de una transacción completada?
- Mediante las 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 de la Console: accede a los datos de la transacción directamente en la Console de Lerian.
Entities
¿Cómo puedo crear una Entity?
¿Cómo puedo crear una Entity?
entityId acepta IDs externos de hasta 256 caracteres. Midaz no valida su formato. Puedes usar los IDs que ya existen en tu base de datos e integrarlos en tu sistema.Idempotencia
¿Puedo reutilizar una clave de idempotencia en varios endpoints?
¿Puedo reutilizar una clave de idempotencia en varios endpoints?
¿Qué sucede si cambio el TTL en un reintento?
¿Qué sucede si cambio el TTL en un reintento?
¿La respuesta repetida siempre será idéntica?
¿La respuesta repetida 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 establecer un valor personalizado en segundos.Contabilidad en Midaz
¿Cómo puedo reflejar mi propio Chart of Accounts en Midaz?
¿Cómo puedo reflejar mi propio Chart of Accounts en Midaz?
- Account Types: crea las categorías lógicas a partir de tu plan de cuentas, como Activos, Pasivos, Ingresos y Gastos. Asígnalas a las cuentas de tu ledger. Cuando habilitas la validación de tipo de cuenta (
validateAccountType), el campotypeen la API de Accounts debe coincidir con un valor registrado. - Accounting Routes: usa Operation Routes para validar cada tramo de una transacción. Por ejemplo, un débito debe provenir de una cuenta del tipo
user_wallet. Usa Accounting Routes (el recursotransactionRouteen la API) para definir patrones de transacción completos que coincidan con tu lógica contable.
validateRoutes). No necesitas codificar reglas de forma fija en tu lógica de negocio.Plugins
Los Plugins extienden Midaz con integración y orquestación de procesos. Aportan abstracciones para que puedas enfocarte en tu modelo de negocio en lugar de en la lógica de sistemas fuera de tu dominio. Las siguientes preguntas cubren cómo funcionan los plugins, cómo los despliegas y las opciones disponibles.
¿Qué son los Plugins?
¿Qué son los Plugins?
¿Cómo se distribuyen los plugins?
¿Cómo se distribuyen los plugins?
¿Qué opciones de plugins ofrece Lerian?
¿Qué opciones de plugins ofrece Lerian?
- Native Plugins: Lerian desarrolla e integra estos plugins en el ledger de Midaz. Lerian les da soporte completo.
- Marketplace Plugins: los socios de Lerian crean estos plugins para nichos de mercado específicos. Lerian ayuda a integrarlos en Midaz. Los socios los proveen y les dan soporte directamente.
Fees Engine
Estas preguntas cubren Fees Engine. Fees Engine es una capacidad licenciada de Midaz que corre dentro del proceso unificado del ledger.
Conceptos generales
¿Qué es Fees Engine?
¿Qué es Fees Engine?
- Fee Packages (
/v2/organizations/{organization_id}/ledgers/{ledger_id}/packages): define las reglas de cobro por transacción (comisión fija, porcentaje, o el mayor entre ambos). - Billing Packages (
/v2/organizations/{organization_id}/ledgers/{ledger_id}/billing-packages): define cobros periódicos basados en el volumen de transacciones o el mantenimiento de cuentas. - Planes de tarifas (
/v2/organizations/{organization_id}/ledgers/{ledger_id}/account-plans): define comisiones que asignas a cuentas, con una cuota gratuita por mes calendario. Consulta Planes de tarifas. - Cálculo y estimación: el Ledger evalúa las comisiones durante el flujo de la transacción. Usa
POST /v2/organizations/{organization_id}/ledgers/{ledger_id}/estimatespara una vista previa específica de un package yPOST /v2/organizations/{organization_id}/ledgers/{ledger_id}/billing/calculatepara la facturación periódica.
¿Cómo encaja Fees Engine en el ecosistema de Lerian?
¿Cómo encaja Fees Engine en el ecosistema de Lerian?
¿Qué necesito enviar en cada solicitud a Fees Engine?
¿Qué necesito enviar en cada solicitud a Fees Engine?
/v2. La plataforma resuelve el contexto del tenant a partir de la solicitud autenticada; envía el material de autorización que exija la configuración de tu Access Manager.¿Qué base de datos usa Fees Engine para el almacenamiento?
¿Qué base de datos usa Fees Engine para el almacenamiento?
deletedAt. Un registro eliminado no aparece en los listados, pero aún puedes auditarlo.¿Qué versión de Midaz ofrece el módulo integrado de Fees?
¿Qué versión de Midaz ofrece el módulo integrado de Fees?
/v2.Fee Packages
¿Qué es un Fee Package?
¿Qué es un Fee Package?
Package) es un conjunto de reglas de cobro bajo un mismo feeGroupLabel. Cada package se vincula a una Organization + Ledger, y opcionalmente a un Segment. Un package puede contener varias comisiones (objetos Fee), cada una con su propia lógica de cálculo. Obtén más información sobre Fee Packages.¿Cómo creo un Fee Package?
¿Cómo creo un Fee Package?
POST /v2/organizations/{organization_id}/ledgers/{ledger_id}/packages con el siguiente cuerpo. Consulta la referencia de la API Create Package para ver todos los detalles.¿Un package puede deshabilitarse temporalmente?
¿Un package puede deshabilitarse temporalmente?
enable en false cuando creas o actualizas el package. Fees Engine omite un package deshabilitado durante el cálculo de comisiones, incluso cuando el contexto de la transacción coincide con su alcance.¿Cómo funciona el alcance del package (minimumAmount / maximumAmount)?
¿Cómo funciona el alcance del package (minimumAmount / maximumAmount)?
[minimumAmount, maximumAmount]. Si el valor de la transacción queda fuera de ese rango, Fees Engine ignora el package.Ejemplo: un package con minimumAmount: 100 y maximumAmount: 5000 cobra comisiones solo en transacciones entre 100 y 5,000.¿Puedo filtrar un package por ruta de transacción?
¿Puedo filtrar un package por ruta de transacción?
transactionRoute con el ID de una ruta de transacción. Fees Engine entonces considera el package solo para transacciones que llevan ese routeId.¿Qué son los waivedAccounts?
¿Qué son los waivedAccounts?
waivedAccounts, Fees Engine no aplica las comisiones del package. Una cuenta exenta no paga comisiones del package.¿Los endpoints de listado tienen paginación?
¿Los endpoints de listado tienen paginación?
GET /v2/organizations/{organization_id}/ledgers/{ledger_id}/packages, GET /v2/organizations/{organization_id}/ledgers/{ledger_id}/billing-packages) admiten los parámetros de consulta limit y page para la paginación.Modelos de cálculo
¿Qué modelos de cálculo hay disponibles?
¿Qué modelos de cálculo hay disponibles?
applicationRule dentro de calculationModel define cómo calcula Fees Engine la comisión. Consulta Calculation Models para ver todos los detalles. Hay tres opciones:¿Cómo configuro una comisión fija (flatFee)?
¿Cómo configuro una comisión fija (flatFee)?
flat:¿Cómo configuro una comisión porcentual (percentual)?
¿Cómo configuro una comisión porcentual (percentual)?
percentage:¿Cómo funciona maxBetweenTypes?
¿Cómo funciona maxBetweenTypes?
maxBetweenTypes requiere 2 o más cálculos. Fees Engine calcula cada uno y aplica el resultado mayor.Ejemplo: comisión mínima de 3.00 o 1% del valor, lo que sea mayor:¿Puedo mezclar varios porcentajes en maxBetweenTypes?
¿Puedo mezclar varios porcentajes en maxBetweenTypes?
flat y percentage. Fees Engine evalúa todos y aplica el mayor. 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 Fees Engine calcula la comisión:originalAmount: el valor original de la transacción, antes de cualquier comisión.afterFeesAmount: el valor de la transacción después de que se apliquen comisiones de mayor prioridad.
priority: 1 se ejecuta primero, así que debe usar originalAmount. No existen comisiones previas que considerar.¿Qué es isDeductibleFrom y cuándo se recomienda usarlo?
¿Qué es isDeductibleFrom y cuándo se recomienda usarlo?
isDeductibleFrom: true, Fees Engine deduce la comisión del monto que envía el remitente. El destinatario recibe el monto con el descuento aplicado.Cuando es false, Fees Engine cobra la comisión por separado. El remitente envía el monto completo, y Fees Engine debita la comisión aparte.Restricciones:isDeductibleFrom: truerequierereferenceAmount: originalAmount- Si el tipo es
percentage: el valor no puede superar 100 - Si el tipo es
flat: el valor no puede superar elminimumAmountdel package
¿Cómo funciona el campo priority?
¿Cómo funciona el campo priority?
priority define el orden de ejecución de las comisiones dentro de un package. Fees Engine ejecuta primero los valores más bajos.priority: 1→ se ejecuta primero (debe usaroriginalAmount)priority: 2→ se ejecuta después, puede usarafterFeesAmount
¿Qué es creditAccount?
¿Qué es creditAccount?
creditAccount diferente. Esto ayuda cuando distintas comisiones pertenecen a distintos centros de costo.¿Qué son routeFrom y routeTo dentro de una comisión?
¿Qué son routeFrom y routeTo dentro de una comisión?
Billing Packages
¿Qué son los Billing Packages?
¿Qué son los Billing Packages?
volume: cobra según el número de transacciones en un período, con precios escalonados.maintenance: cobra una comisión fija por cuenta en un alcance dado.
¿Cuándo se recomienda usar volume billing?
¿Cuándo se recomienda usar volume billing?
¿Cuándo se recomienda usar maintenance billing?
¿Cuándo se recomienda usar maintenance billing?
segmentId, portfolioId o aliases) y el monto de la comisión.accountTarget debe tener exactamente uno de los tres campos: segmentId, portfolioId o aliases (máximo 100 aliases).¿Cómo funcionan los niveles en volume billing?
¿Cómo funcionan los niveles en volume billing?
- Deben ser contiguos: sin vacíos entre niveles (
minQuantitydel siguiente =maxQuantitydel anterior + 1). - No deben superponerse.
- Cuando hay varios niveles, el último debe omitir
maxQuantity. Se acepta un único nivel con límite superior. Un conteo facturable positivo fuera de ese nivel hace fallar toda la llamada de cálculo.
¿Qué es freeQuota?
¿Qué es freeQuota?
freeQuota: 100 significa que Fees Engine no cobra las primeras 100 transacciones del período.Una comisión de un plan de tarifas tiene su propio freeQuota, contado por cuenta y mes calendario. Consulta Cuota gratuita.¿Qué son los discountTiers?
¿Qué son los discountTiers?
tiers principales.¿Qué es countMode en volume billing?
¿Qué es countMode en volume billing?
perRoute: cuenta las transacciones por ruta (por ejemplo, total de Pix aprobados).perAccount: cuenta las transacciones por cuenta individual.
Cálculo de comisiones y facturación
¿Cómo se calculan las comisiones de transacción en Midaz v4?
¿Cómo se calculan las comisiones de transacción en Midaz v4?
POST /v2/organizations/{organization_id}/ledgers/{ledger_id}/estimates para una vista previa específica de un package.¿Qué endpoints de v4 configuran las comisiones?
¿Qué endpoints de v4 configuran las comisiones?
/v2/organizations/{organization_id}/ledgers/{ledger_id}/packages y los billing packages periódicos en /v2/organizations/{organization_id}/ledgers/{ledger_id}/billing-packages. Configura los planes de tarifas en /v2/organizations/{organization_id}/ledgers/{ledger_id}/account-plans, y asigna uno a una cuenta en /v2/organizations/{organization_id}/ledgers/{ledger_id}/accounts/{account_id}/account-plan.¿Cómo calculo la facturación periódica?
¿Cómo calculo la facturación periódica?
POST /v2/organizations/{organization_id}/ledgers/{ledger_id}/billing/calculate después de configurar los billing packages. Procesa las reglas configuradas para ese Ledger.Errores comunes
¿Qué significa el error 0188 "originalAmount is required when priority is one"?
¿Qué significa el error 0188 "originalAmount is required when priority is one"?
priority: 1 debe tener referenceAmount: "originalAmount". Es la primera comisión en ejecutarse, así que no existen comisiones previas en las que basar el cálculo.Solución:¿Cómo corrijo el error 0205 "originalAmount is required when isDeductibleFrom is true"?
¿Cómo corrijo el error 0205 "originalAmount is required when isDeductibleFrom is true"?
isDeductibleFrom: true solo pueden usar referenceAmount: "originalAmount". Actualiza el campo:¿Por qué obtengo el error 0208 "calculation value flat invalid"?
¿Por qué obtengo el error 0208 "calculation value flat invalid"?
isDeductibleFrom: true y el tipo es flat, el valor de la comisión no puede superar el minimumAmount del package. Esto evita una comisión mayor que el valor mínimo de la transacción.Ejemplo: si minimumAmount: 100, la comisión fija no puede superar 100.¿Cuándo ocurre el error 0207 "calculation value percentage invalid"?
¿Cuándo ocurre el error 0207 "calculation value percentage invalid"?
isDeductibleFrom: true, el tipo es percentage, y el valor supera 100. Una comisión porcentual deducible del 100% dejaría la transacción en cero. Los valores por encima de 100 no son válidos.¿Cómo corrijo el error 0218 "tiers have a gap"?
¿Cómo corrijo el error 0218 "tiers have a gap"?
minQuantity de cada nivel sea exactamente maxQuantity + 1 del nivel anterior.Error 0229: "Exactly one of segmentId, portfolioId, or aliases must be provided"
Error 0229: "Exactly one of segmentId, portfolioId, or aliases must be provided"
accountTarget acepta solo una de las tres opciones. No combines campos:¿Hay un límite de aliases en accountTarget?
¿Hay un límite de aliases en accountTarget?
aliases acepta un máximo de 100 aliases por Billing Package de maintenance.Errores 0189 y 0191: flatFee necesita exactamente 1 cálculo de tipo flat
Errores 0189 y 0191: flatFee necesita exactamente 1 cálculo de tipo flat
applicationRule: "flatFee" acepta exactamente 1 cálculo, y debe ser de tipo flat. No uses percentage con flatFee.Errores 0189 y 0190: percentual necesita exactamente 1 cálculo de tipo percentage
Errores 0189 y 0190: percentual necesita exactamente 1 cálculo de tipo percentage
flatFee, el applicationRule: "percentual" acepta exactamente 1 cálculo de tipo percentage.Error 0201: "applicationRule maxBetweenTypes must have more than 1 calculation"
Error 0201: "applicationRule maxBetweenTypes must have more than 1 calculation"
maxBetweenTypes requiere al menos 2 cálculos, porque necesita valores para comparar.¿Qué se recomienda verificar cuando el package no se aplica a la transacción?
¿Qué se recomienda verificar cuando el package no se aplica a la transacción?
enable: ¿el package está activo (enable: true)?- Ledger: ¿creaste el package en el ledger de la transacción?
minimumAmount/maximumAmount: ¿el valor de la transacción está dentro del rango?transactionRoute: si el package tienetransactionRoute, ¿la transacción usa la misma ruta?segmentId: si el package está delimitado a un segmento, ¿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 tiene un endpoint de restauración. Contacta al equipo de Lerian si necesitas recuperar un registro eliminado.
