Amortization schedule

FREE with proof-of-work · or $0.001 in USDC · POST /api/amortization

Build the full per-period amortization schedule for a fully-amortizing loan. Send POST /api/amortization with the required fields principal, annualRate and termYears and pay $0.001 per call over x402 or MPP, or call it free by solving a proof-of-work challenge. It returns a JSON object with payment, totalPaid, totalInterest, periods, rowsReturned and 1 more.

Each row reports the period number, payment, the principal vs. interest split for that payment, and the remaining balance after that payment. Use this when the user wants to see how interest tapers over the life of the loan, or to model an extra-payment scenario by reading the balance at any period.

Category: Live public data · Tags: finance loan mortgage amortization schedule

TRY IN PLAYGROUND →

Parameters

NameTypeRequiredDescription
principalnumberyesLoan principal (positive) Also accepted as amount, p, balance, loan.
annualRatenumberyesAnnual interest rate as decimal (0.06 = 6%)
termYearsnumberyesLoan term in years
paymentsPerYearnumbernoPayments per year (default 12 = monthly)
maxRowsnumbernoCap the number of schedule rows returned (default 360; absolute max 1200 = 100 years monthly). Use a small value to preview just the first few rows.

Example request

curl -i -X POST https://agent402.tools/api/amortization \
  -H "Content-Type: application/json" \
  -d '{"principal":200000,"annualRate":0.06,"termYears":30,"maxRows":3}'

Without payment this returns HTTP 402 Payment Required with the exact price for amortization; any x402 v2 or MPP client pays it and retries.

Example response

{
  "payment": 1199.1,
  "totalPaid": 431676.38,
  "totalInterest": 231676.38,
  "periods": 360,
  "rowsReturned": 3,
  "schedule": [
    {
      "period": 1,
      "payment": 1199.1,
      "interest": 1000,
      "principal": 199.1,
      "balance": 199800.9
    },
    {
      "period": 2,
      "payment": 1199.1,
      "interest": 999,
      "principal": 200.1,
      "balance": 199600.8
    },
    {
      "period": 3,
      "payment": 1199.1,
      "interest": 998,
      "principal": 201.1,
      "balance": 199399.71
    }
  ]
}
FieldTypeAlways presentIn the example
paymentnumberyes1199.1
totalPaidnumberyes431676.38
totalInterestnumberyes231676.38
periodsnumberyes360
rowsReturnednumberyes3
schedulearray of objectsyes3 items in the example

From an MCP client

catalog.call {
  "slug": "amortization",
  "params": {
    "principal": 200000,
    "annualRate": 0.06,
    "termYears": 30,
    "maxRows": 3
  }
}

On the hosted connector at https://agent402.tools/mcp, catalog.call runs amortization free (rate-limited, no wallet). Local install: npx -y agent402-mcp.

Errors and behavior

Paid call (JavaScript agent)

import { wrapFetchWithPayment } from "@x402/fetch";
import { x402Client } from "@x402/core/client";
import { registerExactEvmScheme } from "@x402/evm/exact/client";
import { privateKeyToAccount } from "viem/accounts";

const client = new x402Client();
client.setSpendControls?.(false); // keep your own spending ceiling in code
registerExactEvmScheme(client, { signer: privateKeyToAccount(KEY) });
const payFetch = wrapFetchWithPayment(fetch, client);

const res = await payFetch("https://agent402.tools/api/amortization", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    "principal": 200000,
    "annualRate": 0.06,
    "termYears": 30,
    "maxRows": 3
  }),
});

No wallet? Pay with compute

Fetch a challenge, solve the sha256 puzzle (16 leading zero bits, a fraction of a second of CPU), and resend with the X-Pow-Solution header:

import { createHash } from "node:crypto";
const lz = (b) => { let t = 0; for (const x of b) { if (!x) { t += 8; continue; } t += Math.clz32(x) - 24; break; } return t; };
const c = await (await fetch("https://agent402.tools/api/pow/challenge?slug=amortization")).json();
let n = 0;
while (lz(createHash("sha256").update(c.challenge + ":" + n).digest()) < c.difficulty) n++;
await fetch("https://agent402.tools/api/amortization", { method: "POST", headers: { "X-Pow-Solution": c.token + ":" + n, "Content-Type": "application/json" }, body: JSON.stringify({"principal":200000,"annualRate":0.06,"termYears":30,"maxRows":3}) });

Part of these workflows

Amortization schedule is one step in this skill pack, each sold as a single call:

Related tools

Loan payment

FREE w/ compute · or $0.001 · POST /api/loan-payment

Compute the monthly (or per-period) payment on a fully-amortizing loan: mortgage, auto, student loan, business loan. Ret…

Annuity present/future value

FREE w/ compute · or $0.001 · POST /api/annuity

Present and future value of a level annuity (equal periodic payments). Supports an ordinary annuity (payments at period …

Black-Scholes option price

FREE w/ compute · or $0.002 · POST /api/black-scholes

Price a European option (call or put) with the Black-Scholes-Merton model, plus the greeks (delta, gamma, vega, theta, r…

Bond price

FREE w/ compute · or $0.001 · POST /api/bond-price

Price a fixed-coupon bond from its yield to maturity: present-value the coupons plus face. Returns clean price, coupon p…

Bond yield to maturity

FREE w/ compute · or $0.002 · POST /api/bond-ytm

Solve a bond's yield to maturity from its market price - the annual rate that present-values the coupons plus face to th…

Break-even analysis

FREE w/ compute · or $0.001 · POST /api/break-even

Break-even point for a product: the units and revenue at which total revenue covers fixed plus variable costs. Also retu…