{"openapi":"3.1.0","info":{"title":"Envelope API","version":"0.1.0","description":"A fully local personal budgeting and debt-payoff calculator toolkit: zero-based budget checks, the 50/30/20 rule, debt snowball and avalanche payoff schedules with a total-interest comparison, an emergency-fund calculator, net worth, savings rate, a sinking-fund planner, and a glossary — zero upstream calls, computed from the numbers you provide.\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://envelope.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"hr@unifydynamics.com","url":"https://connectorbay.com/envelope/docs"},"termsOfService":"https://connectorbay.com/envelope/terms"},"servers":[{"url":"https://envelope.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/envelope/docs"},"security":[{},{"bearer":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/zero_based_budget":{"post":{"operationId":"zero_based_budget","summary":"Checks a set of monthly category allocations against income: verifies they sum to (or under) income, flags","description":"Checks a set of monthly category allocations against income: verifies they sum to (or under) income, flags\n    over-allocation and by how much, and reports the unallocated remainder. Use for \"does my budget balance\",\n    \"am I over-allocating my paycheck\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"income":{"description":"Monthly income.","exclusiveMinimum":0,"title":"Income","type":"number"},"categories":{"additionalProperties":{"type":"number"},"description":"Category name -> allocated amount.","title":"Categories","type":"object"}},"required":["income","categories"],"title":"zero_based_budgetArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/fifty_thirty_twenty_check":{"post":{"operationId":"fifty_thirty_twenty_check","summary":"Checks actual needs/wants/savings spending against the 50/30/20 rule (50% needs, 30% wants, 20%","description":"Checks actual needs/wants/savings spending against the 50/30/20 rule (50% needs, 30% wants, 20%\n    savings-or-debt-payoff): reports each category's target amount, actual amount, and how far off it is. Use\n    for \"am I following the 50/30/20 rule\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"income":{"description":"Monthly after-tax income.","exclusiveMinimum":0,"title":"Income","type":"number"},"needs":{"description":"Actual monthly spending on needs.","minimum":0,"title":"Needs","type":"number"},"wants":{"description":"Actual monthly spending on wants.","minimum":0,"title":"Wants","type":"number"},"savings":{"description":"Actual monthly savings and extra debt payoff.","minimum":0,"title":"Savings","type":"number"}},"required":["income","needs","wants","savings"],"title":"fifty_thirty_twenty_checkArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/debt_snowball_plan":{"post":{"operationId":"debt_snowball_plan","summary":"Orders debts smallest-balance-first and computes a full month-by-month payoff schedule: each paid-off","description":"Orders debts smallest-balance-first and computes a full month-by-month payoff schedule: each paid-off\n    debt's minimum payment rolls into the next target along with extra_payment, keeping the total monthly outlay\n    constant. Reports payoff order, months to debt-free, total interest paid, and a per-debt breakdown. Use for\n    \"snowball payoff plan for my 3 credit cards with $200 extra a month\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"debts":{"description":"Each item: {name?: str, balance: number, min_payment: number, interest_rate: number (annual %, e.g. 24 for 24%)}.","items":{"additionalProperties":true,"type":"object"},"title":"Debts","type":"array"},"extra_payment":{"default":0,"description":"Extra amount put toward the target debt each month, on top of everyone's minimums.","minimum":0,"title":"Extra Payment","type":"number"}},"required":["debts"],"title":"debt_snowball_planArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/debt_avalanche_plan":{"post":{"operationId":"debt_avalanche_plan","summary":"Same computation as debt_snowball_plan but orders debts highest-interest-rate-first, minimizing total","description":"Same computation as debt_snowball_plan but orders debts highest-interest-rate-first, minimizing total\n    interest paid. Its total_interest_paid can be compared directly against debt_snowball_plan's for the same\n    debts and extra_payment — avalanche never pays more total interest. Use for \"avalanche vs snowball for my\n    credit cards\", \"which payoff order saves the most interest\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"debts":{"description":"Each item: {name?: str, balance: number, min_payment: number, interest_rate: number (annual %, e.g. 24 for 24%)}.","items":{"additionalProperties":true,"type":"object"},"title":"Debts","type":"array"},"extra_payment":{"default":0,"description":"Extra amount put toward the target debt each month, on top of everyone's minimums.","minimum":0,"title":"Extra Payment","type":"number"}},"required":["debts"],"title":"debt_avalanche_planArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/emergency_fund_calculator":{"post":{"operationId":"emergency_fund_calculator","summary":"Target emergency-fund size (monthly_expenses x months_target) and, given a current balance and monthly","description":"Target emergency-fund size (monthly_expenses x months_target) and, given a current balance and monthly\n    contribution, the months remaining to reach it. Use for \"how big should my emergency fund be\", \"how long\n    until I have 3 months of expenses saved\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"monthly_expenses":{"description":"Essential monthly expenses.","exclusiveMinimum":0,"title":"Monthly Expenses","type":"number"},"months_target":{"default":3,"description":"Months of expenses to target, e.g. 3 or 6.","exclusiveMinimum":0,"title":"Months Target","type":"number"},"current_balance":{"default":0,"description":"Amount already saved toward the fund.","minimum":0,"title":"Current Balance","type":"number"},"monthly_contribution":{"default":0,"description":"Amount contributed to the fund each month.","minimum":0,"title":"Monthly Contribution","type":"number"}},"required":["monthly_expenses"],"title":"emergency_fund_calculatorArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/net_worth_calculator":{"post":{"operationId":"net_worth_calculator","summary":"Sums assets and liabilities and reports net worth plus a breakdown of each side. Use for \"what's my net","description":"Sums assets and liabilities and reports net worth plus a breakdown of each side. Use for \"what's my net\n    worth\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"assets":{"additionalProperties":{"type":"number"},"description":"Asset name -> value, e.g. {'checking': 3000, 'car': 12000}.","title":"Assets","type":"object"},"liabilities":{"additionalProperties":{"type":"number"},"description":"Liability name -> balance, e.g. {'car_loan': 8000, 'credit_card': 1500}.","title":"Liabilities","type":"object"}},"required":["assets","liabilities"],"title":"net_worth_calculatorArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/savings_rate_calculator":{"post":{"operationId":"savings_rate_calculator","summary":"Computes savings rate as a percentage of income: total_savings_and_debt_payoff / income. Use for \"what's","description":"Computes savings rate as a percentage of income: total_savings_and_debt_payoff / income. Use for \"what's\n    my savings rate\", \"am I saving enough of my paycheck\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"income":{"description":"Monthly (or annual — just be consistent) income.","exclusiveMinimum":0,"title":"Income","type":"number"},"total_savings_and_debt_payoff":{"description":"Total saved plus extra debt payoff for the same period.","minimum":0,"title":"Total Savings And Debt Payoff","type":"number"}},"required":["income","total_savings_and_debt_payoff"],"title":"savings_rate_calculatorArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/sinking_fund_planner":{"post":{"operationId":"sinking_fund_planner","summary":"Flat monthly amount needed to reach a planned future expense by a target month count (no growth/interest","description":"Flat monthly amount needed to reach a planned future expense by a target month count (no growth/interest\n    assumed — a plain savings-installment split). Use for \"how much should I save each month for a $1,200\n    holiday fund in 12 months\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"goal_amount":{"description":"Total amount needed for the planned expense.","exclusiveMinimum":0,"title":"Goal Amount","type":"number"},"months":{"description":"Months until the expense is due.","exclusiveMinimum":0,"title":"Months","type":"integer"},"current_saved":{"default":0,"description":"Amount already saved toward this goal.","minimum":0,"title":"Current Saved","type":"number"}},"required":["goal_amount","months"],"title":"sinking_fund_plannerArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/budget_glossary":{"post":{"operationId":"budget_glossary","summary":"Definitions of common budgeting and debt-payoff terms (zero-based budgeting, sinking fund, debt snowball","description":"Definitions of common budgeting and debt-payoff terms (zero-based budgeting, sinking fund, debt snowball\n    vs. avalanche, emergency fund, debt-to-income ratio, the envelope system, ...). Use for \"what's a sinking\n    fund\", \"snowball vs avalanche, what's the difference\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"term":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A specific term to look up; omit to list all.","title":"Term"}},"title":"budget_glossaryArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}