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 API 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.Multi-tenancy y SaaS
Estas preguntas cubren el aislamiento de datos, el alcance del tenant y cómo funciona el multi-tenancy en los despliegues de Lerian.
¿Mis datos están aislados de otros clientes en SaaS?
¿Mis datos están aislados de otros clientes 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?
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?
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.
- commodities: 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?
segment_id tiene dos valores de account_id 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?
¿Una Account puede vincularse a varios Segments?
¿Una Account puede vincularse a varios Segments?
account_id) se vincula a un solo Segment (segment_id).¿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 (de modo que queda negativa) 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?
entity_id) acepta IDs externos. Midaz no aplica ninguna validación sobre 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 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 función de Account Types, el campo
typeen la API de Accounts pasa a ser obligatorio y 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.
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?
¿Los plugins pueden usarse sin Midaz?
¿Los plugins pueden usarse 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?
- 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. - 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. Midaz v4 no tiene un endpoint de nivel superior/v2/feesni/v2/estimates.
¿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. Las versiones independientes anteriores de plugin-fees siguen su propia matriz de compatibilidad heredada y no son el modelo de despliegue de v4.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.maximumAmount, el package puede aplicarse sin un límite superior. Verifica las reglas de validación de tu versión.¿Puedo filtrar un package por ruta de transacción?
¿Puedo filtrar un package por ruta de transacción?
transactionRoute en el package. Fees Engine entonces considera el package solo para transacciones con esa ruta, como "PIX", "TED" o "BOLETO".¿Qué son los waivedAccounts?
¿Qué son los waivedAccounts?
waivedAccounts, Fees Engine no le aplica las 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 que combinen flat y percentage. Fees Engine calcula ambos 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, y el remitente paga de más para cubrir el cargo.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?
maxQuantity). No debe haber vacíos ni superposiciones entre niveles.¿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.
- El último nivel debe ser ilimitado (sin
maxQuantity).
¿Qué es freeQuota?
¿Qué es freeQuota?
freeQuota: 100 significa que 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 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?
/v2/fees ni /v2/estimates. El endpoint delimitado al ledger POST /v2/organizations/{organization_id}/ledgers/{ledger_id}/estimates sigue disponible 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.¿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 "Priority 1 must use originalAmount"?
¿Qué significa "Priority 1 must use originalAmount"?
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 "isDeductibleFrom requires originalAmount"?
¿Cómo corrijo "isDeductibleFrom requires originalAmount"?
isDeductibleFrom: true solo pueden usar referenceAmount: "originalAmount". Actualiza el campo:¿Por qué obtengo "Flat fee value cannot exceed minimumAmount"?
¿Por qué obtengo "Flat fee value cannot exceed minimumAmount"?
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 "Percentage value cannot exceed 100"?
¿Cuándo ocurre "Percentage value cannot exceed 100"?
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 "Tiers must be contiguous"?
¿Cómo corrijo "Tiers must be contiguous"?
minQuantity de cada nivel sea exactamente maxQuantity + 1 del nivel anterior.¿Qué significa "Last tier must be unbounded"?
¿Qué significa "Last tier must be unbounded"?
maxQuantity). Esto mantiene un precio para las transacciones por encima del rango más alto definido."accountTarget must have exactly one of: segmentId, portfolioId, aliases"
"accountTarget must have exactly one of: segmentId, portfolioId, aliases"
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."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, porque necesita valores para comparar. Proporciona al menos un flat y un percentage.¿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)?ledgerId: ¿el package está vinculado al ledger correcto?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 expone endpoints de restauración por defecto. Contacta al equipo de Lerian si necesitas recuperar un registro eliminado. Para ver la lista completa de códigos de error, consulta la referencia de Error Codes.
