addedInput schema / additionalProperties
Added value: +false
addedInput schema / properties / annualRatePercent / description
Added value: +"Annual nominal interest rate as a percent (for example 6.5 means 6.5 percent per year). Range 0 to 100; 0 gives a zero-rate loan."
addedInput schema / properties / annualRatePercent / maximum
Added value: +100
addedInput schema / properties / annualRatePercent / minimum
Added value: +0
addedInput schema / properties / extraMonthlyPayment / default
Added value: +0
addedInput schema / properties / extraMonthlyPayment / description
Added value: +"Optional extra principal paid each month to shorten the term. At least 0 and not greater than principal. Defaults to 0."
addedInput schema / properties / extraMonthlyPayment / minimum
Added value: +0
changedInput schema / properties / extraMonthlyPayment / type
Previous value: -"integer"New value: +"number"
addedInput schema / properties / operation / description
Added value: +"Output mode: compute returns the summary plus a per-year breakdown; schedule also returns every monthly row. Defaults to compute."
addedInput schema / properties / operation / enum
Added value: +[
+ "compute",
+ "schedule"
+]
addedInput schema / properties / principal / description
Added value: +"Loan amount borrowed, in currency units. Must be greater than 0 and at most 1000000000000."
addedInput schema / properties / principal / maximum
Added value: +1000000000000
addedInput schema / properties / principal / minimum
Added value: +0
changedInput schema / properties / principal / type
Previous value: -"integer"New value: +"number"
addedInput schema / properties / startDateIso
Added value: +{
+ "description": "Optional first-payment date as an ISO date string (for example 2026-06-01) used to label schedule rows. Defaults to today (UTC).",
+ "type": "string"
+}
addedInput schema / properties / termYears / description
Added value: +"Loan term in years; multiplied by 12 to derive the month count. Must be greater than 0 and at most 100."
addedInput schema / properties / termYears / maximum
Added value: +100
addedInput schema / properties / termYears / minimum
Added value: +0
changedInput schema / properties / termYears / type
Previous value: -"integer"New value: +"number"
changedInput schema / required
Previous value: -[
- "operation",
- "principal",
- "annualRatePercent",
- "termYears",
- "extraMonthlyPayment"
-]New value: +[
+ "principal",
+ "annualRatePercent",
+ "termYears"
+]
changedOutput schema / (root)
Previous value: -nullNew value: +{
+ "properties": {
+ "operation": {
+ "description": "The operation performed (compute or schedule).",
+ "type": "string"
+ },
+ "result": {
+ "description": "The computed loan figures.",
+ "properties": {
+ "monthlyPayment": {
+ "description": "Base level monthly payment rounded to 2 decimals (principal divided by months when the rate is 0).",
+ "type": "number"
+ },
+ "payoffDateIso": {
+ "description": "ISO date of the final payment, derived from startDateIso plus payoffMonths.",
+ "type": "string"
+ },
+ "payoffMonths": {
+ "description": "Number of months until the balance reaches zero (fewer than the contractual term when extra payments apply).",
+ "type": "integer"
+ },
+ "schedule": {
+ "description": "Full month-by-month amortization rows. Present when operation is schedule.",
+ "items": {
+ "properties": {
+ "balance": {
+ "description": "Remaining balance after this payment, rounded to 2 decimals.",
+ "type": "number"
+ },
+ "dateIso": {
+ "description": "ISO date of this payment.",
+ "type": "string"
+ },
+ "extraPaid": {
+ "description": "Extra principal paid this month beyond the scheduled amount, rounded to 2 decimals.",
+ "type": "number"
+ },
+ "interestPaid": {
+ "description": "Interest portion paid this month, rounded to 2 decimals.",
+ "type": "number"
+ },
+ "month": {
+ "description": "Payment number, starting at 1.",
+ "type": "integer"
+ },
+ "principalPaid": {
+ "description": "Principal portion paid this month, rounded to 2 decimals.",
+ "type": "number"
+ }
+ },
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "summary": {
+ "description": "Per-year roll-up of the schedule. Present when operation is compute.",
+ "properties": {
+ "byYear": {
+ "description": "One entry per calendar year touched by the schedule.",
+ "items": {
+ "properties": {
+ "balance": {
+ "description": "Remaining balance at the end of the year, rounded to 2 decimals.",
+ "type": "number"
+ },
+ "interestPaid": {
+ "description": "Interest paid during the year, rounded to 2 decimals.",
+ "type": "number"
+ },
+ "principalPaid": {
+ "description": "Principal paid during the year, rounded to 2 decimals.",
+ "type": "number"
+ },
+ "year": {
+ "description": "Calendar year of the grouped payments.",
+ "type": "integer"
+ }
+ },
+ "type": "object"
+ },
+ "type": "array"
+ }
+ },
+ "type": "object"
+ },
+ "totalInterest": {
+ "description": "Sum of all interest paid over the life of the loan, rounded to 2 decimals.",
+ "type": "number"
+ },
+ "totalPaid": {
+ "description": "Total of principal plus interest paid, rounded to 2 decimals.",
+ "type": "number"
+ }
+ },
+ "type": "object"
+ },
+ "success": {
+ "description": "Whether the calculation succeeded.",
+ "type": "boolean"
+ }
+ },
+ "type": "object"
+}