{"openapi":"3.1.0","info":{"title":"Ahorro (Savings) API","version":"0.1.0","description":"Mexican personal-finance calculators: CETES, ISR, aguinaldo, prima vacacional, Afore projection, UMA conversion, savings goals, inflation — all local.\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://ahorro.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"hr@unifydynamics.com","url":"https://connectorbay.com/ahorro/docs"},"termsOfService":"https://connectorbay.com/ahorro/terms"},"servers":[{"url":"https://ahorro.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/ahorro/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/cetes_calculator":{"post":{"operationId":"cetes_calculator","summary":"CETES-style fixed-term maturity value using simple interest over a 360-day year (standard money-market","description":"CETES-style fixed-term maturity value using simple interest over a 360-day year (standard money-market\n    convention). Use for \"what does 50,000 pesos in CETES at 10.5% for 182 days become\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"amount":{"description":"Principal amount in MXN.","exclusiveMinimum":0,"title":"Amount","type":"number"},"annual_rate_percent":{"description":"Annual rate YOU supply (e.g. from a recent CETES auction result) — never assumed by this tool.","minimum":0,"title":"Annual Rate Percent","type":"number"},"days":{"description":"Term length in days (e.g. 28, 91, 182, 364).","minimum":1,"title":"Days","type":"integer"}},"required":["amount","annual_rate_percent","days"],"title":"cetes_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/isr_calculator":{"post":{"operationId":"isr_calculator","summary":"Mexican ISR (income tax) monthly withholding for a salaried individual using the current SAT bracket","description":"Mexican ISR (income tax) monthly withholding for a salaried individual using the current SAT bracket\n    table (Art. 96 LISR), with the bracket-by-bracket math shown. Use for \"ISR on a 25,000 monthly salary\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"monthly_income":{"description":"Gross monthly salary in MXN.","exclusiveMinimum":0,"title":"Monthly Income","type":"number"}},"required":["monthly_income"],"title":"isr_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/aguinaldo_calculator":{"post":{"operationId":"aguinaldo_calculator","summary":"Mexico's mandatory year-end bonus (aguinaldo), legal minimum 15 days' salary (Art. 87 LFT), prorated for","description":"Mexico's mandatory year-end bonus (aguinaldo), legal minimum 15 days' salary (Art. 87 LFT), prorated for\n    partial-year employment. Use for \"aguinaldo for someone earning 500 pesos a day who worked 200 days\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"daily_salary":{"description":"Daily salary in MXN.","exclusiveMinimum":0,"title":"Daily Salary","type":"number"},"days_worked_in_year":{"default":365,"description":"Days worked in the calendar year (365 for a full year).","exclusiveMinimum":0,"maximum":365,"title":"Days Worked In Year","type":"number"}},"required":["daily_salary"],"title":"aguinaldo_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/prima_vacacional_calculator":{"post":{"operationId":"prima_vacacional_calculator","summary":"Mexico's mandatory vacation premium (prima vacacional), legal minimum 25% of the pay for the vacation","description":"Mexico's mandatory vacation premium (prima vacacional), legal minimum 25% of the pay for the vacation\n    days earned (Art. 80 LFT). Optionally cross-checks the days against the legal minimum for that seniority.\n    Use for \"prima vacacional for 12 vacation days at a 400 peso daily salary\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"daily_salary":{"description":"Daily salary in MXN.","exclusiveMinimum":0,"title":"Daily Salary","type":"number"},"vacation_days_earned":{"description":"Vacation days actually earned/being paid out.","exclusiveMinimum":0,"title":"Vacation Days Earned","type":"number"},"years_of_service":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Optional: years of service, to check vacation_days_earned against the LFT Art. 76 legal-minimum table.","title":"Years Of Service"}},"required":["daily_salary","vacation_days_earned"],"title":"prima_vacacional_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/afore_projector":{"post":{"operationId":"afore_projector","summary":"Afore retirement-balance projection using standard compound-growth math (future value of a lump sum","description":"Afore retirement-balance projection using standard compound-growth math (future value of a lump sum\n    plus an ordinary annuity of monthly contributions). The return rate is your own assumption, never a\n    guaranteed or historical-average figure. Use for \"project my Afore if I have 200,000 pesos and contribute\n    1,500 a month for 30 years at an assumed 6% return\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"current_balance":{"description":"Current Afore balance in MXN.","minimum":0,"title":"Current Balance","type":"number"},"monthly_contribution":{"description":"Monthly contribution in MXN (yours + employer + government, combined).","minimum":0,"title":"Monthly Contribution","type":"number"},"years":{"exclusiveMinimum":0,"title":"Years","type":"number"},"assumed_annual_return_percent":{"description":"An ASSUMED annual return, % — not a guarantee or historical average. You choose it.","title":"Assumed Annual Return Percent","type":"number"}},"required":["current_balance","monthly_contribution","years","assumed_annual_return_percent"],"title":"afore_projectorArguments","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/uma_converter":{"post":{"operationId":"uma_converter","summary":"Converts a figure expressed as \"X times the UMA\" into pesos using the current published UMA value.","description":"Converts a figure expressed as \"X times the UMA\" into pesos using the current published UMA value.\n    Use for \"how many pesos is 5 UMA\" or \"convert 30 UMA mensual to pesos\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"multiple_of_uma":{"description":"How many times the UMA, e.g. 5 for '5 veces la UMA'.","title":"Multiple Of Uma","type":"number"},"period":{"default":"daily","description":"daily | monthly | annual — which UMA value to use.","title":"Period","type":"string"}},"required":["multiple_of_uma"],"title":"uma_converterArguments","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_goal_calculator":{"post":{"operationId":"savings_goal_calculator","summary":"Required monthly savings to reach a goal by a target month, with optional assumed compound growth. Use","description":"Required monthly savings to reach a goal by a target month, with optional assumed compound growth. Use\n    for \"how much do I need to save monthly to reach 100,000 pesos in 24 months\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"goal_amount":{"description":"Target amount in MXN.","exclusiveMinimum":0,"title":"Goal Amount","type":"number"},"months":{"minimum":1,"title":"Months","type":"integer"},"current_savings":{"default":0.0,"minimum":0,"title":"Current Savings","type":"number"},"assumed_annual_return_percent":{"default":0.0,"description":"An ASSUMED annual return, %; 0 for plain cash savings with no growth.","minimum":0,"title":"Assumed Annual Return Percent","type":"number"}},"required":["goal_amount","months"],"title":"savings_goal_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/inflation_adjusted_value":{"post":{"operationId":"inflation_adjusted_value","summary":"Real purchasing-power erosion of an amount over time under an inflation rate you supply. Use for \"what","description":"Real purchasing-power erosion of an amount over time under an inflation rate you supply. Use for \"what\n    will 10,000 pesos be worth in 10 years at 4.5% assumed inflation\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"amount":{"description":"Amount in MXN, today's value.","exclusiveMinimum":0,"title":"Amount","type":"number"},"years":{"exclusiveMinimum":0,"title":"Years","type":"number"},"assumed_annual_inflation_percent":{"description":"An ASSUMED annual inflation rate, % — not INEGI's official current figure.","title":"Assumed Annual Inflation Percent","type":"number"}},"required":["amount","years","assumed_annual_inflation_percent"],"title":"inflation_adjusted_valueArguments","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/finance_glossary":{"post":{"operationId":"finance_glossary","summary":"Defines Mexican personal-finance and tax terms: CETES, Afore, SIEFORE, UMA, ISR, IVA, SAT, RFC,","description":"Defines Mexican personal-finance and tax terms: CETES, Afore, SIEFORE, UMA, ISR, IVA, SAT, RFC,\n    homoclave, retención, aguinaldo, prima vacacional, CONDUSEF. Use for \"what is a homoclave\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"term":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A term to define, e.g. 'CETES' or 'homoclave'. Omit to list all terms.","title":"Term"}},"title":"finance_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}}}}