{"openapi":"3.0.3","info":{"title":"Howdeedo Calculators API","description":"Deterministic computation platform for AI agents, developers, and applications. Premium calculator website at howdeedo.com. All endpoints return versioned, citation-ready responses with formula, assumptions, sources, and reference URLs.","version":"0.1.0"},"servers":[{"url":"https://calculators-122zv97sx-enddefs-projects.vercel.app"}],"paths":{"/api/health":{"get":{"summary":"Health and version","description":"Returns service status and calculation layer version.","operationId":"getHealth","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["status","version"],"properties":{"status":{"type":"string","example":"ok"},"version":{"type":"string","example":"0.1.0"},"registryCount":{"type":"integer","description":"Number of available calculators"}}}}}}}}},"/api/calc/mortgage":{"get":{"summary":"Mortgage","description":"Monthly payment, total interest, and what happens when you change the rate by half a point. (Spoiler: it's a lot.) Query parameters below. Full doc: https://calculators-122zv97sx-enddefs-projects.vercel.app/api/docs/mortgage","operationId":"getCalc_mortgage","parameters":[{"name":"homePrice","in":"query","required":true,"schema":{"type":"number"}},{"name":"downPayment","in":"query","required":true,"schema":{"type":"number"}},{"name":"downPaymentMode","in":"query","required":false,"schema":{"type":"string","enum":["amount","percent"]}},{"name":"annualRatePct","in":"query","required":true,"schema":{"type":"number"}},{"name":"termYears","in":"query","required":true,"schema":{"type":"number"}},{"name":"propertyTaxAnnual","in":"query","required":false,"schema":{"type":"number"}},{"name":"insuranceAnnual","in":"query","required":false,"schema":{"type":"number"}},{"name":"hoaMonthly","in":"query","required":false,"schema":{"type":"number"}},{"name":"extraMonthlyPayment","in":"query","required":true,"schema":{"type":"number"}},{"name":"extraAnnualPayment","in":"query","required":true,"schema":{"type":"number"}},{"name":"oneTimePrincipal","in":"query","required":true,"schema":{"type":"number"}},{"name":"solveFor","in":"query","required":false,"schema":{"type":"string","enum":["payment","homePrice","downPayment","loanAmount"]}},{"name":"targetPayment","in":"query","required":true,"schema":{"type":"number"}},{"name":"includeSchedule","in":"query","required":true,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Envelope with inputs, outputs, formula, referenceUrl","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculatorEnvelope"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/calc/house-affordability":{"get":{"summary":"House affordability","description":"Total monthly housing cost: rent or mortgage, taxes, insurance, maintenance, and more. See what you'll pay and what share of income it is. Query parameters below. Full doc: https://calculators-122zv97sx-enddefs-projects.vercel.app/api/docs/house-affordability","operationId":"getCalc_house_affordability","parameters":[{"name":"housingType","in":"query","required":true,"schema":{"type":"string","enum":["rent","own"]}},{"name":"rentMonthly","in":"query","required":false,"schema":{"type":"number"}},{"name":"renterInsuranceMonthly","in":"query","required":true,"schema":{"type":"number"}},{"name":"otherMonthlyRent","in":"query","required":true,"schema":{"type":"number"}},{"name":"mortgagePandIMonthly","in":"query","required":false,"schema":{"type":"number"}},{"name":"propertyTaxAnnual","in":"query","required":true,"schema":{"type":"number"}},{"name":"insuranceAnnual","in":"query","required":true,"schema":{"type":"number"}},{"name":"hoaMonthly","in":"query","required":true,"schema":{"type":"number"}},{"name":"maintenanceMonthly","in":"query","required":true,"schema":{"type":"number"}},{"name":"otherMonthlyOwn","in":"query","required":true,"schema":{"type":"number"}},{"name":"homePrice","in":"query","required":true,"schema":{"type":"number"}},{"name":"downPaymentPct","in":"query","required":true,"schema":{"type":"number"}},{"name":"annualRatePct","in":"query","required":true,"schema":{"type":"number"}},{"name":"termYears","in":"query","required":true,"schema":{"type":"number"}},{"name":"loanType","in":"query","required":false,"schema":{"type":"string","enum":["conventional","fha","va","usda"]}},{"name":"monthlyIncomeGross","in":"query","required":false,"schema":{"type":"number"}},{"name":"solveFor","in":"query","required":false,"schema":{"type":"string","enum":["totalCost","maxHomePrice","requiredIncome"]}},{"name":"targetMonthlyPayment","in":"query","required":true,"schema":{"type":"number"}},{"name":"targetHousingPct","in":"query","required":true,"schema":{"type":"number"}}],"responses":{"200":{"description":"Envelope with inputs, outputs, formula, referenceUrl","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculatorEnvelope"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/calc/loan":{"get":{"summary":"Loan","description":"Monthly payment and total interest for a fixed-rate loan. Personal loans, auto loans—same formula lenders use. Query parameters below. Full doc: https://calculators-122zv97sx-enddefs-projects.vercel.app/api/docs/loan","operationId":"getCalc_loan","parameters":[{"name":"principal","in":"query","required":true,"schema":{"type":"number"}},{"name":"annualRatePct","in":"query","required":true,"schema":{"type":"number"}},{"name":"termYears","in":"query","required":true,"schema":{"type":"number"}},{"name":"solveFor","in":"query","required":false,"schema":{"type":"string","enum":["payment","principal","rate","term"]}},{"name":"targetPayment","in":"query","required":false,"schema":{"type":"number"}},{"name":"extraMonthlyPayment","in":"query","required":false,"schema":{"type":"number"}},{"name":"oneTimePrincipal","in":"query","required":false,"schema":{"type":"number"}},{"name":"includeSchedule","in":"query","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Envelope with inputs, outputs, formula, referenceUrl","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculatorEnvelope"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/calc/bmi":{"get":{"summary":"BMI","description":"Height, weight, one number. We'll tell you what the ranges mean and what they don't. Query parameters below. Full doc: https://calculators-122zv97sx-enddefs-projects.vercel.app/api/docs/bmi","operationId":"getCalc_bmi","parameters":[{"name":"weight","in":"query","required":true,"schema":{"type":"number"}},{"name":"weightUnit","in":"query","required":false,"schema":{"type":"string","enum":["kg","lb"]}},{"name":"height","in":"query","required":false,"schema":{"type":"number"}},{"name":"heightUnit","in":"query","required":false,"schema":{"type":"string","enum":["m","cm","ft"]}},{"name":"heightFeet","in":"query","required":false,"schema":{"type":"number"}},{"name":"heightInches","in":"query","required":false,"schema":{"type":"number"}},{"name":"population","in":"query","required":false,"schema":{"type":"string","enum":["who","asian","elderly"]}},{"name":"solveFor","in":"query","required":false,"schema":{"type":"string","enum":["bmi","weight","weightRange"]}},{"name":"targetBmi","in":"query","required":false,"schema":{"type":"number"}}],"responses":{"200":{"description":"Envelope with inputs, outputs, formula, referenceUrl","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculatorEnvelope"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/calc/unit-convert":{"get":{"summary":"Unit converter","description":"Cups to liters, Fahrenheit to Celsius, pounds to kilograms. The stuff you Google three times a week. Query parameters below. Full doc: https://calculators-122zv97sx-enddefs-projects.vercel.app/api/docs/unit-convert","operationId":"getCalc_unit_convert","parameters":[{"name":"category","in":"query","required":true,"schema":{"type":"string","enum":["length","area","volume","weight","temperature","time","speed","pressure","energy","power","digital-storage","cooking","angle","force"]}},{"name":"value","in":"query","required":true,"schema":{"type":"number"}},{"name":"fromUnit","in":"query","required":true,"schema":{"type":"string"}},{"name":"toUnit","in":"query","required":true,"schema":{"type":"string"}},{"name":"precisionMode","in":"query","required":false,"schema":{"type":"string","enum":["auto","fixed","significant"]}},{"name":"precision","in":"query","required":false,"schema":{"type":"number"}},{"name":"showFormula","in":"query","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Envelope with inputs, outputs, formula, referenceUrl","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculatorEnvelope"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/calc/percentage":{"get":{"summary":"Percentage","description":"What's 18% of $47.50? Percent change? Increase, decrease? We won't judge why you need this at 11pm. Query parameters below. Full doc: https://calculators-122zv97sx-enddefs-projects.vercel.app/api/docs/percentage","operationId":"getCalc_percentage","responses":{"200":{"description":"Envelope with inputs, outputs, formula, referenceUrl","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculatorEnvelope"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/calc/tip":{"get":{"summary":"Tip","description":"Tip, total, and split — so the table isn't doing mental math while the server waits. Query parameters below. Full doc: https://calculators-122zv97sx-enddefs-projects.vercel.app/api/docs/tip","operationId":"getCalc_tip","parameters":[{"name":"billAmount","in":"query","required":true,"schema":{"type":"number"}},{"name":"tipPercent","in":"query","required":true,"schema":{"type":"number"}},{"name":"taxPercent","in":"query","required":false,"schema":{"type":"number"}},{"name":"splitAmong","in":"query","required":false,"schema":{"type":"number"}}],"responses":{"200":{"description":"Envelope with inputs, outputs, formula, referenceUrl","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculatorEnvelope"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/calc/compound-interest":{"get":{"summary":"Compound interest","description":"How $10K becomes $30K (or $100K) depending on rate, time, and whether you keep adding to it. Query parameters below. Full doc: https://calculators-122zv97sx-enddefs-projects.vercel.app/api/docs/compound-interest","operationId":"getCalc_compound_interest","parameters":[{"name":"principal","in":"query","required":true,"schema":{"type":"number"}},{"name":"annualRatePct","in":"query","required":true,"schema":{"type":"number"}},{"name":"years","in":"query","required":true,"schema":{"type":"number"}},{"name":"monthlyContribution","in":"query","required":false,"schema":{"type":"number"}},{"name":"compoundingFrequency","in":"query","required":false,"schema":{"type":"string","enum":["daily","weekly","monthly","quarterly","annually","continuous"]}},{"name":"contributionTiming","in":"query","required":false,"schema":{"type":"string","enum":["beginning","end"]}},{"name":"solveFor","in":"query","required":false,"schema":{"type":"string","enum":["futureValue","principal","contribution","rate","time"]}},{"name":"targetValue","in":"query","required":false,"schema":{"type":"number"}}],"responses":{"200":{"description":"Envelope with inputs, outputs, formula, referenceUrl","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculatorEnvelope"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/calc/sales-tax":{"get":{"summary":"Sales tax","description":"Add or remove sales tax. Pre-tax to total or total to pre-tax. Query parameters below. Full doc: https://calculators-122zv97sx-enddefs-projects.vercel.app/api/docs/sales-tax","operationId":"getCalc_sales_tax","parameters":[{"name":"amount","in":"query","required":true,"schema":{"type":"number"}},{"name":"ratePct","in":"query","required":true,"schema":{"type":"number"}},{"name":"amountIsPreTax","in":"query","required":true,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Envelope with inputs, outputs, formula, referenceUrl","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculatorEnvelope"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/calc/age":{"get":{"summary":"Age","description":"Age in years, months, and days from birth date. Total days. Query parameters below. Full doc: https://calculators-122zv97sx-enddefs-projects.vercel.app/api/docs/age","operationId":"getCalc_age","responses":{"200":{"description":"Envelope with inputs, outputs, formula, referenceUrl","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculatorEnvelope"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/calc/date-diff":{"get":{"summary":"Date difference","description":"Days, weeks, and months between two dates. Query parameters below. Full doc: https://calculators-122zv97sx-enddefs-projects.vercel.app/api/docs/date-diff","operationId":"getCalc_date_diff","parameters":[{"name":"startDate","in":"query","required":true,"schema":{"type":"string"}},{"name":"endDate","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Envelope with inputs, outputs, formula, referenceUrl","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculatorEnvelope"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/calc/test-grade":{"get":{"summary":"Test grade","description":"Score and total to percentage and letter grade. Standard scale. Query parameters below. Full doc: https://calculators-122zv97sx-enddefs-projects.vercel.app/api/docs/test-grade","operationId":"getCalc_test_grade","parameters":[{"name":"score","in":"query","required":true,"schema":{"type":"number"}},{"name":"total","in":"query","required":true,"schema":{"type":"number"}}],"responses":{"200":{"description":"Envelope with inputs, outputs, formula, referenceUrl","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculatorEnvelope"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/calc/salary-hourly":{"get":{"summary":"Salary to hourly","description":"Convert between annual salary and hourly rate. Monthly and weekly. Query parameters below. Full doc: https://calculators-122zv97sx-enddefs-projects.vercel.app/api/docs/salary-hourly","operationId":"getCalc_salary_hourly","parameters":[{"name":"fromAnnual","in":"query","required":true,"schema":{"type":"boolean"}},{"name":"annualSalary","in":"query","required":true,"schema":{"type":"number"}},{"name":"hourlyRate","in":"query","required":true,"schema":{"type":"number"}},{"name":"weeksPerYear","in":"query","required":true,"schema":{"type":"number"}},{"name":"hoursPerWeek","in":"query","required":true,"schema":{"type":"number"}}],"responses":{"200":{"description":"Envelope with inputs, outputs, formula, referenceUrl","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculatorEnvelope"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/calc/gpa":{"get":{"summary":"GPA","description":"Letter grades and credits to cumulative GPA. Standard 4.0 scale. Query parameters below. Full doc: https://calculators-122zv97sx-enddefs-projects.vercel.app/api/docs/gpa","operationId":"getCalc_gpa","responses":{"200":{"description":"Envelope with inputs, outputs, formula, referenceUrl","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculatorEnvelope"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/calc/calorie":{"get":{"summary":"Calorie","description":"BMR and TDEE from weight, height, age, sex, and activity. Mifflin-St Jeor. Query parameters below. Full doc: https://calculators-122zv97sx-enddefs-projects.vercel.app/api/docs/calorie","operationId":"getCalc_calorie","parameters":[{"name":"weightKg","in":"query","required":true,"schema":{"type":"number"}},{"name":"heightCm","in":"query","required":true,"schema":{"type":"number"}},{"name":"ageYears","in":"query","required":true,"schema":{"type":"number"}},{"name":"sex","in":"query","required":true,"schema":{"type":"string","enum":["male","female"]}},{"name":"activityFactor","in":"query","required":true,"schema":{"type":"number"}}],"responses":{"200":{"description":"Envelope with inputs, outputs, formula, referenceUrl","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculatorEnvelope"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/calc/retirement":{"get":{"summary":"Retirement","description":"Projected balance from starting amount, annual contribution, rate, and years. Query parameters below. Full doc: https://calculators-122zv97sx-enddefs-projects.vercel.app/api/docs/retirement","operationId":"getCalc_retirement","parameters":[{"name":"principal","in":"query","required":true,"schema":{"type":"number"}},{"name":"annualContribution","in":"query","required":true,"schema":{"type":"number"}},{"name":"annualRatePct","in":"query","required":true,"schema":{"type":"number"}},{"name":"years","in":"query","required":true,"schema":{"type":"number"}}],"responses":{"200":{"description":"Envelope with inputs, outputs, formula, referenceUrl","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculatorEnvelope"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/calc/pregnancy-due-date":{"get":{"summary":"Pregnancy due date","description":"Estimated due date from LMP. Naegele rule. For planning only. Query parameters below. Full doc: https://calculators-122zv97sx-enddefs-projects.vercel.app/api/docs/pregnancy-due-date","operationId":"getCalc_pregnancy_due_date","parameters":[{"name":"lmpDate","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Envelope with inputs, outputs, formula, referenceUrl","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculatorEnvelope"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/calc/child-growth-bmi":{"get":{"summary":"Child growth BMI","description":"BMI-for-age percentile for children 0-19 years. WHO growth standards, sex-specific. Query parameters below. Full doc: https://calculators-122zv97sx-enddefs-projects.vercel.app/api/docs/child-growth-bmi","operationId":"getCalc_child_growth_bmi","parameters":[{"name":"ageMonths","in":"query","required":true,"schema":{"type":"number"}},{"name":"sex","in":"query","required":true,"schema":{"type":"string","enum":["male","female"]}},{"name":"weight","in":"query","required":true,"schema":{"type":"number"}},{"name":"weightUnit","in":"query","required":false,"schema":{"type":"string","enum":["kg","lb"]}},{"name":"height","in":"query","required":true,"schema":{"type":"number"}},{"name":"heightUnit","in":"query","required":false,"schema":{"type":"string","enum":["cm","in"]}},{"name":"solveFor","in":"query","required":false,"schema":{"type":"string","enum":["percentile","weight","height","targetPercentile"]}},{"name":"targetPercentile","in":"query","required":false,"schema":{"type":"number"}}],"responses":{"200":{"description":"Envelope with inputs, outputs, formula, referenceUrl","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculatorEnvelope"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/calc/random-number":{"get":{"summary":"Random number generator","description":"Generate a random integer between min and max. Cryptographically secure. Query parameters below. Full doc: https://calculators-122zv97sx-enddefs-projects.vercel.app/api/docs/random-number","operationId":"getCalc_random_number","parameters":[{"name":"min","in":"query","required":true,"schema":{"type":"number"}},{"name":"max","in":"query","required":true,"schema":{"type":"number"}}],"responses":{"200":{"description":"Envelope with inputs, outputs, formula, referenceUrl","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculatorEnvelope"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/calc/time-duration":{"get":{"summary":"Time duration","description":"Duration between start and end times. Handles day boundaries automatically. Query parameters below. Full doc: https://calculators-122zv97sx-enddefs-projects.vercel.app/api/docs/time-duration","operationId":"getCalc_time_duration","parameters":[{"name":"startTime","in":"query","required":true,"schema":{"type":"string"}},{"name":"endTime","in":"query","required":true,"schema":{"type":"string"}},{"name":"crossesMidnight","in":"query","required":true,"schema":{"type":"string","enum":["true","false"]}}],"responses":{"200":{"description":"Envelope with inputs, outputs, formula, referenceUrl","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculatorEnvelope"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/calc/discount":{"get":{"summary":"Discount","description":"Final price and savings from percentage discount. Perfect for sales and coupons. Query parameters below. Full doc: https://calculators-122zv97sx-enddefs-projects.vercel.app/api/docs/discount","operationId":"getCalc_discount","parameters":[{"name":"originalPrice","in":"query","required":true,"schema":{"type":"number"}},{"name":"discountPercent","in":"query","required":true,"schema":{"type":"number"}}],"responses":{"200":{"description":"Envelope with inputs, outputs, formula, referenceUrl","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculatorEnvelope"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/calc/simple-interest":{"get":{"summary":"Simple interest","description":"Interest and total from principal, rate, and time. Linear interest, no compounding. Query parameters below. Full doc: https://calculators-122zv97sx-enddefs-projects.vercel.app/api/docs/simple-interest","operationId":"getCalc_simple_interest","parameters":[{"name":"principal","in":"query","required":true,"schema":{"type":"number"}},{"name":"rate","in":"query","required":true,"schema":{"type":"number"}},{"name":"time","in":"query","required":true,"schema":{"type":"number"}}],"responses":{"200":{"description":"Envelope with inputs, outputs, formula, referenceUrl","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculatorEnvelope"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/calc/pace":{"get":{"summary":"Running pace","description":"Minutes per mile or km from distance and time. Perfect for runners and race planning. Query parameters below. Full doc: https://calculators-122zv97sx-enddefs-projects.vercel.app/api/docs/pace","operationId":"getCalc_pace","parameters":[{"name":"distance","in":"query","required":true,"schema":{"type":"number"}},{"name":"distanceUnit","in":"query","required":false,"schema":{"type":"string","enum":["miles","km"]}},{"name":"timeMinutes","in":"query","required":true,"schema":{"type":"number"}}],"responses":{"200":{"description":"Envelope with inputs, outputs, formula, referenceUrl","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculatorEnvelope"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/calc/child-growth-wfl":{"get":{"summary":"Child growth weight-for-length","description":"WHO weight percentiles for infants 0-24 months. Weight-for-length, sex-specific. Query parameters below. Full doc: https://calculators-122zv97sx-enddefs-projects.vercel.app/api/docs/child-growth-wfl","operationId":"getCalc_child_growth_wfl","parameters":[{"name":"length","in":"query","required":true,"schema":{"type":"number"}},{"name":"lengthUnit","in":"query","required":false,"schema":{"type":"string","enum":["cm","in"]}},{"name":"sex","in":"query","required":true,"schema":{"type":"string","enum":["male","female"]}},{"name":"weight","in":"query","required":true,"schema":{"type":"number"}},{"name":"weightUnit","in":"query","required":false,"schema":{"type":"string","enum":["kg","lb"]}},{"name":"solveFor","in":"query","required":false,"schema":{"type":"string","enum":["percentile","weight","targetPercentile"]}},{"name":"targetPercentile","in":"query","required":false,"schema":{"type":"number"}}],"responses":{"200":{"description":"Envelope with inputs, outputs, formula, referenceUrl","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculatorEnvelope"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/calc/child-growth":{"get":{"summary":"Child growth chart","description":"WHO growth percentiles with multiple measurements. Height-for-age, weight-for-age, and more. Query parameters below. Full doc: https://calculators-122zv97sx-enddefs-projects.vercel.app/api/docs/child-growth","operationId":"getCalc_child_growth","parameters":[{"name":"chartType","in":"query","required":true,"schema":{"type":"string","enum":["weight-for-age","height-for-age","weight-for-height","bmi-for-age"]}},{"name":"ageYears","in":"query","required":true,"schema":{"type":"number"}},{"name":"ageMonths","in":"query","required":true,"schema":{"type":"number"}},{"name":"sex","in":"query","required":true,"schema":{"type":"string","enum":["male","female"]}},{"name":"weight","in":"query","required":true,"schema":{"type":"number"}},{"name":"weightUnit","in":"query","required":false,"schema":{"type":"string","enum":["kg","lb"]}},{"name":"height","in":"query","required":true,"schema":{"type":"number"}},{"name":"heightUnit","in":"query","required":false,"schema":{"type":"string","enum":["cm","in"]}}],"responses":{"200":{"description":"Envelope with inputs, outputs, formula, referenceUrl","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculatorEnvelope"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/calc/p-value":{"get":{"summary":"P-value","description":"Statistical significance from z-test or t-test. Hypothesis testing at α = 0.05. Query parameters below. Full doc: https://calculators-122zv97sx-enddefs-projects.vercel.app/api/docs/p-value","operationId":"getCalc_p_value","parameters":[{"name":"testStatistic","in":"query","required":true,"schema":{"type":"number"}},{"name":"testType","in":"query","required":true,"schema":{"type":"string","enum":["z-test","t-test","chi-square","f-test"]}},{"name":"degreesOfFreedom","in":"query","required":false,"schema":{"type":"number"}},{"name":"degreesOfFreedom1","in":"query","required":false,"schema":{"type":"number"}},{"name":"degreesOfFreedom2","in":"query","required":false,"schema":{"type":"number"}},{"name":"tailType","in":"query","required":false,"schema":{"type":"string","enum":["two-tailed","left-tailed","right-tailed"]}},{"name":"alpha","in":"query","required":false,"schema":{"type":"number"}},{"name":"calculateCI","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"sampleMean","in":"query","required":false,"schema":{"type":"number"}},{"name":"standardError","in":"query","required":false,"schema":{"type":"number"}},{"name":"calculateEffectSize","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"mean1","in":"query","required":false,"schema":{"type":"number"}},{"name":"mean2","in":"query","required":false,"schema":{"type":"number"}},{"name":"pooledStdDev","in":"query","required":false,"schema":{"type":"number"}}],"responses":{"200":{"description":"Envelope with inputs, outputs, formula, referenceUrl","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculatorEnvelope"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/calc/tax-bracket":{"get":{"summary":"Tax bracket","description":"US Federal income tax for 2024. Total tax, effective rate, marginal rate by bracket. Query parameters below. Full doc: https://calculators-122zv97sx-enddefs-projects.vercel.app/api/docs/tax-bracket","operationId":"getCalc_tax_bracket","parameters":[{"name":"taxableIncome","in":"query","required":false,"schema":{"type":"number"}},{"name":"grossIncome","in":"query","required":false,"schema":{"type":"number"}},{"name":"filingStatus","in":"query","required":false,"schema":{"type":"string","enum":["single","married-joint","married-separate","head-of-household"]}},{"name":"taxYear","in":"query","required":false,"schema":{"type":"number"}},{"name":"solveFor","in":"query","required":false,"schema":{"type":"string","enum":["totalTax","grossIncome","deductions"]}},{"name":"targetTotalTax","in":"query","required":false,"schema":{"type":"number"}},{"name":"deductionType","in":"query","required":false,"schema":{"type":"string","enum":["standard","itemized"]}},{"name":"itemizedDeductions","in":"query","required":false,"schema":{"type":"number"}},{"name":"includeFica","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"stateTaxRatePct","in":"query","required":false,"schema":{"type":"number"}}],"responses":{"200":{"description":"Envelope with inputs, outputs, formula, referenceUrl","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculatorEnvelope"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/calc/debt-payoff":{"get":{"summary":"Debt payoff","description":"Months to payoff and total interest from balance, rate, and payment. Credit card planning. Query parameters below. Full doc: https://calculators-122zv97sx-enddefs-projects.vercel.app/api/docs/debt-payoff","operationId":"getCalc_debt_payoff","parameters":[{"name":"balance","in":"query","required":false,"schema":{"type":"number"}},{"name":"annualRate","in":"query","required":false,"schema":{"type":"number"}},{"name":"monthlyPayment","in":"query","required":false,"schema":{"type":"number"}},{"name":"totalMonthlyPayment","in":"query","required":false,"schema":{"type":"number"}},{"name":"extraPayment","in":"query","required":false,"schema":{"type":"number"}},{"name":"strategy","in":"query","required":false,"schema":{"type":"string","enum":["avalanche","snowball","highest-balance","custom"]}},{"name":"solveFor","in":"query","required":false,"schema":{"type":"string","enum":["timeline","monthlyPayment","payoffDate"]}},{"name":"targetPayoffDate","in":"query","required":false,"schema":{"type":"string"}},{"name":"targetMonths","in":"query","required":false,"schema":{"type":"number"}},{"name":"includeSchedule","in":"query","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Envelope with inputs, outputs, formula, referenceUrl","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculatorEnvelope"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/calc/currency-convert":{"get":{"summary":"Currency converter","description":"Convert between major currencies. Fixed rates, quick estimates for travel and shopping. Query parameters below. Full doc: https://calculators-122zv97sx-enddefs-projects.vercel.app/api/docs/currency-convert","operationId":"getCalc_currency_convert","parameters":[{"name":"amount","in":"query","required":true,"schema":{"type":"number"}},{"name":"fromCurrency","in":"query","required":false,"schema":{"type":"string","enum":["USD","EUR","GBP","JPY","CAD","AUD","CHF","CNY","INR","MXN","BRL","ZAR","RUB","KRW","SGD","HKD","NOK","SEK","DKK","NZD"]}},{"name":"toCurrency","in":"query","required":false,"schema":{"type":"string","enum":["USD","EUR","GBP","JPY","CAD","AUD","CHF","CNY","INR","MXN","BRL","ZAR","RUB","KRW","SGD","HKD","NOK","SEK","DKK","NZD"]}},{"name":"solveFor","in":"query","required":false,"schema":{"type":"string","enum":["converted","original"]}},{"name":"targetAmount","in":"query","required":false,"schema":{"type":"number"}},{"name":"includeRateInfo","in":"query","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Envelope with inputs, outputs, formula, referenceUrl","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculatorEnvelope"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/calc/fuel-cost":{"get":{"summary":"Fuel cost","description":"Trip fuel cost from distance, MPG/L100km, and price. Road trip budgeting. Query parameters below. Full doc: https://calculators-122zv97sx-enddefs-projects.vercel.app/api/docs/fuel-cost","operationId":"getCalc_fuel_cost","parameters":[{"name":"distance","in":"query","required":false,"schema":{"type":"number"}},{"name":"distanceUnit","in":"query","required":false,"schema":{"type":"string","enum":["miles","km"]}},{"name":"fuelEfficiency","in":"query","required":false,"schema":{"type":"number"}},{"name":"efficiencyUnit","in":"query","required":false,"schema":{"type":"string","enum":["mpg","l100km","mpkwh","kwhper100km"]}},{"name":"fuelPrice","in":"query","required":false,"schema":{"type":"number"}},{"name":"priceUnit","in":"query","required":false,"schema":{"type":"string","enum":["gallon","liter","kwh"]}},{"name":"vehicleType","in":"query","required":false,"schema":{"type":"string","enum":["gas","electric","hybrid"]}},{"name":"electricPercentage","in":"query","required":false,"schema":{"type":"number"}},{"name":"electricEfficiency","in":"query","required":false,"schema":{"type":"number"}},{"name":"electricityPrice","in":"query","required":false,"schema":{"type":"number"}},{"name":"roundTrip","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"solveFor","in":"query","required":false,"schema":{"type":"string","enum":["cost","distance","efficiency"]}},{"name":"targetCost","in":"query","required":false,"schema":{"type":"number"}}],"responses":{"200":{"description":"Envelope with inputs, outputs, formula, referenceUrl","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculatorEnvelope"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/calc/bac":{"get":{"summary":"Blood alcohol content","description":"Blood Alcohol Content estimate from drinks, weight, sex, and time. Widmark formula. ESTIMATE ONLY. Query parameters below. Full doc: https://calculators-122zv97sx-enddefs-projects.vercel.app/api/docs/bac","operationId":"getCalc_bac","parameters":[{"name":"drinks","in":"query","required":true,"schema":{"type":"number"}},{"name":"weight","in":"query","required":true,"schema":{"type":"number"}},{"name":"weightUnit","in":"query","required":false,"schema":{"type":"string","enum":["lbs","kg"]}},{"name":"sex","in":"query","required":true,"schema":{"type":"string","enum":["male","female"]}},{"name":"hours","in":"query","required":true,"schema":{"type":"number"}},{"name":"formula","in":"query","required":false,"schema":{"type":"string","enum":["widmark","watson"]}},{"name":"solveFor","in":"query","required":false,"schema":{"type":"string","enum":["bac","drinks","timeToSober"]}},{"name":"targetBac","in":"query","required":false,"schema":{"type":"number"}},{"name":"bodyFatPct","in":"query","required":false,"schema":{"type":"number"}}],"responses":{"200":{"description":"Envelope with inputs, outputs, formula, referenceUrl","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculatorEnvelope"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/calc/paint-estimator":{"get":{"summary":"Paint estimator","description":"Estimate paint quantity for walls and ceilings with coats, coverage rate, and buy rounding. Query parameters below. Full doc: https://calculators-122zv97sx-enddefs-projects.vercel.app/api/docs/paint-estimator","operationId":"getCalc_paint_estimator","responses":{"200":{"description":"Envelope with inputs, outputs, formula, referenceUrl","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculatorEnvelope"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/calc/mulch-estimator":{"get":{"summary":"Mulch estimator","description":"Estimate mulch or soil volume from area and depth, with cubic yards and bag count outputs. Query parameters below. Full doc: https://calculators-122zv97sx-enddefs-projects.vercel.app/api/docs/mulch-estimator","operationId":"getCalc_mulch_estimator","responses":{"200":{"description":"Envelope with inputs, outputs, formula, referenceUrl","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculatorEnvelope"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/calc/gravel-estimator":{"get":{"summary":"Gravel estimator","description":"Estimate gravel quantity by area and depth with cubic yards, tons, and density-aware conversion. Query parameters below. Full doc: https://calculators-122zv97sx-enddefs-projects.vercel.app/api/docs/gravel-estimator","operationId":"getCalc_gravel_estimator","responses":{"200":{"description":"Envelope with inputs, outputs, formula, referenceUrl","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculatorEnvelope"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/calc/concrete-slab-estimator":{"get":{"summary":"Concrete slab estimator","description":"Estimate concrete slab volume from length, width, and thickness with cubic yard and bag-style outputs. Query parameters below. Full doc: https://calculators-122zv97sx-enddefs-projects.vercel.app/api/docs/concrete-slab-estimator","operationId":"getCalc_concrete_slab_estimator","responses":{"200":{"description":"Envelope with inputs, outputs, formula, referenceUrl","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculatorEnvelope"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/calc/drywall-estimator":{"get":{"summary":"Drywall estimator","description":"Estimate drywall sheet count for walls and ceilings with waste adjustment and rounded purchase totals. Query parameters below. Full doc: https://calculators-122zv97sx-enddefs-projects.vercel.app/api/docs/drywall-estimator","operationId":"getCalc_drywall_estimator","responses":{"200":{"description":"Envelope with inputs, outputs, formula, referenceUrl","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculatorEnvelope"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/calc/flooring-estimator":{"get":{"summary":"Flooring estimator","description":"Calculate flooring boxes for wood, laminate, or LVP. Boxes needed with waste factor. Query parameters below. Full doc: https://calculators-122zv97sx-enddefs-projects.vercel.app/api/docs/flooring-estimator","operationId":"getCalc_flooring_estimator","responses":{"200":{"description":"Envelope with inputs, outputs, formula, referenceUrl","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculatorEnvelope"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/calc/tile-estimator":{"get":{"summary":"Tile estimator","description":"Calculate tile count for floors and walls. Accounts for tile size and waste. Query parameters below. Full doc: https://calculators-122zv97sx-enddefs-projects.vercel.app/api/docs/tile-estimator","operationId":"getCalc_tile_estimator","responses":{"200":{"description":"Envelope with inputs, outputs, formula, referenceUrl","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculatorEnvelope"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/calc/trim-estimator":{"get":{"summary":"Trim estimator","description":"Calculate baseboard and trim sticks. Linear feet to pieces needed. Query parameters below. Full doc: https://calculators-122zv97sx-enddefs-projects.vercel.app/api/docs/trim-estimator","operationId":"getCalc_trim_estimator","responses":{"200":{"description":"Envelope with inputs, outputs, formula, referenceUrl","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculatorEnvelope"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/calc/fertilizer-estimator":{"get":{"summary":"Fertilizer estimator","description":"Calculate lawn fertilizer bags. Based on nitrogen content and application rate. Query parameters below. Full doc: https://calculators-122zv97sx-enddefs-projects.vercel.app/api/docs/fertilizer-estimator","operationId":"getCalc_fertilizer_estimator","responses":{"200":{"description":"Envelope with inputs, outputs, formula, referenceUrl","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculatorEnvelope"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/calc/seed-sod-estimator":{"get":{"summary":"Seed & sod estimator","description":"Calculate grass seed or sod rolls. Choose seed or sod mode for lawn coverage. Query parameters below. Full doc: https://calculators-122zv97sx-enddefs-projects.vercel.app/api/docs/seed-sod-estimator","operationId":"getCalc_seed_sod_estimator","responses":{"200":{"description":"Envelope with inputs, outputs, formula, referenceUrl","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculatorEnvelope"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}},"components":{"schemas":{"CalculatorEnvelope":{"type":"object","required":["calculator","version","inputs","outputs","formula","assumptions","sources","interpretation","referenceUrl","dataFreshness"],"properties":{"calculator":{"type":"string","description":"Calculator slug"},"version":{"type":"string","description":"Global layer version"},"inputs":{"type":"object","additionalProperties":true},"outputs":{"type":"object","additionalProperties":true},"formula":{"type":"object","properties":{"id":{"type":"string"},"summary":{"type":"string"}}},"assumptions":{"type":"array","items":{"type":"string"}},"sources":{"type":"array","items":{"type":"string"}},"interpretation":{"type":"string"},"referenceUrl":{"type":"string","format":"uri"},"recordUrl":{"type":"string","format":"uri","description":"Canonical record URL for this calculation (when present)"},"equivalentApiCall":{"type":"string","format":"uri","description":"API GET request that reproduces this result (when present)"},"dataFreshness":{"type":"object","properties":{"profile":{"type":"string","enum":["static","periodic","event-driven","near-real-time"]},"stale":{"type":"boolean"}}}}},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"type":"string"},"code":{"type":"string","example":"INVALID_INPUT"},"fieldErrors":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}}}}}}}