# Crear una instantánea de préstamo

Crea una nueva instantánea de préstamo para un cliente. Cada solicitud exitosa desencadena un intento automático de cobro por domiciliación el mismo día o el siguiente día hábil en México. La respuesta devuelve el id de la instantánea recién creada. Cuando el intento de cobro se completa, Belvo envía una notificación webhook con el resultado.

Endpoint: POST /loans
Version: 1.0.0
Security: ApiKeyAuth, ApiKeySecret

## Request fields (application/json):

  - `paymentMethodId` (string, required)
    El paymentMethod.id asociado con este préstamo. El método de pago debe existir y pertenecer al comerciante.

  - `merchantCustomerId` (string, required)
    Su identificador único para el cliente. Máximo 50 caracteres, solo alfanumérico.

  - `daysOverdue` (integer, required)
    El número de días que el préstamo está vencido. Debe ser 0 o mayor.

  - `totalBalance` (number, required)
    El saldo total pendiente. Debe ser positivo y no exceder 9999999999.99.

  - `principalAmount` (number, required)
    El monto principal del préstamo. Debe ser positivo y no exceder 9999999999.99.

  - `defaultDate` (string, required)
    La fecha en que el cliente incumplió con este préstamo, en formato YYYY-MM-DD.

  - `issueDate` (string, required)
    La fecha en que se emitió originalmente el préstamo, en formato YYYY-MM-DD.

  - `loanAmount` (number)
    El monto original del préstamo. Debe ser mayor que 0.

  - `interestAmount` (number)
    El monto de interés acumulado. Debe ser 0 o mayor.

  - `feesAmount` (number)
    Cualquier tarifa asociada con el préstamo. Debe ser 0 o mayor.

  - `latePaymentInterestAmount` (number)
    Intereses acumulados debido al pago tardío. Debe ser 0 o mayor.

  - `openingCommissionAmount` (number)
    Comisión de apertura cobrada por el préstamo. Debe ser 0 o mayor.

  - `yearlyOrdinalInterestRate` (number)
    La tasa de interés anual con hasta 4 decimales.

  - `customerSalary` (number)
    El salario del cliente. Debe ser positivo y no exceder 99999999.99.

  - `customerAddress` (string)
    La dirección del cliente. Máximo 200 caracteres.

  - `creditStatus` (string)
    El estado de crédito del préstamo. Puede ser uno de los siguientes:
  - past_due
    El pago está vencido.
  - restructured
    El préstamo ha sido reestructurado.
  - canceled
    El préstamo ha sido cancelado.
  - in_arrears
    El préstamo está en mora.
    Enum: "past_due", "restructured", "canceled", "in_arrears"

  - `paidInstallments` (integer)
    El número de cuotas ya pagadas. Debe ser 0 o mayor.

  - `paidAmount` (number)
    El monto total ya pagado. Debe ser 0 o mayor.

  - `lastPaymentDate` (string)
    La fecha del último pago en formato YYYY-MM-DD.

  - `lastPaymentAmount` (number)
    El monto del último pago. Debe ser 0 o mayor.

  - `mainPhoneNumber` (string)
    El número de teléfono principal del cliente con el prefijo del código de país.

  - `reference` (string)
    Su referencia para este préstamo. Máximo 50 caracteres.

## Response 201 fields (application/json):

  - `id` (string)
    El identificador único del registro de historial de préstamo recién creado.
    Example: "7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d"

## Response 400 fields (application/json):

  - `statusCode` (integer)
    El código de estado HTTP para este error.
    Example: 400

  - `error` (string)
    La descripción del código de estado HTTP para este error.
    Example: "Bad Request"

  - `message` (any)
    Una breve descripción del error, indicando qué está mal con la solicitud.
> Nota: Devolvemos una cadena o un arreglo de cadenas, dependiendo del/los error(es) de validación.

La descripción puede ser (entre otras):

  - id must be a UUID
  - Not enough balance
  - amount is not a valid decimal number.
  - currency must be one of the following values: cop, mxn, usd
  - reference must be a string
  - Customer not found for merchant
  - documentType is a required field
    Example: "id must be a UUID"

## Response 401 fields (application/json):

  - `statusCode` (integer)
    El código de estado HTTP para este error.
    Example: 401

  - `error` (string)
    La descripción del código de estado HTTP para este error.
    Example: "Unauthorized"

  - `message` (string)
    Una breve descripción del error, indicando qué está mal con la solicitud. En el caso de un error 401 Unauthorized, el mensaje es:

  - Unauthorized credentials
    Example: "Unauthorized credentials"

## Response 403 fields (application/json):

  - `statusCode` (integer)
    El código de estado HTTP para este error.
    Example: 403

  - `error` (string)
    La descripción del código de estado HTTP para este error.
    Example: "Forbidden"

  - `message` (string)
    Una breve descripción del error, indicando por qué la solicitud está prohibida.
    Example: "Forbidden"

## Response 404 fields (application/json):

  - `statusCode` (integer)
    El código de estado HTTP para este error.
    Example: 404

  - `error` (string)
    La descripción del código de estado HTTP para este error.
    Example: "Not Found"

  - `message` (string)
    Una breve descripción del error, indicando qué está mal con la solicitud. La descripción puede ser (entre otras):

  - Payout Target not found
  - Payment method not found
  - Customer not found
    Example: "Payout Target not found"

## Response 409 fields (application/json):

  - `statusCode` (integer)
    El código de estado HTTP para este error.
    Example: 409

  - `error` (string)
    La descripción del código de estado HTTP para este error.
    Example: "Conflict"

  - `message` (string)
    Una breve descripción del error, que indique la naturaleza del conflicto. La descripción puede ser (entre otras):

  - A loan snapshot with this merchantCustomerId and defaultDate already exists
    Example: "A loan snapshot with this merchantCustomerId and defaultDate already exists"


