---
title: "Use this when you need a fixed-rate loan or mortgage's level monthly payment plus a year-by-year amortization schedule (principal paid, interest paid, remaining balance) rather than doing the amortization arithmetic yourself."
method: POST
path: "/v1/amortization_schedule"
tags: ["finance"]
---

# Use this when you need a fixed-rate loan or mortgage's level monthly payment plus a year-by-year amortization schedule (principal paid, interest paid, remaining balance) rather than doing the amortization arithmetic yourself.

`POST /v1/amortization_schedule`

## Request

- Base URL: `https://api.clean.tools`
- URL: `https://api.clean.tools/v1/amortization_schedule`
- Auth: none declared

Use this when you need a fixed-rate loan or mortgage's level monthly payment plus a year-by-year amortization schedule (principal paid, interest paid, remaining balance) rather than doing the amortization arithmetic yourself. Uses the standard payment formula and handles the 0% case (payment = principal / months, all principal). annualRate is a percent (6.5 = 6.5%); years is 1-50. Deterministic: same input, same output. Example: principal 300000, annualRate 6.5, years 30 -> monthlyPayment 1896.20, totalInterest 382633.47, numberOfPayments 360, and a 30-row schedule (one per year).

## Request body

- object
  - `principal` number, required: Loan amount (positive).
  - `annualRate` number, required: Annual interest rate as a percent, e.g. 6.5.
  - `years` integer, required: Loan term in years.

## Response `200`

Structured tool result.

- object
  - `tool` string
  - `result` object
    - `monthlyPayment` number, required: Level monthly payment, rounded to cents.
    - `totalPaid` number, required: Sum of all payments over the full term (monthlyPayment * numberOfPayments).
    - `totalInterest` number, required: Total interest paid = totalPaid - principal.
    - `numberOfPayments` integer, required: Total monthly payments = years * 12.
    - `schedule` object[], required: One row per year of the term.
      - `year` integer, required: 1-based year number.
      - `startingBalance` number, required: Balance at the start of the year.
      - `principalPaid` number, required: Principal repaid during the year.
      - `interestPaid` number, required: Interest paid during the year.
      - `endingBalance` number, required: Balance at year end (0 once the loan is retired).

## Other responses

- `400`: Invalid input or the tool reported an error.
- `413`: Request body exceeds the 128 KB limit.
- `429`: Rate limit exceeded; the response carries Retry-After and RateLimit-* headers — honor them and add jitter.

---

[API](https://skmtc.dev/clean/apis/clean-tools-api.md) · [All operations](https://skmtc.dev/clean/apis/clean-tools-api/llms.txt) · [OpenAPI document](https://skmtc.dev/clean/apis/clean-tools-api/revisions/a24a01d2833c?raw)
