firenum Fire Plan API

The Fire Plan API from firenum — 1 operation(s) for fire plan.

GitHub OpenAPI

Operations 1

POST /api/fire-plan Build a retirement plan #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/firenum-com:firenum-com-fire-plan-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

firenum-com-fire-plan-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: firenum.com Agent Fire Plan API
  version: 1.4.2
  description: 'Turns what someone has said about their money into firenum''s answer and their plan in firenum''s Fire Planner

    (FIRE: Financial Independence, Retire Early). The answer is the planner''s own, as their plan shows it once

    opened: when they can retire with their contributions, growth and inflation, graded three ways (average returns,

    500 Monte Carlo simulations, every historical start year since 1872). For a FIRE number it gives the number and,

    once it has their age, when they would reach it. All parameters are optional: with too little to grade,

    `missing` says what to ask for.


    Reply from `answer`. Give the headline with both counts: the headline''s date is the first month the money lasts on

    average returns, and the counts say how often that survives real market swings. When a count is under half, open

    with that count ("The money lasts in only N of 500 simulated markets"), never with yes, even a qualified one ("on

    average returns, yes", "a risky yes"): the date works on average but fails in most markets. `coast_number` is

    their Coast FIRE number for `coast_age` (what they would need invested today to stop saving). `coast` is the

    planner''s own answer to stopping saving today: whether the money still lasts if they retire on the headline''s date

    and, if not, the date that works without more saving. `assumed`, when present, is what the answer took for

    something they didn''t say: say so in those terms. `missing` is what the planner needs before it can grade

    anything: ask for it and call again. To grade another retirement year, call again with `retire`. Amounts are in

    their currency, sums in today''s money. `table` is their net worth year by year on each model, with income,

    spending and withdrawals, and `assumptions` is what the answer rests on (the rates, how each model works, how

    their numbers were read, what is not modeled): answer follow-ups from them (what they would have at 60, when the

    money runs out in a bad market, why a date) without calling again, and say what an answer assumes when it matters.


    Give them the returned url exactly as it is: it opens their plan, the whole planner (stress tests, a year-by-year

    table, where the money goes), as a new plan, "From a link", beside any plans they have. A link without an age,

    spending or income opens the quick-start with these numbers filled in instead, and asks for the rest. Without

    `source=agent` the planner opens it as a shared plan that saves nothing. It runs in their browser with no account. The plan keeps the accounts,

    spending lines, debts, pension, Social Security and rental income sent. Salary and side income become one monthly

    income.


    Income is annual. Expenses and contributions are monthly. Amounts in whole currency units (not cents). Growth and

    inflation are percentages.


    Taxes are off by default, in any country: income is take-home pay. For someone in the US who gives income before

    tax, send `taxes=us` (and `state`, a partner, dependents, their Social Security statement figure and a Roth

    conversion strategy when they say them): the planner then computes federal, state and payroll tax every year, and

    the table gains each year''s tax. Amounts are then dollars.


    Before retirement, any spending, debt payments and contributions that income doesn''t cover are paid from savings.

    Without `salary` or `side_income`, and with retirement still ahead, the answer assumes an income that covers

    spending, contributions and debt payments until then (`assumed` says so), and the quick-start asks for it.'
servers:
- url: https://firenum.com
tags:
- name: Fire Plan
paths:
  /api/fire-plan:
    post:
      operationId: build_retirement_plan
      summary: Build a retirement plan
      description: 'Use when someone asks when they can retire, if their money will last, their FIRE number (the planner shows when

        they''d reach it), or about Coast, Barista, Lean or Fat FIRE, and gave numbers (age, income, savings, spending,

        debts). Send what they gave, as said. Returns its answer and plan link.'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                birth:
                  type: integer
                  example: 1990
                  description: Birth year (YYYY). From an age, send the current year minus the age. Used with retire_age to compute retirement date.
                retire:
                  type: integer
                  example: 2045
                  description: Target retirement year (YYYY). Takes precedence over retire_age.
                retire_age:
                  type: integer
                  example: 55
                  description: Target retirement age. Requires birth to compute retirement year. Ignored if retire is provided.
                currency:
                  type: string
                  enum:
                  - USD
                  - EUR
                  - GBP
                  - JPY
                  - CAD
                  - AUD
                  - CHF
                  - INR
                  - NZD
                  default: USD
                  description: Display currency. All amounts should be in this currency.
                retirement:
                  type: number
                  example: 200000
                  description: Retirement account balance (401k, IRA, etc). Default growth 7%.
                retirement_contribution:
                  type: number
                  example: 1500
                  description: Monthly retirement account contribution.
                roth:
                  type: number
                  example: 50000
                  description: Roth account balance (Roth IRA, Roth 401k). Default growth 7%.
                roth_contribution:
                  type: number
                  example: 500
                  description: Monthly Roth account contribution.
                brokerage:
                  type: number
                  example: 100000
                  description: Taxable brokerage account balance. Default growth 7%.
                brokerage_contribution:
                  type: number
                  example: 500
                  description: Monthly brokerage contribution.
                savings:
                  type: number
                  example: 20000
                  description: High-yield savings balance. Default growth 4.5%.
                savings_contribution:
                  type: number
                  example: 200
                  description: Monthly savings contribution.
                hsa:
                  type: number
                  example: 15000
                  description: Health Savings Account balance. Default growth 7%.
                hsa_contribution:
                  type: number
                  example: 300
                  description: Monthly HSA contribution.
                cash:
                  type: number
                  example: 5000
                  description: Cash/checking balance. Default growth 0%.
                cash_contribution:
                  type: number
                  example: 0
                  description: Monthly cash contribution.
                real_estate:
                  type: number
                  example: 300000
                  description: Real estate equity. Default growth 4%.
                real_estate_contribution:
                  type: number
                  example: 0
                  description: Monthly real estate contribution (e.g., extra mortgage principal).
                crypto:
                  type: number
                  example: 10000
                  description: Cryptocurrency balance. Default growth 0%.
                crypto_contribution:
                  type: number
                  example: 100
                  description: Monthly crypto contribution.
                salary:
                  type: number
                  example: 80000
                  description: Annual gross salary, as they said it (don't subtract tax). Grows 3%/year, stops at retirement (open-ended if no retirement date is given). The planner doesn't deduct taxes; if they gave a tax amount, include it in expenses.
                side_income:
                  type: number
                  example: 12000
                  description: Annual side hustle / freelance income. Stops at retirement (open-ended if no retirement date is given).
                part_time_income:
                  type: number
                  example: 18000
                  description: Annual part-time income in retirement (Barista FIRE). Starts at the retirement date and runs on; with no retirement date given, the plan retires at the earliest date that works with this income.
                part_time_until:
                  type: integer
                  minimum: 30
                  maximum: 100
                  example: 60
                  description: Age part_time_income stops (needs birth). Omitted or 100 = for life.
                pension:
                  type: number
                  example: 24000
                  description: Annual pension income. Starts at retirement (immediately if no retirement date is given).
                social_security:
                  type: number
                  example: 20000
                  description: Annual Social Security income. Starts at claim_age when sent with birth; otherwise at the later of retirement and age 67 (uses whichever is known; immediately if neither).
                rental_income:
                  type: number
                  example: 18000
                  description: Annual rental income.
                expenses:
                  type: number
                  example: 4000
                  description: Total monthly spending. Send this alone, or categories alone. If both are sent, categories count as part of this total and only the remainder becomes "Monthly expenses" (never added on top). Do not repeat the total as a category.
                housing:
                  type: number
                  example: 1800
                  description: Monthly housing expense (rent/mortgage).
                healthcare:
                  type: number
                  example: 300
                  description: Monthly healthcare expense.
                food:
                  type: number
                  example: 600
                  description: Monthly food expense.
                transportation:
                  type: number
                  example: 400
                  description: Monthly transportation expense.
                utilities:
                  type: number
                  example: 200
                  description: Monthly utilities expense.
                insurance:
                  type: number
                  example: 300
                  description: Monthly insurance expense.
                discretionary:
                  type: number
                  example: 500
                  description: Monthly discretionary spending.
                debt:
                  type: number
                  example: 25000
                  description: Debt balance.
                debt_rate:
                  type: number
                  example: 5.5
                  description: Debt annual interest rate (percentage).
                debt_payment:
                  type: number
                  example: 400
                  description: Monthly debt payment.
                debt_name:
                  type: string
                  example: Student Loan
                  description: Name/label for the debt. Default "Debt".
                target:
                  type: number
                  example: 1200000
                  description: Accepted from older links and ignored. The planner answers with a retirement date, not a target.
                growth:
                  type: number
                  default: 7
                  example: 6
                  description: Default portfolio growth rate (percentage). Retirement, Roth, brokerage and HSA balances follow it as the market rate (randomized in Monte Carlo, historical in backtests); it also overrides the fixed defaults of the other assets.
                inflation:
                  type: number
                  default: 3
                  example: 4
                  description: Default inflation rate (percentage). Overrides individual expense defaults.
                taxes:
                  type: string
                  enum:
                  - us
                  - 'off'
                  default: 'off'
                  description: '"us" computes US federal, state and payroll tax every year (2026 law, carried forward with inflation). Income is then before tax and every amount is in dollars, whatever currency says. "off" (the default, any country) takes income as take-home pay.'
                state:
                  type: string
                  example: CA
                  description: Two-letter US state code (DC too) for state income tax. Without it, federal tax only.
                partner_birth:
                  type: integer
                  example: 1988
                  description: A partner's birth year (YYYY). The partner retires at the same time. Every account and income line stays the first person's.
                married:
                  type: boolean
                  default: true
                  description: With a partner, files jointly. false files as two singles.
                dependents:
                  type: array
                  items:
                    type: integer
                  example:
                  - 2015
                  - 2018
                  description: Dependents' birth years (child tax credit until 17, ACA household size).
                pia:
                  type: number
                  example: 2400
                  description: Monthly Social Security benefit at full retirement age, from the SSA statement. The planner computes the benefit for claim_age from it.
                claim_age:
                  type: integer
                  minimum: 62
                  maximum: 70
                  default: 67
                  description: Age Social Security is claimed (62-70), for social_security (with birth) or pia.
                roth_conversion:
                  type: string
                  enum:
                  - none
                  - fill_10
                  - fill_12
                  - fill_22
                  - fill_24
                  - fixed
                  - aca
                  default: none
                  description: Roth conversion ladder from the first retired year, each December from traditional accounts into Roth. fill_12 converts up to the top of the 12% bracket; fixed converts roth_conversion_amount a year; aca stays under the ACA premium credit's income limit. Needs a Roth account (roth, 0 is fine) to convert into; without one nothing converts and the answer says so.
                roth_conversion_amount:
                  type: number
                  example: 30000
                  description: Dollars a year, with roth_conversion=fixed.
                roth_conversion_until:
                  type: integer
                  default: 72
                  description: Age the conversions stop.
            examples:
              minimal:
                summary: Just salary and expenses
                value:
                  salary: 80000
                  expenses: 4000
              typical:
                summary: Assets, income, expenses, and retirement date
                value:
                  birth: 1990
                  retire_age: 55
                  salary: 80000
                  retirement: 200000
                  retirement_contribution: 1500
                  roth: 50000
                  savings: 20000
                  expenses: 4000
              complex:
                summary: Full profile with debt and custom rates
                value:
                  birth: 1990
                  retire_age: 55
                  salary: 80000
                  retirement: 200000
                  retirement_contribution: 1500
                  roth: 50000
                  roth_contribution: 500
                  savings: 20000
                  expenses: 4000
                  debt: 25000
                  debt_rate: 5.5
                  debt_payment: 400
                  debt_name: Student Loan
                  growth: 6
                  inflation: 3
      responses:
        '200':
          description: Their Fire Planner link and the planner's answer.
          content:
            application/json:
              schema:
                type: object
                required:
                - url
                - params_applied
                properties:
                  url:
                    type: string
                    description: Full URL to open the Fire Planner with pre-populated data.
                    example: https://firenum.com/fire-planner?birth=1992&retirement=210000&salary=95000&expenses=4000&source=agent
                  params_applied:
                    type: array
                    items:
                      type: string
                    description: List of parameter names that were recognized and applied.
                    example:
                    - birth
                    - retirement
                    - salary
                    - expenses
                  answer:
                    type: object
                    description: 'The planner''s answer, in its words, as their plan shows it once opened (average returns, today''s money, their currency). A field that does not apply is left out. The whole answer is left out once the day''s answers are used up (a limit shared by every caller, reset at 00:00 UTC): the link still opens their plan.'
                    properties:
                      headline:
                        type: string
                        description: When they can retire and how long the money lasts on average returns, or why no date works.
                        example: 'Retiring Jan 2038, at 46: money lasts to age 90'
                      monte_carlo:
                        type: string
                        description: How many of 500 simulated markets the money lasts in.
                        example: money lasts in 129 of 500 simulations
                      backtest:
                        type: string
                        description: How many historical start years since 1872 the money lasts in.
                        example: money lasts in 78 of 98 start years
                      money_left:
                        type: string
                        description: What is left at the end, on average returns, in today's money.
                        example: 'Money left at age 90: $15.6k'
                      spending_room:
                        type: string
                        description: 'With a retirement year of their own: the most they could spend a month and still last.'
                        example: You could spend up to $5,400/mo and the money still lasts to age 90
                      coast:
                        type: string
                        description: Whether they could stop saving today and still retire then (Coast FIRE).
                        example: If you stopped saving today and still retired Jan 2038, the money runs out in 2046. Without more saving the suggested date moves to May 2058, at 66.
                      fire_number:
                        type: number
                        description: 25 times a year's spending (the 4% rule), in their currency.
                        example: 1200000
                      coast_number:
                        type: number
                        description: 'Their Coast FIRE number: what they would need invested today to stop saving and still reach fire_number by coast_age, growing at the plan''s growth less inflation. In their currency.'
                        example: 355752
                      coast_age:
                        type: integer
                        description: 'The retirement age coast_number is for: theirs if they gave one, else 65.'
                        example: 65
                      assumed:
                        type: string
                        description: What the answer assumed that they did not say. Without a salary or side income, an income that covers their spending, contributions and debt payments until they retire.
                        example: 'Income assumed: $5,000/mo until retirement (spending + contributions + debt payments), since none was given. The planner asks for it.'
                      missing:
                        type: array
                        items:
                          type: string
                        description: The parameters the planner needs before it can grade anything (an age, spending). Ask for them and call again.
                        example:
                        - birth
                      assumptions:
                        type: object
                        description: 'What the answer rests on, as the plan''s Assumptions and its lines hold them: rates in % a year, sums in their currency. `models` says how each model that ran works, in the planner''s words; `accounts`, `income`, `spending` and `debts` are their numbers as the planner read them, each with its growth, start and end.'
                        properties:
                          currency:
                            type: string
                            example: USD
                          money:
                            type: string
                            description: 'Sums in today''s money: future amounts are shown at today''s prices.'
                            example: Today's money
                          average_return_pct:
                            type: number
                            description: '% a year before inflation, for accounts on the market rate.'
                            example: 7
                          inflation_pct:
                            type: number
                            description: '% a year.'
                            example: 3
                          retirement:
                            type: string
                            description: 'How the retirement date was chosen: the planner''s suggestion (the earliest month the money lasts) or their own.'
                            example: 'Suggested: the earliest month the money lasts'
                          money_lasts_until:
                            type: string
                            description: The age the money must last to (the year, without a birth year).
                            example: age 90
                          models:
                            type: object
                            description: 'How each model that ran works: Monte Carlo and the backtest are left out when they did not.'
                            properties:
                              average_returns:
                                type: string
                              monte_carlo:
                                type: string
                              backtest:
                                type: string
                          withdrawal_order:
                            type: string
                            description: The order retirement draws on the accounts.
                            example: 'Taxable first: Brokerage, 401(k), Roth IRA'
                          early_withdrawal_penalty:
                            type: string
                            description: Whether retirement accounts wait for the penalty-free age.
                            example: 'Not applied: every account is drawn in order at any age'
                          accounts:
                            type: array
                            description: 'Each counted account: balance, growth and what goes in each month.'
                            items:
                              type: object
                              properties:
                                name:
                                  type: string
                                balance:
                                  type: number
                                growth_pct:
                                  type: number
                                monthly_contribution:
                                  type: number
                          income:
                            type: array
                            description: 'Each income: its amount, its frequency (monthly, annual, one-time), from (now, retirement or YYYY-MM) and until (retirement, never or YYYY-MM), growth.'
                            items:
                              type: object
                              properties:
                                name:
                                  type: string
                                amount:
                                  type: number
                                frequency:
                                  type: string
                                  enum:
                                  - monthly
                                  - annual
                                  - one-time
                                from:
                                  type: string
                                until:
                                  type: string
                                growth_pct:
                                  type: number
                          spending:
                            type: array
                            description: Each spending line, as income is, growing with inflation plus its category's offset.
                            items:
                              type: object
                              properties:
                                name:
                                  type: string
                                amount:
                                  type: number
                                frequency:
                                  type: string
                                  enum:
                                  - monthly
                                  - annual
                                  - one-time
                                from:
                                  type: string
                                until:
                                  type: string
                                growth_pct:
                                  type: number
                          debts:
                            type: array
                            description: 'Each debt: balance, interest and monthly payment.'
                            items:
                              type: object
                              properties:
                                name:
                                  type: string
                                balance:
                                  type: number
                                interest_pct:
                                  type: number
                                monthly_payment:
                                  type: number
                          taxes:
                            type: string
                            description: 'Off (income is take-home pay), or what US taxes on computes with: the state, filing, dependents and the Roth conversion strategy.'
                          not_modeled:
                            type: string
                            description: What the planner leaves out.
                      table:
                        type: object
                        description: 'Year by year in today''s money, the rows and numbers the planner''s Table shows (3 significant figures): the first and last years, every 5th year and the retirement year. Net worth is at the end of each year: on average returns, and the 10th percentile, median and 90th percentile of the Monte Carlo simulations and of the backtest''s start years, for each model that ran (0 once the money has run out). Income, spending (debt payments not included) and withdrawals are on the average path. `notes` names a part first year and the years that draw on a retirement account while the early withdrawal penalty applies. With taxes=us, `tax` is the year''s federal, state and payroll tax and `tax_rate_pct` its share of the year''s income and withdrawals.'
                        properties:
                          columns:
                            type: array
                            items:
                              type: string
                          rows:
                            type: array
                            items:
                              type: array
                              items:
                                type:
                                - number
                                - 'null'
                          retirement_year:
                            type:
                            - integer
                            - 'null'
                          notes:
                            type: array
                            items:
                              type: string
        '400':
          description: Invalid JSON body or no recognized parameters.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
        '405':
          description: Method not allowed (use POST).
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
      tags:
      - Fire Plan