Give this API a loan amount, an interest rate, and a repayment term, and it retu
Give this API a loan amount, an interest rate, and a repayment term, and it returns the exact monthly payment plus a full month-by-month schedule: interest paid, principal repaid, and balance remaining for every payment. Ask what an extra $300 a month, or a $10,000 lump sum in month 24, would do and it reports the months and interest saved. Every figure uses banker's rounding at pinned precision, so two correct systems agree to the cent. You supply the rate; the API does the math.
Paid test badge: not yet. The checks above are free: we call the tool without paying and read the payment request it sends back. The Verified badge needs paid calls whose answers match the promised output, and nobody can buy a badge.
Endpoint
POST https://mortgage-amortization.underscoredone.com/calculate
| Category | Market data |
|---|---|
| Provider host | mortgage-amortization.underscoredone.com |
| Networks | eip155:8453, solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp |
| Payment schemes | exact |
| Self-reported calls, 30 days | 5 from 4 payers (the provider's figure, not ours) |
Our checks, last 30 days
| Day | Result | HTTP | Asked | Time |
|---|---|---|---|---|
| 2026-09-24 | valid payment request | 402 | $0.01 | 739 ms |
Example input (from the provider)
{
"body": {
"annual_rate_percent": 6.5,
"extra_monthly_payment": 300,
"one_time_payments": [
{
"amount": 10000,
"month": 24
}
],
"principal": 400000,
"rounding": 2,
"start_date": "2026-07-01",
"summary_only": false,
"term_months": 360
},
"bodyType": "json",
"method": "POST",
"type": "http"
}
Promised output schema (from the provider)
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"input": {
"additionalProperties": false,
"properties": {
"body": {
"additionalProperties": false,
"properties": {
"annual_rate_percent": {
"description": "Yearly interest rate as a percentage - send 6.5 for 6.5%. Use 0 for an interest-free loan.",
"type": "number"
},
"extra_monthly_payment": {
"description": "Optional extra principal paid every month. Defaults to 0.",
"type": "number"
},
"one_time_payments": {
"description": "Optional lump-sum principal payments; each item needs 'month' and 'amount'.",
"type": "array"
},
"principal": {
"description": "Amount borrowed, in dollars. Must be greater than zero.",
"type": "number"
},
"rounding": {
"description": "Decimal places for money values, 2 to 6. Defaults to 2.",
"type": "integer"
},
"start_date": {
"description": "Date of the first payment, YYYY-MM-DD.",
"type": "string"
},
"summary_only": {
"description": "Set true to return totals only, without the row-by-row schedule.",
"type": "boolean"
},
"term_months": {
"description": "Number of monthly payments. 360 for a 30-year mortgage. Minimum 1.",
"type": "integer"
}
},
"required": [
"principal",
"annual_rate_percent",
"term_months",
"start_date"
],
"type": "object"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
},
"method": {
"enum": [
"POST",
"PUT",
"PATCH"
],
"type": "string"
},
"type": {
"const": "http",
"type": "string"
}
},
"required": [
"type",
"method",
"bodyType",
"body"
],
"type": "object"
},
"output": {
"properties": {
"example": {
"properties": {
"api_version": {
"type": "string"
},
"inputs_echo": {
"additionalProperties": true,
"type": "object"
},
"rounding": {
"additionalProperties": true,
"type": "object"
},
"schedule": {
"items": {
"type": "object"
},
"type": "array"
},
"scheduled_payment": {
"type": "number"
},
"summary": {
"additionalProperties": true,
"type": "object"
},
"with_extra_payments": {
"additionalProperties": true,
"type": "object"
}
},
"required": [
"api_version",
"inputs_echo",
"rounding",
"scheduled_payment",
"summary",
"with_extra_payments",
"schedule"
],
"type": "object"
},
"type": {
"type": "string"
}
},
"required": [
"type"
],
"type": "object"
}
},
"required": [
"input"
],
"type": "object"
}