> ## Documentation Index
> Fetch the complete documentation index at: https://docs.lerian.studio/llms.txt
> Use this file to discover all available pages before exploring further.

# API REST de Lender

> Oriéntate en la API de Lender: la ruta base /api/v1, la autenticación bearer, la autorización por recurso y acción, el dinero como cadena decimal, la idempotencia con alcance, la paginación, la forma de error problem+json y las operaciones agrupadas por trabajo.

Lender sirve una sola API HTTP. Cada operación está bajo la ruta base `/api/v1`, y nada se versiona en el host. Una lista de productos es `GET /api/v1/loan-products`.

Esta página cubre lo que comparten las operaciones, y luego las agrupa por el trabajo que hacen. Cada operación tiene su propia página bajo el ancla **Lender** en la [Referencia de API](/es/reference/introduction), con las formas completas de solicitud y respuesta.

<Note>
  Los documentos OpenAPI de este portal son fuentes de render para las páginas de referencia. No son contratos de cliente, y no son base para la generación de SDK.
</Note>

## Autenticación

***

La autenticación se configura en el despliegue. `PLUGIN_AUTH_ENABLED` es `false` de forma predeterminada. Cuando está habilitada, las rutas protegidas requieren un Bearer token JWT:

```http theme={null}
Authorization: Bearer <token>
```

El valor predeterminado solo sirve para despliegues single-tenant: el arranque rechaza `MULTI_TENANT_ENABLED=true` con `PLUGIN_AUTH_ENABLED=false`, porque Lender resuelve el tenant desde el claim `tenantId` de la identidad validada.

Dos lecturas son públicas y no toman token: [listar jurisdicciones](/es/reference/products/lender/list-jurisdictions) y [obtener una jurisdicción](/es/reference/products/lender/get-jurisdiction). El registro son metadatos del despliegue, así que un cliente puede leerlo antes de tener una identidad.

Las sondas quedan fuera de la autenticación para que un orquestador las alcance sin token: `/health`, `/readyz` y `/version`.

### Autorización

***

Lender autoriza cada solicitud contra la aplicación `lender`, un recurso y una acción. El recurso sigue la superficie, y las acciones son granulares en lugar de una sola escritura:

| Recurso              | Acciones                                                                                                                                                            |
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `loan_product`       | `read`, `write`                                                                                                                                                     |
| `loan_applications`  | `preview:schedule`, `create`, `approve`, `reject`, `withdraw`, `disburse`, `capitalization-consent:ingest`, `preview:tax`                                           |
| `loan_accounts`      | `read`, `audit:read`, `charge:apply`, `repayment:preview`, `repayment:record`, `repayment:reverse`, `prepayment:record`, `reschedule`, `cet:read`, `pdd:transition` |
| `accounting`         | `read`, `write`                                                                                                                                                     |
| `streaming_manifest` | `read`                                                                                                                                                              |

Otorga al rol de oficial solo las acciones que necesita su trabajo. Lender define sus roles y permisos en un archivo de semilla que cargas en tu proveedor de identidad. [Requisitos previos](/es/products/lender/lender-prerequisites) muestra el conjunto mínimo para la originación.

### Identidad del tenant y del oficial

***

**El tenant nunca es un header, un parámetro de query ni un campo del body.** En modo single-tenant Lender usa `DEFAULT_TENANT_ID`. En modo multi-tenant resuelve el tenant desde la identidad validada. Consulta [Multi-tenancy](/es/platform/multi-tenancy).

El oficial asignado viene del sujeto del token de la misma forma. Ningún body de solicitud de préstamo lleva un campo de oficial, y ningún valor aportado por el cliente anula el sujeto.

## Solicitudes y respuestas

***

Cada operación que lleva un body envía y devuelve `application/json`.

Envía los montos de dinero y las tasas decimales como `requestedInterestRate` en forma de cadenas decimales: `"50000.00"`, `"0.01500000"`. Los valores de versión de producto y de tasa flotante `fixedAnnualRateBps`, `floatingSpreadBps` y `annualRateBps` son puntos base enteros. Las marcas de tiempo son RFC 3339 en UTC.

<h2 id="idempotency">
  Idempotencia
</h2>

***

Las escrituras de dinero y de cronograma aceptan un header de solicitud `X-Idempotency`.

| Operación                                                                                              | Header                                            |
| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------- |
| [Desembolsar una solicitud](/es/reference/products/lender/disburse-loan-application)                   | `X-Idempotency` obligatorio                       |
| [Aplicar un cargo de producto](/es/reference/products/lender/create-loan-product-charges)              | `X-Idempotency` obligatorio                       |
| [Pagar por anticipado una cuenta de préstamo](/es/reference/products/lender/prepay-loan-account)       | `X-Idempotency` obligatorio                       |
| [Pagar por anticipado bajo el paquete de Brasil](/es/reference/products/lender/prepay-loan-account-br) | `X-Idempotency` obligatorio                       |
| [Reprogramar una cuenta de préstamo](/es/reference/products/lender/reschedule-loan-account)            | `X-Idempotency` obligatorio                       |
| [Registrar un pago](/es/reference/products/lender/record-repayment)                                    | `X-Request-ID`, con `X-Idempotency` como respaldo |
| [Revertir una transacción](/es/reference/products/lender/reverse-loan-account-transaction)             | `X-Request-ID`, con `X-Idempotency` como respaldo |

Envía tu propia clave. Con un almacén de idempotencia accesible, las cinco operaciones que **requieren** `X-Idempotency` comparten un comportamiento:

* Un reintento de una llamada **completada** repite la primera respuesta y le estampa `X-Idempotency-Replayed: true`. Nada se registra por segunda vez.
* Un reintento mientras la primera llamada sigue **en vuelo** responde `409`.
* La clave tiene alcance por tenant y expira después de la ventana que define `IDEMPOTENCY_RETRY_WINDOW_SEC`, que de forma predeterminada es 300 segundos.

El middleware compartido falla en modo abierto ante errores transitorios del almacén de idempotencia. Durante una caída, no dependas de la repetición ni de la protección de a lo sumo una vez en el nivel del middleware.

El pago y la reversión funcionan distinto. Ambos leen `X-Request-ID` primero y recurren a `X-Idempotency` cuando no está. Envía uno de los dos: una llamada que no lleva ninguno responde `422`.

Lender guarda el id de solicitud en la base de datos junto con los hechos de la llamada. Un reintento que lleva el mismo id y los mismos hechos repite la primera respuesta por la ruta de respuesta normal, sin header de repetición. El mismo id de solicitud con hechos **distintos** responde `409` en lugar de repetir, así un id nunca puede registrar dos montos distintos. Ese registro no expira.

Los hechos que compara Lender cambian según la operación:

| Operación                | Hechos comparados contra el id de solicitud guardado                                                                                                                                                                      |
| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Registrar un pago        | La cuenta de préstamo, el monto y la fecha efectiva (`transactionDate` cuando falta `effectiveDate`).                                                                                                                     |
| Revertir una transacción | La transacción que se revierte, la cuenta de préstamo, la fecha efectiva de la reversión, el motivo, la versión del perfil y el código de jurisdicción. El monto viene de la transacción original, así que no se compara. |

## Paginación

***

La paginación es por operación, no global. Lee la página de referencia de la operación que llamas, y envía solo los parámetros que declara.

| Lectura                                                                                                                                                                           | Parámetros                                                                      |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- |
| [Listar productos de préstamo](/es/reference/products/lender/list-loan-products) y [listar productos de préstamo brasileños](/es/reference/products/lender/list-loan-products-br) | `limit` (predeterminado 25, tope 100) y `offset` (predeterminado 0, tope 10000) |
| [Eventos de auditoría](/es/reference/products/lender/list-loan-account-audit-events-huma)                                                                                         | `limit` solo (predeterminado 50, tope 100)                                      |

Un valor fuera del rango se rechaza en lugar de ajustarse. Cada otra lectura declara sus propios parámetros, así que acótala con los identificadores y filtros de su página de referencia.

## Errores

***

Los errores de Huma y del handler global responden `application/problem+json` y siguen el [RFC 9457](https://www.rfc-editor.org/rfc/rfc9457). El middleware de autorización y el de idempotencia pueden usar sus propios formatos de respuesta.

| Campo    | Qué lleva                                                                                                                     |
| -------- | ----------------------------------------------------------------------------------------------------------------------------- |
| `status` | El código de estado HTTP.                                                                                                     |
| `title`  | El nombre del estado.                                                                                                         |
| `detail` | Qué salió mal en esta ocurrencia.                                                                                             |
| `errors` | Detalles opcionales de validación de esquema. Cada entrada lleva un `location`, un `message` y el `value` que recibió Lender. |

Ramifica por estado y tipo de contenido. Para un `422`, usa `errors` cuando está presente. La validación del handler o del dominio puede devolver solo `detail` de nivel superior. Una falla del lado del servidor responde con un detalle genérico, así que una causa cruda nunca llega a un cliente.

## Las operaciones por trabajo

***

### Catalogar un producto

Ocho operaciones son dueñas del catálogo. [Crear un producto](/es/reference/products/lender/create-loan-product) y [anexar una versión](/es/reference/products/lender/create-loan-product-version) construyen los términos a los que se vincula una solicitud. La versión es inmutable. [Vincular un perfil contable](/es/reference/products/lender/create-loan-product-accounting-profile) mapea cada evento contable a cuentas contables generales, y Lender lo necesita en el desembolso. [Aplicar un cargo](/es/reference/products/lender/create-loan-product-charges) y [leer tasas flotantes](/es/reference/products/lender/list-loan-product-floating-rates) completan la superficie, junto con [listar](/es/reference/products/lender/list-loan-products), [obtener](/es/reference/products/lender/get-loan-product) y [activar](/es/reference/products/lender/activate-loan-product). Lee [Definir un producto de préstamo](/es/products/lender/define-a-loan-product).

### Originar

Seis operaciones llevan una solicitud desde enviada hasta desembolsada: [crear](/es/reference/products/lender/create-loan-application), luego una de [aprobar](/es/reference/products/lender/approve-loan-application), [rechazar](/es/reference/products/lender/reject-loan-application) o [retirar](/es/reference/products/lender/withdraw-loan-application), luego [desembolsar](/es/reference/products/lender/disburse-loan-application). [Previsualizar un cronograma](/es/reference/products/lender/preview-loan-schedule) calcula cuotas para una cotización y no persiste nada.

Las respuestas de creación y de decisión son las únicas lecturas de una solicitud, así que conserva el body que devuelve cada llamada. Lee [Cómo funciona la originación](/es/products/lender/how-origination-works) para la máquina de estados y el [Inicio rápido](/es/products/lender/lender-quick-start) para las seis llamadas de punta a punta.

### Administrar un préstamo vivo

Cinco lecturas describen la cuenta: [la cuenta](/es/reference/products/lender/get-active-loan-account), [su cronograma](/es/reference/products/lender/get-active-loan-schedule), [sus transacciones](/es/reference/products/lender/list-active-loan-transactions), [sus cargos](/es/reference/products/lender/list-active-loan-charges) y [su historial de auditoría](/es/reference/products/lender/list-loan-account-audit-events-huma).

Cinco escrituras mueven dinero o el cronograma: [previsualizar un pago](/es/reference/products/lender/preview-repayment) antes de [registrarlo](/es/reference/products/lender/record-repayment), [pagar por anticipado](/es/reference/products/lender/prepay-loan-account), [reprogramar](/es/reference/products/lender/reschedule-loan-account) y [revertir una transacción](/es/reference/products/lender/reverse-loan-account-transaction). Nada reescribe la historia. Una reversión asienta una transacción nueva que compensa la original. Lee [Administrar un préstamo](/es/products/lender/service-a-loan).

### Contabilizar y asentar

[Iniciar una ejecución de devengo](/es/reference/products/lender/create-accrual-run) reconoce intereses para un período de competencia. [Listar referencias de diario](/es/reference/products/lender/get-journal-reference) por id de correlación y [leer una](/es/reference/products/lender/get-journal-reference-by-id) para encontrar el registro contable que escribió una ejecución. Lee [Contabilidad y ejecuciones de devengo](/es/products/lender/accounting-and-accrual-runs).

### Descubrir jurisdicciones

Las dos lecturas públicas informan qué códigos de jurisdicción lleva este despliegue y qué decide cada perfil. Lee [Jurisdicciones](/es/products/lender/jurisdictions).

### Brasil

El paquete de Brasil agrega lecturas y escrituras reguladas bajo `/api/v1/br`: [divulgación de CET](/es/reference/products/lender/get-loan-account-cet-disclosure), [el descriptor de operación de crédito](/es/reference/products/lender/get-loan-account-credit-operation-descriptor), [la etapa de PDD](/es/reference/products/lender/get-loan-account-pdd-stage) y [sus transiciones](/es/reference/products/lender/apply-loan-account-pdd-stage-transition), [una cotización de pago anticipado](/es/reference/products/lender/create-prepayment-quote) con [su estado de liquidación](/es/reference/products/lender/get-payoff-statement), [vista previa de impuestos](/es/reference/products/lender/preview-tax) y [consentimiento de capitalización](/es/reference/products/lender/ingest-capitalization-clause-consent). El paquete también lleva sus propias rutas de producto, que se comportan como las genéricas bajo reglas brasileñas. Lee [Paquete regulatorio de Brasil](/es/products/lender/brazil-regulatory-pack).

El recorrido con descuento en nómina es una conversación de eventos con el riel de nómina, no un conjunto de llamadas REST. Lee [Consignado privado](/es/products/lender/consignado-privado).

## Próximos pasos

***

<CardGroup cols={2}>
  <Card title="Inicio rápido" icon="rocket" href="/es/products/lender/lender-quick-start">
    Seis llamadas desde una base de datos vacía hasta un préstamo desembolsado.
  </Card>

  <Card title="Eventos" icon="bell" href="/es/products/lender/lender-events">
    Suscríbete al recorrido de crédito en lugar de hacer sondeo.
  </Card>

  <Card title="Referencia de API" icon="code" href="/es/reference/introduction">
    Cada operación, con las formas completas de solicitud y respuesta.
  </Card>

  <Card title="Requisitos previos" icon="list-check" href="/es/products/lender/lender-prerequisites">
    Los servicios, las migraciones y la configuración que necesita una primera llamada.
  </Card>
</CardGroup>
