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

# Simular crédito

> Calcula la tabla de amortización de un crédito con cuotas mensuales y un resumen con el costo total y el CAE (carga anual equivalente). Es un cálculo puro: no crea ni modifica ninguna solicitud en tu cuenta.

Las cuotas se calculan con interés compuesto sobre saldo, con la tasa mensual que envías en `rate`. Para una `operationDate` desde el 2026-10-23 la tasa se capitaliza mensualmente (`(1+rate/100)^(días/30)-1`); para fechas anteriores se usa la tasa nominal anual `rate×12` prorrateada por días/365. Los gastos (`operationCost`, `otherExpenses`), sus IVA, `taxes` y `notary` se suman al capital financiado. La primera cuota vence en `firstPaymentDate`, que debe ser posterior a `operationDate` y a lo más 365 días después; las siguientes vencen el mismo día de cada mes. Con `workingDayActive` en `true` cada vencimiento se mueve al siguiente día hábil. `totalMonths` va de 1 a 180 cuotas.

Usa un `firstPaymentDate` entre el 1 y el 28 que sea día hábil.

Las fechas de vencimiento de la respuesta siempre vienen a las 12:00 UTC; usa solo la fecha.

Envía todos los campos del body, con `0` en los montos que no apliquen. El campo `interestType` no es necesario: el cálculo siempre usa interés compuesto.



## OpenAPI

````yaml openapi/clients.yaml POST /financing/creditRequest/simulation
openapi: 3.1.0
info:
  title: API de clientes de Pruff
  version: '1'
  description: >-
    Endpoints que tus sistemas llaman para leer y operar los datos de tu empresa
    en Pruff. Todas las solicitudes van por HTTPS y se autentican con el header
    `x-api-key`. Las convenciones de formato, paginación y errores se describen
    en https://docs.pruff.com/api/introduccion.
servers:
  - url: https://api.pruff.com/api/clients
security:
  - ApiKeyAuth: []
tags:
  - name: Facturas
    description: Consulta de facturas electrónicas, facturas transables y cesiones.
  - name: Documentos
    description: Consulta y creación de documentos asociados a tus clientes.
  - name: Archivos
    description: Carga de archivos a operaciones y a los requerimientos de tus documentos.
  - name: Financiamiento
    description: >-
      Simula créditos, crea solicitudes de factoring y consulta las prórrogas de
      tu empresa.
  - name: Comité
    description: >-
      Consulta las aprobaciones de una solicitud en los comités de riesgo y de
      operaciones, y registra nuevas firmas.
  - name: Chat
    description: Exporta y envía mensajes del chat de una solicitud.
  - name: Reportes
    description: >-
      Reportes de operaciones, cartera, recaudaciones, cuentas pendientes y
      flujos de tu empresa.
  - name: Datahub
    description: >-
      Consulta de la información tributaria, financiera y de riesgo que Pruff
      tiene de tus clientes y deudores.
  - name: Mercado Público
    description: >-
      Licitaciones y órdenes de compra de Mercado Público (ChileCompra) cargadas
      en Pruff.
  - name: CRM
    description: >-
      Datos comerciales de tu CRM en Pruff: empresas con su ficha, pipeline,
      prospectos, gestiones y simulaciones.
  - name: SGR
    description: Operaciones SGR (garantías) de tu empresa.
  - name: Sincronizador
    description: >-
      Pide sincronizar a un cliente con el SII o la TGR para obtener su
      información más actualizada, y consulta el estado de esas
      sincronizaciones.
  - name: Usuarios
    description: >-
      Administra los usuarios de tu empresa en Pruff (crear, editar, eliminar,
      consultar su perfil y asignar subordinados) y consulta las cuentas
      (empresas conectadas) a las que cada usuario tiene acceso.
  - name: Contactos
    description: Crea contactos asociados a las empresas de tu cartera.
paths:
  /financing/creditRequest/simulation:
    post:
      tags:
        - Financiamiento
      summary: Simular crédito
      description: >-
        Calcula la tabla de amortización de un crédito con cuotas mensuales y un
        resumen con el costo total y el CAE (carga anual equivalente). Es un
        cálculo puro: no crea ni modifica ninguna solicitud en tu cuenta.


        Las cuotas se calculan con interés compuesto sobre saldo, con la tasa
        mensual que envías en `rate`. Para una `operationDate` desde el
        2026-10-23 la tasa se capitaliza mensualmente
        (`(1+rate/100)^(días/30)-1`); para fechas anteriores se usa la tasa
        nominal anual `rate×12` prorrateada por días/365. Los gastos
        (`operationCost`, `otherExpenses`), sus IVA, `taxes` y `notary` se suman
        al capital financiado. La primera cuota vence en `firstPaymentDate`, que
        debe ser posterior a `operationDate` y a lo más 365 días después; las
        siguientes vencen el mismo día de cada mes. Con `workingDayActive` en
        `true` cada vencimiento se mueve al siguiente día hábil. `totalMonths`
        va de 1 a 180 cuotas.


        Usa un `firstPaymentDate` entre el 1 y el 28 que sea día hábil.


        Las fechas de vencimiento de la respuesta siempre vienen a las 12:00
        UTC; usa solo la fecha.


        Envía todos los campos del body, con `0` en los montos que no apliquen.
        El campo `interestType` no es necesario: el cálculo siempre usa interés
        compuesto.
      operationId: simulateCreditRequest
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreditSimulationRequest'
            example:
              firstPaymentDate: '2026-12-15T00:00:00.000Z'
              workingDayActive: true
              operationDate: '2026-11-15T00:00:00.000Z'
              totalMonths: 3
              amount: 1000000
              rate: 1.5
              operationCost: 0
              otherExpenses: 0
              operationIVA: 0
              otherExpensesIVA: 0
              taxes: 0
              notary: 0
      responses:
        '200':
          description: Tabla de amortización y resumen del crédito simulado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreditSimulationResponse'
              example:
                summary:
                  cae: 18
                  totalPayments: 3
                  paymentDay: 15
                  totalCost: 1030655.09832
                  totalLoanAmount: 1000000
                  firstPayment: '2026-12-15T12:00:00.000Z'
                  lastPayment: '2027-02-15T12:00:00.000Z'
                  monthlyInterestRate: 1.5
                  annualInterestRate: 18
                  operationalExpenses: 0
                  otherExpenses: 0
                  taxes: 0
                  notary: 0
                amortizationSchedule:
                  - month: 1
                    paymentDate: '2026-12-15T12:00:00.000Z'
                    amount: 343551.69944
                    interest: 15000
                    principal: 328551.69944
                    balance: 671448.30056
                    operationCost: 0
                    otherExpenses: 0
                    totalAmortization: 328551.69944
                  - month: 2
                    paymentDate: '2027-01-15T12:00:00.000Z'
                    amount: 343551.69944
                    interest: 10410.03804
                    principal: 333141.6614
                    balance: 338306.63916
                    operationCost: 0
                    otherExpenses: 0
                    totalAmortization: 661693.36084
                  - month: 3
                    paymentDate: '2027-02-15T12:00:00.000Z'
                    amount: 343551.69944
                    interest: 5245.05756
                    principal: 338306.64188
                    balance: 0
                    operationCost: 0
                    otherExpenses: 0
                    totalAmortization: 1000000.00272
        '400':
          description: >-
            Algún campo del body falta o no es válido. `displayMessage` trae el
            primer error y `data.errors` los trae todos.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationError'
              examples:
                totalMonthsExcedido:
                  summary: totalMonths sobre el máximo
                  value:
                    message: too_big
                    displayMessage: La cantidad de cuotas no puede superar 180
                    data:
                      errors:
                        - path: totalMonths
                          message: La cantidad de cuotas no puede superar 180
                          code: too_big
                totalMonthsFaltante:
                  summary: Falta totalMonths o no es un número entero
                  value:
                    message: invalid_type
                    displayMessage: La cantidad de cuotas debe ser un número entero
                    data:
                      errors:
                        - path: totalMonths
                          message: La cantidad de cuotas debe ser un número entero
                          code: invalid_type
                notaryFaltante:
                  summary: Falta notary
                  value:
                    message: invalid_type
                    displayMessage: >-
                      Los gastos notariales deben ser un número mayor o igual a
                      cero
                    data:
                      errors:
                        - path: notary
                          message: >-
                            Los gastos notariales deben ser un número mayor o
                            igual a cero
                          code: invalid_type
                primeraCuotaNoPosterior:
                  summary: firstPaymentDate no es posterior a operationDate
                  value:
                    message: custom
                    displayMessage: >-
                      La fecha del primer pago debe ser posterior a la de
                      operación
                    data:
                      errors:
                        - path: firstPaymentDate
                          message: >-
                            La fecha del primer pago debe ser posterior a la de
                            operación
                          code: custom
                primeraCuotaMuyLejana:
                  summary: firstPaymentDate más de 365 días después de operationDate
                  value:
                    message: custom
                    displayMessage: >-
                      La primera cuota no puede vencer más de 365 días después
                      de la operación
                    data:
                      errors:
                        - path: firstPaymentDate
                          message: >-
                            La primera cuota no puede vencer más de 365 días
                            después de la operación
                          code: custom
                fechaNoIso:
                  summary: firstPaymentDate no está en formato ISO 8601
                  value:
                    message: invalid_union
                    displayMessage: La fecha del primer pago debe estar en formato ISO 8601
                    data:
                      errors:
                        - path: firstPaymentDate
                          message: >-
                            La fecha del primer pago debe estar en formato ISO
                            8601
                          code: invalid_union
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalError'
        '504':
          $ref: '#/components/responses/Timeout'
components:
  schemas:
    CreditSimulationRequest:
      type: object
      required:
        - firstPaymentDate
        - workingDayActive
        - operationDate
        - totalMonths
        - amount
        - rate
        - operationCost
        - otherExpenses
        - operationIVA
        - otherExpensesIVA
        - taxes
        - notary
      properties:
        firstPaymentDate:
          type: string
          oneOf:
            - format: date
            - format: date-time
          description: >-
            Fecha de vencimiento de la primera cuota, en formato ISO 8601
            (`YYYY-MM-DD`, o fecha y hora con `Z` u offset). Se compara por día
            calendario en UTC, así que debe caer en un día posterior al de
            `operationDate` y a lo más 365 días después. Las demás cuotas vencen
            el mismo día de cada mes siguiente; usa un día entre el 1 y el 28
            que sea hábil para que no se salte ningún mes.
          example: '2026-12-15T00:00:00.000Z'
        workingDayActive:
          type: boolean
          description: >-
            Con `true` cada vencimiento se mueve al siguiente día hábil. Con
            `false` las cuotas vencen el mismo día de cada mes, aunque no sea
            hábil.
          example: true
        operationDate:
          type: string
          oneOf:
            - format: date
            - format: date-time
          description: >-
            Fecha en que se entrega el crédito, en formato ISO 8601
            (`YYYY-MM-DD`, o fecha y hora con `Z` u offset). Desde esta fecha
            corren los intereses de la primera cuota. Desde el 2026-10-23 la
            tasa se capitaliza mensualmente (`(1+rate/100)^(días/30)-1`); para
            fechas anteriores se usa la tasa nominal anual `rate×12` prorrateada
            por días/365.
          example: '2026-11-15T00:00:00.000Z'
        totalMonths:
          type: integer
          minimum: 1
          maximum: 180
          description: Cantidad de cuotas mensuales, entre 1 y 180.
          example: 3
        amount:
          type: number
          exclusiveMinimum: 0
          description: >-
            Monto del crédito en CLP, sin gastos ni impuestos. Envía un valor
            mayor que 0.
          example: 1000000
        rate:
          type: number
          exclusiveMinimum: 0
          description: >-
            Tasa de interés mensual en porcentaje (por ejemplo, `1.5` es 1,5 %
            mensual). Envía un valor mayor que 0.
          example: 1.5
        operationCost:
          type: number
          minimum: 0
          description: Gastos de operación en CLP. Envía `0` si no hay.
          example: 0
        otherExpenses:
          type: number
          minimum: 0
          description: Otros gastos en CLP. Envía `0` si no hay.
          example: 0
        operationIVA:
          type: number
          minimum: 0
          description: >-
            IVA de los gastos de operación en CLP. Envíalo siempre; envía `0` si
            no aplica.
          example: 0
        otherExpensesIVA:
          type: number
          minimum: 0
          description: >-
            IVA de los otros gastos en CLP. Envíalo siempre; envía `0` si no
            aplica.
          example: 0
        taxes:
          type: number
          minimum: 0
          description: >-
            Impuestos en CLP que se financian junto con el crédito. Envíalo
            siempre; envía `0` si no aplican.
          example: 0
        notary:
          type: number
          minimum: 0
          description: >-
            Gastos notariales en CLP que se financian junto con el crédito.
            Envíalo siempre; envía `0` si no aplican.
          example: 0
    CreditSimulationResponse:
      type: object
      required:
        - summary
        - amortizationSchedule
      properties:
        summary:
          $ref: '#/components/schemas/CreditSimulationSummary'
        amortizationSchedule:
          type: array
          description: Una fila por cuota, en orden de vencimiento.
          items:
            $ref: '#/components/schemas/CreditSimulationInstallment'
    ValidationError:
      type: object
      required:
        - message
        - displayMessage
        - data
      description: Error de validación del body, de los query params o de los path params.
      properties:
        message:
          type: string
          description: >-
            Código del primer error de validación (por ejemplo `custom`,
            `invalid_type`, `invalid_format`, `invalid_value`, `invalid_union`).
        displayMessage:
          type: string
          description: >-
            Mensaje del primer error de validación, pensado para mostrarlo a una
            persona. Normalmente en español; algunos mensajes de validación
            vienen en inglés.
        data:
          type: object
          required:
            - errors
          properties:
            errors:
              type: array
              description: Todos los errores de validación encontrados.
              items:
                type: object
                required:
                  - path
                  - message
                  - code
                properties:
                  path:
                    type: string
                    description: >-
                      Campo con el error. Para listas incluye la posición, por
                      ejemplo `types.0`. `(root)` si el error es del body
                      completo.
                  message:
                    type: string
                    description: Descripción del error en español.
                  code:
                    type: string
                    description: Código del tipo de error.
    CreditSimulationSummary:
      type: object
      required:
        - cae
        - totalPayments
        - paymentDay
        - totalCost
        - totalLoanAmount
        - firstPayment
        - lastPayment
        - monthlyInterestRate
        - annualInterestRate
        - operationalExpenses
        - otherExpenses
        - taxes
        - notary
      properties:
        cae:
          type: number
          description: >-
            Carga anual equivalente en porcentaje, según el Decreto 43 de 2012.
            Es la tasa mensual que iguala el monto del crédito con todas las
            cuotas, cada una descontada por los días transcurridos desde
            `operationDate` divididos por 30, multiplicada por 12. Incluye
            intereses y gastos.
        totalPayments:
          type: integer
          description: Cantidad de cuotas.
        paymentDay:
          type: integer
          description: Día del mes en que vence la primera cuota.
        totalCost:
          type: number
          description: Suma de todas las cuotas en CLP, es decir, lo que pagas en total.
        totalLoanAmount:
          type: number
          description: >-
            Monto financiado en CLP, igual a la suma del capital de todas las
            cuotas. Es `amount` más gastos de operación, otros gastos, el IVA de
            ambos, impuestos y gastos notariales.
        firstPayment:
          type: string
          format: date-time
          description: >-
            Vencimiento de la primera cuota, en formato ISO 8601. La hora
            siempre es 12:00 UTC; usa solo la fecha.
        lastPayment:
          type: string
          format: date-time
          description: >-
            Vencimiento de la última cuota, en formato ISO 8601. La hora siempre
            es 12:00 UTC; usa solo la fecha.
        monthlyInterestRate:
          type: number
          description: Tasa de interés mensual en porcentaje, igual a la enviada en `rate`.
        annualInterestRate:
          type: number
          description: >-
            Tasa mensual multiplicada por 12, en porcentaje. Sólo considera la
            tasa de interés; para el costo anual con gastos usa `cae`.
        operationalExpenses:
          type: number
          description: Gastos de operación en CLP, igual a `operationCost`.
        otherExpenses:
          type: number
          description: Otros gastos en CLP.
        taxes:
          type: number
          description: Impuestos en CLP, igual a `taxes`.
        notary:
          type: number
          description: Gastos notariales en CLP, igual a `notary`.
    CreditSimulationInstallment:
      type: object
      required:
        - month
        - paymentDate
        - amount
        - interest
        - principal
        - balance
        - operationCost
        - otherExpenses
        - totalAmortization
      properties:
        month:
          type: integer
          description: Número de la cuota, desde 1.
        paymentDate:
          type: string
          format: date-time
          description: >-
            Fecha de vencimiento de la cuota, en formato ISO 8601. La hora
            siempre es 12:00 UTC; usa solo la fecha.
        amount:
          type: number
          description: Valor total de la cuota en CLP.
        interest:
          type: number
          description: Parte de la cuota que corresponde a intereses, en CLP.
        principal:
          type: number
          description: Parte de la cuota que amortiza capital, en CLP.
        balance:
          type: number
          description: >-
            Saldo de capital pendiente después de pagar la cuota, en CLP. En la
            última cuota es 0, salvo por redondeo.
        operationCost:
          type: number
          description: Gastos de operación incluidos en la cuota, en CLP.
        otherExpenses:
          type: number
          description: Otros gastos incluidos en la cuota, en CLP.
        totalAmortization:
          type: number
          description: Capital amortizado acumulado hasta esta cuota, en CLP.
    Error:
      type: object
      required:
        - message
      properties:
        message:
          type: string
          description: >-
            Identifica el error. En algunos casos es un texto en inglés con
            valores variables. Para tu lógica, usa el código HTTP y, cuando
            exista, `data.code`.
        displayMessage:
          type: string
          description: >-
            Mensaje pensado para mostrarlo a una persona. Normalmente en
            español; algunos mensajes de validación vienen en inglés.
        data:
          description: Detalle adicional del error, cuando existe.
  responses:
    Unauthorized:
      description: >-
        Falta el header `x-api-key`, su valor no es válido o la cuenta de API de
        tu empresa no está habilitada.
      content:
        application/json:
          schema:
            type: object
            required:
              - message
            properties:
              message:
                type: string
          example:
            message: 'Unauthorized: Invalid API Key'
    TooManyRequests:
      description: >-
        Tu empresa superó el límite de solicitudes. Todas las API keys de tu
        empresa comparten el mismo límite. Espera los segundos que indica el
        header `Retry-After` (o `data.retryAfterSeconds`) antes de reintentar.
      headers:
        Retry-After:
          description: Segundos que debes esperar antes de reintentar.
          schema:
            type: integer
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            message: >-
              Rate limit exceeded: 501 requests in the current 60s window, limit
              is 500. Retry in 12s.
            displayMessage: >-
              Superaste el límite de 500 solicitudes cada 60 segundos. Vuelve a
              intentarlo en 12 segundos.
            data:
              code: RATE_LIMIT_EXCEEDED
              scope: All API keys of your company share this budget.
              limit: 500
              used: 501
              windowSeconds: 60
              retryAfterSeconds: 12
              resetAt: '2026-11-04T15:00:12.000Z'
              hint: >-
                Wait until resetAt (or honor the Retry-After header) before
                retrying. Avoid repeating identical requests: reuse responses
                you already fetched, use filters and larger pageSize values
                instead of one request per item, and cap your client
                concurrency.
    InternalError:
      description: >-
        Error inesperado en Pruff. El texto de `message` puede variar (por
        ejemplo en mayúsculas); no dependas de él.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            message: Internal server error
    Timeout:
      description: >-
        La solicitud superó el tiempo máximo de 55 segundos. La operación puede
        haberse completado igual: antes de reintentar una solicitud que crea o
        modifica datos, verifica su estado.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            message: request_timeout
            displayMessage: La solicitud excedió el tiempo máximo permitido
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: API key que Pruff entrega a tu empresa.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.