{"openapi":"3.1.0","info":{"title":"Amortization Schedule","version":"1.0.0","summary":"The row-by-row loan schedule that doesn't drift by the last payment.","description":"Builds a full period-by-period amortization schedule — principal, interest, PMI, extra-principal, running balance — for monthly or daily-accrual loans, with the last payment corrected to actually zero the balance instead of drifting by rounding error. Handles biweekly acceleration, one-off or recurring extra principal, and PMI cancellation at 80/78% LTV.\n\n**Not for:** This is not a lender's payoff quote, a TILA/RESPA disclosure, or tax or accounting advice, and it does not model rate changes on an ARM, escrow shortages, late fees, or a servicer's specific PMI-cancellation policy (which by law may use the original amortization schedule rather than your actual balance). Treat its numbers as a planning estimate to check your statement against, not a substitute for it.\n\nFree tier: 250 calls per UTC day per caller. Past that, endpoints return 402 with x402 payment requirements. An MCP server exposing the same capabilities is available at https://amortize.gumballtools.com/api/mcp.","contact":{"url":"https://github.com/bwalvoord/gumball"}},"servers":[{"url":"https://amortize.gumballtools.com","description":"Production"}],"externalDocs":{"url":"https://amortize.gumballtools.com/llms-full.txt","description":"Full documentation for agents"},"paths":{"/api/v1/run":{"get":{"operationId":"run","summary":"The row-by-row loan schedule that doesn't drift by the last payment.","description":"TODO: describe what this returns and when to call it.","parameters":[{"name":"input","in":"query","required":true,"description":"TODO: exact format, units, and range.","schema":{"type":"string"}}],"responses":{"200":{"description":"The result.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input. The body names the field and how to fix it.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","fix_hint","docs"],"properties":{"code":{"type":"string","description":"Stable machine-readable error code."},"message":{"type":"string"},"fix_hint":{"type":"string","description":"What to change before retrying."},"field":{"type":"string"},"token":{"type":"string"},"examples":{"type":"array","items":{"type":"string"}},"docs":{"type":"string","format":"uri"}}}}}}}},"402":{"description":"Free quota of 250 calls per UTC day exhausted. Body is an x402 v1 payment requirement ($0.001 per call). While settlement is disabled the body carries payment_enabled: false and the call cannot be unblocked by paying — wait for quota.resetsAt.","content":{"application/json":{"schema":{"type":"object"}}}}}}}}}