Developers · Public beta

Useful calculations.
Clear assumptions.

Bring mortgage estimates, rental analysis and business-listing checks into your own app. Powered by the same calculation models as our free tools.

OpenAPI 3.1 specification ↗ Use the calculators

Beta contract

  • POST JSON to /api/v1/calculators/mortgage, /rental-property or /business under the same prefix. Every documented field is required. Unknown fields and numeric strings are rejected.
  • No key or payment. Shared service-wide limit: 120 POST requests per UTC minute. This is not a per-user allocation or availability guarantee. On 429, wait for the Retry-After interval and use backoff; do not retry in a tight loop.
  • Maximum request: 16 KiB UTF-8 JSON, delivered within five seconds. Use POST bodies; query parameters are rejected. Public CORS supports browser integrations without credentials.
  • The application does not store or log financial request bodies or responses. It stores a single aggregate counter. Infrastructure may record operational metadata such as request paths, timestamps and IP addresses; never send names, account numbers or financial inputs in URLs.
  • API schema: v1. Calculation version: 2026-09-17.1. Capture the returned version with your result. Beta model changes may occur; check the version rather than assuming results remain identical across releases.
  • Amounts are USD. Percentage fields use percentage points: 7 means 7%, not 0.07. Mortgage and business rates are user-supplied; no current market-rate lookup occurs.

Existing website calculators continue to calculate in the visitor’s tab. They do not send visitor inputs to this API.

Try a fictional example

This sends the documented sample numbers to the API. No account or key required.

mortgage

POST /api/v1/calculators/mortgage

Monthly payment components, loan fees and cash needed. Fixed fully amortizing loans only; USDA Guaranteed requires a 30-year term.

Request example: curl
curl https://losttofound.org/api/v1/calculators/mortgage \
  -H 'Content-Type: application/json' \
  --data '{
  "price": 350000,
  "downPercent": 10,
  "rate": 6.71,
  "years": 30,
  "loanType": "conventional",
  "vaUse": "first",
  "financeFee": true,
  "taxPercent": 1.1,
  "annualInsurance": 1800,
  "monthlyHoa": 0,
  "pmiPercent": 0.5,
  "maintenancePercent": 1,
  "closingPercent": 3,
  "extraCash": 1500,
  "reserveMonths": 3,
  "savings": 0,
  "grossIncome": 0,
  "monthlyDebts": 0,
  "customUpfrontFee": 0,
  "customMonthlyInsurance": 0
}'
Input fields, units and bounds
FieldType / boundsMeaning
pricenumber · 1 to 10000000Home purchase price in USD.
downPercentnumber · 0 to 100Down payment as a percentage of purchase price. Enter 10 for 10%.
ratenumber · 0 to 30Annual loan interest rate in percentage points. Enter 6.71 for 6.71%, not 0.0671. This is the interest rate, not APR. No rate lookup or lender quote is performed.
yearsinteger · 1 to 40Fully amortizing fixed loan term in whole years. USDA must be 30.
loanTypeconventional, fha, va, usda, jumbo, otherLoan program used to estimate fees and initial mortgage insurance. Selecting a program does not establish eligibility.
vaUsefirst, subsequent, exemptVA funding fee scenario: first use, subsequent use, or exempt. Used only for VA loans; exemption is not verified.
financeFeebooleanTrue adds the modeled upfront loan program or custom fee to the loan; false includes it in upfront cash. Does not finance closing costs or extraCash.
taxPercentnumber · 0 to 100Annual property tax as a percentage of purchase price. Enter 1.1 for 1.1%.
annualInsurancenumber · 0 to 1000000000Annual home insurance premium in USD, excluding mortgage insurance.
monthlyHoanumber · 0 to 1000000000Monthly homeowners association dues in USD.
pmiPercentnumber · 0 to 100Annual PMI as a percentage of the base loan before financed fees. Enter 0.5 for 0.5%. Used for conventional or jumbo loans with less than 20% down.
maintenancePercentnumber · 0 to 100Annual upkeep savings as a percentage of purchase price. Enter 1 for 1%. Included in the monthly ownership budget and reserves.
closingPercentnumber · 0 to 100Closing costs and prepaids as a percentage of purchase price. Enter 3 for 3%. Exclude the separately modeled upfront loan fee and extraCash.
extraCashnumber · 0 to 1000000000One time inspection, moving and setup allowance in USD. Added to upfront cash; exclude costs already in closingPercent.
reserveMonthsnumber · 0 to 120Number of months of the full modeled ownership budget to retain as cash, including upkeep. A planning cushion, not a lender requirement.
savingsnumber · 0 to 1000000000Savings available for this purchase plan in USD. Used to calculate the remaining savings gap.
grossIncomenumber · 0 to 1000000000Annual household income before taxes in USD. Enter 0 to leave the debt to income result unavailable.
monthlyDebtsnumber · 0 to 1000000000Monthly recurring debt payments in USD, excluding this mortgage. Used only in the debt to income calculation.
customUpfrontFeenumber · 0 to 1000000000One time quoted upfront loan fee in USD, used only for loanType other with a positive base loan. financeFee controls whether it is financed or paid in cash.
customMonthlyInsurancenumber · 0 to 1000000000Monthly quoted mortgage insurance or loan fee in USD, used only for loanType other with a positive base loan. Excludes annualInsurance.

Use the units listed for each field. Every field is required, including fields unused by the selected loan program.

Successful response example
{
  "apiVersion": "v1",
  "calculationVersion": "2026-09-17.1",
  "model": "mortgage",
  "currency": "USD",
  "result": {
    "down": 35000,
    "baseLoan": 315000,
    "feePercent": 0,
    "fundingFee": 0,
    "loan": 315000,
    "principalInterest": 2034.7155423173795,
    "tax": 320.83333333333337,
    "insurance": 150,
    "pmi": 131.25,
    "monthlyInsurance": 131.25,
    "annualInsurancePercent": 0,
    "insuranceLabel": "Mortgage insurance (PMI)",
    "upfrontFeeLabel": "VA funding fee",
    "insuranceDuration": "PMI is an initial estimate; cancellation rules and lender terms determine when it ends.",
    "housing": 2636.798875650713,
    "maintenance": 291.6666666666667,
    "monthly": 2928.4655423173795,
    "closing": 10500,
    "cashFee": 0,
    "upfront": 47000,
    "reserves": 8785.396626952139,
    "cashTarget": 55785.39662695214,
    "gap": 55785.39662695214,
    "debtToIncome": null,
    "totalInterest": 417497.5952342566
  },
  "warnings": [
    {
      "field": "pmiPercent",
      "code": "check_percentage_units",
      "message": "pmiPercent is interpreted as 0.5%. Percentage fields use percentage points: 7 means 7%. If a value below 1% is intentional, keep this input."
    }
  ],
  "assumptions": [
    "User-supplied rate; no live quote or eligibility check.",
    "All dollar amounts are USD; rate and percentage fields use percentage points, not fractions.",
    "Fixed fully amortizing loan; mortgage insurance is an initial estimate.",
    "Taxes, insurance, closing costs and upkeep are supplied assumptions."
  ],
  "sources": [
    "https://www.consumerfinance.gov/owning-a-home/",
    "https://www.hud.gov/buying/loans",
    "https://www.va.gov/housing-assistance/home-loans/"
  ],
  "disclaimer": "Educational estimate, not a quote, appraisal, approval or personalized financial advice."
}

rental-property

POST /api/v1/calculators/rental-property

Rental NOI, cash flow, cap rate, cash-on-cash return and downside. All operating income and cost assumptions are supplied by the caller.

Request example: curl
curl https://losttofound.org/api/v1/calculators/rental-property \
  -H 'Content-Type: application/json' \
  --data '{
  "price": 350000,
  "down": 20,
  "rate": 7,
  "term": 30,
  "closing": 3,
  "rehab": 10000,
  "reserves": 10000,
  "rent": 2800,
  "other": 0,
  "vacancy": 5,
  "tax": 4200,
  "insurance": 1800,
  "hoa": 0,
  "utilities": 100,
  "repairs": 2000,
  "capex": 2000,
  "management": 8
}'
Input fields, units and bounds
FieldType / boundsMeaning
pricenumber · 1 to 1000000000Purchase price ($)
downnumber · 0 to 100Down payment (%) Enter percentage points, not fractions; for example, 7 means 7%.
ratenumber · 0 to 30Annual loan interest rate (%). Illustrative fixed rate; use a lender quote. Enter percentage points, not fractions; for example, 7 means 7%.
terminteger · 1 to 40Mortgage term (years)
closingnumber · 0 to 100Purchase closing costs (%) Enter percentage points, not fractions; for example, 7 means 7%.
rehabnumber · 0 to 1000000000Initial repairs / renovation ($)
reservesnumber · 0 to 1000000000Initial cash reserves ($)
rentnumber · 0 to 1000000000Monthly scheduled rent (all units) ($)
othernumber · 0 to 1000000000Monthly other income ($)
vacancynumber · 0 to 99Vacancy / uncollected income (%) Enter percentage points, not fractions; for example, 7 means 7%.
taxnumber · 0 to 1000000000Annual property taxes ($)
insurancenumber · 0 to 1000000000Annual property insurance ($)
hoanumber · 0 to 1000000000Monthly HOA ($)
utilitiesnumber · 0 to 1000000000Monthly owner-paid utilities / other costs ($)
repairsnumber · 0 to 1000000000Annual routine repairs ($)
capexnumber · 0 to 1000000000Annual capital replacement reserve ($)
managementnumber · 0 to 99Management fee on collected income (%) Enter percentage points, not fractions; for example, 7 means 7%.

Use the units listed for each field. Every field is required, including fields unused by the selected loan program.

Successful response example
{
  "apiVersion": "v1",
  "calculationVersion": "2026-09-17.1",
  "model": "rental-property",
  "currency": "USD",
  "result": {
    "headline": "This property needs cash each month",
    "metrics": [
      {
        "label": "Monthly cash flow",
        "value": -348.98031983504615,
        "format": "money"
      },
      {
        "label": "Cash needed to buy",
        "value": 100500,
        "format": "money"
      },
      {
        "label": "Cap rate",
        "value": 5.7618285714285715,
        "format": "percent"
      },
      {
        "label": "Cash-on-cash return",
        "value": -4.166929192060252,
        "format": "percent"
      }
    ],
    "rows": [
      {
        "label": "Scheduled annual income",
        "value": 33600,
        "format": "money"
      },
      {
        "label": "Vacancy allowance",
        "value": 1680,
        "format": "money"
      },
      {
        "label": "Operating expenses",
        "value": 11753.6,
        "format": "money"
      },
      {
        "label": "Net operating income (NOI)",
        "value": 20166.4,
        "format": "money"
      },
      {
        "label": "Capital replacement reserve",
        "value": 2000,
        "format": "money"
      },
      {
        "label": "Annual mortgage payments",
        "value": 22354.163838020555,
        "format": "money"
      },
      {
        "label": "NOI / debt service",
        "value": 0.9021317078163511,
        "format": "ratio"
      },
      {
        "label": "Monthly rent needed to break even",
        "value": 3199.2909837929587,
        "format": "money"
      },
      {
        "label": "Downside monthly cash flow",
        "value": -709.6203198350462,
        "format": "money"
      }
    ],
    "notes": [
      "NOI excludes financing, income taxes and capital replacements. Cash flow includes your capital reserve. No appreciation or tax benefits are assumed.",
      "Downside: scheduled rent and other income fall 10%, vacancy rises 5 percentage points, and fixed expenses remain unchanged.",
      "Verify actual rent rolls, property taxes after sale, insurance quotes, local rules, repairs and vacancy. Rates and costs are editable assumptions, not investment-loan quotes."
    ]
  },
  "warnings": [],
  "assumptions": [
    "USD; rent, other, HOA and utilities are monthly. Tax, insurance, repairs and capex are annual.",
    "Vacancy and management are percentages; down and closing are percentages of price.",
    "Before income taxes, appreciation and depreciation benefits.",
    "Downside reduces scheduled income 10% and raises vacancy 5 percentage points."
  ],
  "sources": [
    "https://www.consumerfinance.gov/owning-a-home/prepare/figure-out-how-much-you-want-to-spend/",
    "https://www.irs.gov/publications/p527"
  ],
  "disclaimer": "Educational estimate, not a quote, appraisal, approval or personalized financial advice."
}

business

POST /api/v1/calculators/business

SDE / EBITDA range, acquisition financing, debt coverage and buyer cash. Assumed debt requires a positive annual payment schedule; deferred debt is outside this beta.

Request example: curl
curl https://losttofound.org/api/v1/calculators/business \
  -H 'Content-Type: application/json' \
  --data '{
  "price": 450000,
  "revenue": 900000,
  "earnings": 180000,
  "basis": "sde",
  "unsupported": 15000,
  "labor": 0,
  "reinvestment": 15000,
  "ownerPay": 60000,
  "debt": 0,
  "acquiredCash": 0,
  "annualDebt": 0,
  "down": 20,
  "rate": 10,
  "years": 10,
  "costs": 15000,
  "workingCapital": 30000,
  "low": 2,
  "high": 3,
  "decline": 20,
  "target": 1.25,
  "assets": 0
}'
Input fields, units and bounds
FieldType / boundsMeaning
pricenumber · 1 to 10000000Purchase price paid to the seller in USD, excluding debt assumed separately.
revenuenumber · 0 to 1000000000Annual sales before expenses in USD. Enter 0 if unknown; revenue ratios will be unavailable.
earningsnumber · -1000000000 to 1000000000Advertised annual SDE or EBITDA in USD, as selected by basis. Negative earnings are allowed.
basissde, ebitdaEarnings definition: sde for seller discretionary earnings with one working owner; ebitda for earnings before interest, taxes, depreciation and amortization with management payroll included. Supply matching earnings and multiples; this selection does not convert earnings or automatically adjust payroll.
unsupportednumber · 0 to 1000000000Annual unsupported seller add backs to remove from advertised earnings, in USD. Include expenses that will recur for the buyer.
labornumber · 0 to 1000000000Additional annual staffing or replacement manager cost in USD. Exclude payroll already deducted from earnings.
reinvestmentnumber · 0 to 1000000000Annual reserve for equipment replacement and working capital growth in USD, beyond expenses already deducted from earnings.
ownerPaynumber · 0 to 1000000000Additional annual owner income goal before personal tax, in USD. Exclude income already deducted from earnings or labor. Deducted in surplus and stressedResidual, but not in residual or debt coverage.
debtnumber · 0 to 1000000000Existing debt balance transferred to the buyer and still outstanding after closing, in USD. Excludes the new acquisition loan calculated from price and down.
acquiredCashnumber · 0 to 1000000000Excess cash transferred to the buyer in USD, excluding required operating cash. Adjusts value and price ratios; does not reduce modeled cashNeeded or the acquisition loan.
annualDebtnumber · 0 to 1000000000Annual principal plus interest payments on assumed debt in USD, separate from the calculated new acquisition loan payments. Must be positive when debt is positive; deferred payment debt is outside this beta.
downnumber · 0 to 100Buyer down payment as a percentage of price. Enter 20 for 20%. Costs and workingCapital are paid separately in cash.
ratenumber · 0 to 100Annual acquisition loan interest rate in percentage points. Enter 10 for 10%, not 0.10. An input assumption, not a financing quote.
yearsinteger · 1 to 30Fully amortizing acquisition loan term in whole years.
costsnumber · 0 to 1000000000One time closing costs and transaction or loan fees paid in cash, in USD. Not included in the acquisition loan.
workingCapitalnumber · 0 to 1000000000Extra initial working capital and reserve cash contributed by the buyer in USD, beyond price and costs. Not financed by this model.
lownumber · 0 to 30Low valuation multiple of adjusted annual earnings, as a ratio. Enter 2 for 2 times earnings. Must not exceed high; supply a multiple matching basis.
highnumber · 0 to 30High valuation multiple of adjusted annual earnings, as a ratio. Enter 3 for 3 times earnings. Must be at least low; supply a multiple matching basis.
declinenumber · 0 to 100Stress reduction in positive adjusted earnings, in percentage points. Enter 20 for 20%. Staffing, reinvestment, debt payments and ownerPay remain unchanged; negative adjusted earnings are not reduced further.
targetnumber · 1 to 100Planning debt coverage target as a ratio. Enter 1.25 for 1.25 times annual debt payments. The API validates this input but does not use it to change or classify results; compare coverage with target in your application.
assetsnumber · 0 to 1000000000Optional net realizable operating assets in USD, after nondebt liabilities and selling costs. Exclude acquiredCash and debt. Used only for the separate assetEquity cross check, not added to earnings value.

Use the units listed for each field. Every field is required, including fields unused by the selected loan program.

For the business results, residual is annual cash before your income goal. surplus and stressedResidual are both after that goal and before taxes. Compare those two to see the effect of the stress scenario. When decline is 0, they are equal. The OpenAPI specification describes every business result.

Successful response example
{
  "apiVersion": "v1",
  "calculationVersion": "2026-09-17.1",
  "model": "business",
  "currency": "USD",
  "result": {
    "normalized": 165000,
    "operatingPrice": 450000,
    "lowValue": 330000,
    "highValue": 495000,
    "loan": 360000,
    "payment": 4757.42652774342,
    "debtService": 57089.11833292103,
    "available": 150000,
    "residual": 92910.88166707897,
    "surplus": 32910.88166707897,
    "coverage": 2.6274709503352227,
    "stressCoverage": 2.0494273412614734,
    "stressedResidual": -89.11833292103256,
    "cashNeeded": 135000,
    "earningsMultiple": 2.727272727272727,
    "revenueMultiple": 0.5,
    "margin": 18.333333333333332,
    "leverage": 2.1818181818181817,
    "cashReturn": 24.37843086450294,
    "assetEquity": 0,
    "pricePosition": "Within your selected range"
  },
  "warnings": [],
  "assumptions": [
    "All dollars are USD and cash-flow inputs are annual unless specified.",
    "User-selected SDE or EBITDA multiples; no appraisal or automatic comparable-deal lookup.",
    "One fully amortizing acquisition loan; transferred debt payments are supplied separately.",
    "No tax, balloon, refinancing or lender eligibility model."
  ],
  "sources": [
    "https://www.bizbuysell.com/insight-report-data-tables/",
    "https://www.sba.gov/loans/7a-loans/"
  ],
  "disclaimer": "Educational estimate, not a quote, appraisal, approval or personalized financial advice."
}

Percentage unit checks

Successful responses include warnings. Every submitted percentage greater than 0 and less than 1 gets an informational unit check, including fields unused by the selected loan program. For example, rate: 0.0671 means 0.0671%. Enter rate: 6.71 if you mean 6.71%.

Low percentages can be intentional, including 0.5% mortgage insurance. These warnings never change or reject an input. Zero and values of 1 or more do not trigger this check. An empty list does not confirm that your assumptions are suitable.

Warning example
[
  {
    "field": "rate",
    "code": "check_percentage_units",
    "message": "rate is interpreted as 0.0671%. Percentage fields use percentage points: 7 means 7%. If a value below 1% is intentional, keep this input."
  },
  {
    "field": "pmiPercent",
    "code": "check_percentage_units",
    "message": "pmiPercent is interpreted as 0.5%. Percentage fields use percentage points: 7 means 7%. If a value below 1% is intentional, keep this input."
  }
]

Errors & responsible integration

Errors are JSON: {"error":{"code":"invalid_input","message":"…"}}. Expect 400 for malformed JSON or query parameters, 405 for unsupported methods, 408 for slow bodies, 413 for size, 415 for content type, 422 for inputs, 429 for rate limits and 503 for temporary unavailability. Never display a failed request as a zero-dollar estimate.

For invalid JSON object inputs, HTTP 422 also includes error.details: a list of field names, issue codes and reasons. Correct every listed field before retrying. Missing fields, unknown names, type errors and bounds are reported together. Rules involving related fields are checked when those fields have valid types and bounds. Other errors may omit details.

Validation error example (HTTP 422)

This response comes from the mortgage example with price: 0 and an added unexpected: true field.

{
  "error": {
    "code": "unknown_field",
    "message": "Body contains an undocumented field.",
    "details": [
      {
        "field": "unexpected",
        "code": "unknown_field",
        "message": "This field is not documented for this calculator."
      },
      {
        "field": "price",
        "code": "out_of_range",
        "message": "Must be at least 1."
      }
    ]
  }
}

Return assumptions and source links alongside results, and identify unavailable values rather than converting null to zero. These are educational estimates, not loan quotes, appraisals, approvals or personalized advice.

For learning projects

Older students can compare a hand calculation, the browser calculator and an API response using fictional inputs. Explore calculator lesson plans and activities →