# Amortize loan combinations

NOTE: This endpoint does not support recurring dynamic fees. Origination fees and other dynamic non-recurring fees are supported.

Endpoint: POST /amortize-combinations
Version: 2025-03-26
Security: oauth2, bearerAuth, apiKeyHeader

## Request fields (application/json):

  - `loanTypeId` (string, required)
    The loan type identifier. This is created specifically for each lender's loan product by Peach.

  - `atOrigination` (object, required)

  - `atOrigination.combinations` (array, required)
    The combinations of duration, interest rates, promo rates, and
maximum interest cap for the requested amount financed

  - `atOrigination.combinations.combinationId` (string, required)
    The identifier of this specific amortization combination
of duration, interest rates, promo rates and total
interest cap amount.

  - `atOrigination.combinations.duration` (integer, required)
    The duration of the loan as a number of `paymentFrequency` periods.
For example:
- if `paymentFrequency=monthly` and `duration=6`, it's a loan with 6 months duration and will have 6 due dates.
- if `paymentFrequency=weekly` and `duration=24`, it's a loan with 24 weeks duration and will have 24 due dates.

  - `atOrigination.combinations.interestRates` (array, required)
    Interest rates for the loan or the draw. Can be a single interest rate for the entire duration of the loan/draw.
Or, it can be multiple interest rates for partial periods of the loan/draw. If draw-specific rates are not passed,
the draw will use the LOC rates.

  - `atOrigination.combinations.interestRates.days` (integer, required)
    Number of calendar days the interest rate applies to. An entry with `days: null` is required
at the end of the list to indicate that the interest rate applies to the end of the loan duration.
For example:
`{"days": 30, "rate": 0.1},`
`{"days": 60, "rate": 0.2},`
`{"days": null, "rate": 0.25}`
The loan will accrue interest of 10% for the first 30 days. Between days 31-90
the loan will accrue interest of 20%. From day 91 until the end, the loan will accrue
interest of 25%.

  - `atOrigination.combinations.interestRates.interestType` (string)
    The interest type. The interest type cannot be changed after the loan or draw status changes to `originated` and onward.
`absolute` - interest rates defined as `absolute` will use the value as provided here without adding the Index Interest Rate.
- Negative interest `rate` value is not allowed.
- If the provided `rate` is outside of the range defined on the loan type, the system will accept the `rate` but will return a warning in the response's object `ratesValidation`.

`spread` - interest rates defined as `spread` will calculate an absolute rate by adding the relative loan rate (aka spread)
provided in the `rate` attribute to the Index Interest Rate effective on the date the interest is accrued.
In case the Index Interest Rate is not set, the system will assume that the Index Interest Rate value is zero on the date the interest is accrued.
- Negative interest spread `rate` value is allowed, but the system will default to zero if the addition of the Index Interest Rate still results in a negative rate.
- If the calculated absolute rate, `rate` (aka spread) plus Index Interest Rate, is outside of the range defined on the loan type, the system will accept the `rate` but will return a warning in the response's object `ratesValidation`.
    Enum: "absolute", "spread"

  - `atOrigination.combinations.interestRates.rate` (number, required)
    The annual interest rate for the period defined. The format is decimal.
For example, 0.01 is a 1% annual rate, 0.2 is a 20% annual rate.

  - `atOrigination.combinations.promoRates` (array)
    The promotional interest rates (aka rate discounts) for the loan or the draw.
Can be a single promo rate for the entire duration of the loan/draw.
Or, it can be multiple promo rates for partial periods of the loan/draw.
For example, if the `interestRate` is 20% for the first 90 days and the `promoRate` has value
5% for 30 days, then the effective rate for the first 30 days is 15%.
The promo rates are unconditional and will be applied regardless of the loan status.

  - `atOrigination.combinations.promoRates.days` (integer)
    Number of calendar days the promo rate applies to. Use `null` to indicate that
the promo rate applies to the end of the loan duration.
For example:
`{"days": 30 ,"rate": 0.1},`
`{"days": null, "rate": 0.01}`
The loan will receive interest discount of 10% for the first 30 days.
From day 31 until the end, the loan will receive interest discount of 1%.

  - `atOrigination.combinations.promoRates.rate` (number)
    The annual promo rate for the period defined. Loans cannot accrue negative interest rate.
If the promo rate is greater than the interest rate, a loan will accrue 0% interest rate.
The format is decimal. For example, 0.01 is a 1% annual rate, 0.15 is a 15% annual rate.

  - `atOrigination.combinations.totalInterestCapAmount` (number)
    The maximum amount of interest the borrower will ever pay. If not applicable, set to `null`.

## Response 200 fields (application/json):

  - `message` (string)
    Description of the server action or error.

  - `status` (integer)
    HTTP status code.

  - `data` (array)

  - `data.combinationId` (string)

  - `data.fees` (object)

  - `data.fees.originationFeeAmount` (number)
    The amount of the origination fee.

  - `data.fees.totalOtherFeesAmount` (number)
    The total amount of non-origination fees that are expected to be charged on the loan.

  - `data.interestRateBelowMinOrZero` (boolean)
    The interest rate is below the minimum annual interest rate.

  - `data.interestRateExceedsMax` (boolean)
    The interest rate exceeds the maximum annual interest rate.

  - `data.numberPayments` (integer)
    The number of expected payment due dates.

  - `data.periodicPaymentAmount` (number)
    The amortized periodic payment amount expected to be paid by the borrower on due dates.

  - `data.totalDiscountAmount` (number)
    The total amount of discount at origination as a result of promo rates.

  - `data.totalInterestAmount` (number)
    The total amount of interest the loan should accrue. Because of rounding issues, the total of expected
payments `interestAmount` might be different from `totalInterestAmount`.

  - `data.totalPaymentsAmount` (number)
    The total amount of expected payments.

  - `data.forgoneInterestAmount` (number)
    Forgone interest amount due to the specified
`interestCapAmount`.

