> ## 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

> Ubícate en la API de Lender: la ruta base /api/v1, autenticación bearer, autorización por recurso y acción, dinero como string decimal, idempotencia acotada, paginación, la forma de error problem+json y las operaciones agrupadas por trabajo.

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

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

<Note>
  Los documentos OpenAPI de este portal son fuentes de renderizado para las páginas de referencia. No son contratos de cliente ni base para generar un SDK.
</Note>

## Autenticación

***

Lender acepta un token bearer JWT. Un solo esquema de seguridad aplica a todo el documento:

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

Dos lecturas son públicas y no piden token: [listar jurisdicciones](/es/reference/lender/list-jurisdictions) y [obtener una jurisdicción](/es/reference/lender/get-jurisdiction). El registro es metadata del despliegue, así que un cliente puede leerlo antes de tener 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 request contra la aplicación `lender`, un recurso y una acción. El recurso sigue a 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 del oficial solo las acciones que su trabajo necesita. `make generate-casdoor` escribe los roles y permisos de Lender en un archivo semilla que cargas en tu proveedor de identidad — [Prerrequisitos](/es/lender/lender-prerequisites) muestra el conjunto mínimo para originar.

### Identidad de tenant y de oficial

***

**El tenant nunca es un header, un parámetro de query ni un campo del body.** Lender lo resuelve desde la identidad validada del request. Consulta [Multi-tenancy](/es/multi-tenancy).

El oficial asignado sale del subject del token de la misma forma. Ningún body de solicitud de préstamo lleva un campo de oficial, y ningún valor enviado por el cliente sobrescribe el subject.

## Requests y responses

***

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

**Envía todo campo de dinero y de tasa como string decimal**, nunca como número JSON — `"50000.00"`, `"0.01500000"`. Lender los devuelve igual. Las marcas de tiempo son RFC 3339 en UTC.

## Idempotencia

***

Las escrituras de dinero y de cronograma aceptan el header de request `X-Idempotency`.

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

Envía tu propia clave. Las cinco operaciones que **exigen** `X-Idempotency` comparten un comportamiento:

* Un reintento de una llamada **completada** repite la primera respuesta y le pone `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 de tenant y expira tras la ventana que fija `IDEMPOTENCY_RETRY_WINDOW_SEC`, con default de 300 segundos.

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

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

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

| Operación                | Datos comparados contra el id del request guardado                                                                                                                                                                       |
| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Registrar un pago        | La cuenta de préstamo, el monto y la fecha de efecto (`transactionDate` cuando falta `effectiveDate`).                                                                                                                   |
| Reversar una transacción | La transacción que se reversa, 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 ella declara.

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

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

## Errores

***

Todo error responde `application/problem+json` y sigue [RFC 9457](https://www.rfc-editor.org/rfc/rfc9457).

| Campo    | Qué lleva                                                                                                                |
| -------- | ------------------------------------------------------------------------------------------------------------------------ |
| `status` | El código de estado HTTP.                                                                                                |
| `title`  | El nombre del estado.                                                                                                    |
| `detail` | Qué falló en esta ocurrencia.                                                                                            |
| `errors` | Para una falla de validación, una entrada por campo, cada una con `location`, `message` y el `value` que recibió Lender. |

Ramifica por el estado y, para un `422`, por los valores de `location` en `errors`. Un `422` nombra cada campo que falló. Una falla del lado del servidor responde con un detail 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/lender/create-loan-product) y [agregar una versión](/es/reference/lender/create-loan-product-version) construyen los términos a los que se ata una solicitud. La versión es inmutable. [Vincular un perfil contable](/es/reference/lender/create-loan-product-accounting-profile) mapea cada evento contable a cuentas del libro mayor, y Lender lo necesita en el desembolso. [Aplicar un cargo](/es/reference/lender/create-loan-product-charges) y [leer tasas flotantes](/es/reference/lender/list-loan-product-floating-rates) completan la superficie, junto a [listar](/es/reference/lender/list-loan-products), [obtener](/es/reference/lender/get-loan-product) y [activar](/es/reference/lender/activate-loan-product). Lee [Definir un producto de préstamo](/es/lender/define-a-loan-product).

### Originar

Seis operaciones llevan una solicitud de enviada a desembolsada: [crear](/es/reference/lender/create-loan-application), luego una de [aprobar](/es/reference/lender/approve-loan-application), [rechazar](/es/reference/lender/reject-loan-application) o [retirar](/es/reference/lender/withdraw-loan-application), y después [desembolsar](/es/reference/lender/disburse-loan-application). [Previsualizar un cronograma](/es/reference/lender/preview-loan-schedule) calcula las 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 guarda el body que devuelve cada llamada. Lee [Cómo funciona la originación](/es/lender/how-origination-works) para la máquina de estados e [Inicio rápido](/es/lender/lender-quick-start) para las seis llamadas de punta a punta.

### Hacer servicing de un préstamo vivo

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

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

### Contabilizar y asentar

[Iniciar una ejecución de devengo](/es/reference/lender/create-accrual-run) reconoce intereses de un período de competencia. [Lista las referencias de asiento](/es/reference/lender/get-journal-reference) por id de correlación y [lee una](/es/reference/lender/get-journal-reference-by-id) para encontrar el registro contable que escribió una ejecución. Lee [Contabilidad y ejecuciones de devengo](/es/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/lender/jurisdictions).

### Brasil

El paquete Brasil agrega lecturas y escrituras reguladas bajo `/api/v1/br`: [divulgación de CET](/es/reference/lender/get-loan-account-cet-disclosure), [el descriptor de operación de crédito](/es/reference/lender/get-loan-account-credit-operation-descriptor), [etapa PDD](/es/reference/lender/get-loan-account-pdd-stage) y [sus transiciones](/es/reference/lender/apply-loan-account-pdd-stage-transition), [una cotización de prepago](/es/reference/lender/create-prepayment-quote) con [su estado de liquidación](/es/reference/lender/get-payoff-statement), [previsualización de impuestos](/es/reference/lender/preview-tax) y [consentimiento de capitalización](/es/reference/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 [Pack regulatorio de Brasil](/es/lender/brazil-regulatory-pack).

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

## Próximos pasos

***

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

  <Card title="Eventos" icon="bell" href="/es/lender/lender-events">
    Suscríbete a la jornada de crédito en lugar de hacer polling.
  </Card>

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

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