Retirement

Project a multi-year Roth conversion strategy

Projects converting tax-deferred savings to a Roth account each year up to the top of a target ordinary-income bracket, against a no-conversion baseline. Reuses the tax and RMD engines. Assumptions (v1): real (today's) dollars with a real return and the chosen year's brackets held constant; conversion tax paid from the converted amount; RMDs begin at the SECURE 2.0 age, are taken before conversions, and are assumed spent (not reinvested). Calculation engine output, not tax advice. Deterministic.

post/v1/roth-conversion

Request

  • Base URL: https://api.numeratica.com
  • URL: https://api.numeratica.com/v1/roth-conversion
  • Auth: one of:
    • HTTP bearer
    • API key in header X-API-Key

Request body

tax_yearinteger required

Supported: 2025, 2026.

filing_status'single' | 'mfj' | 'mfs' | 'hoh' required
current_ageinteger required
end_ageinteger required

Projection horizon (inclusive); must be > current_age.

birth_yearinteger

Optional; sets the SECURE 2.0 RMD beginning age.

tax_deferred_balancenumber required
roth_balancenumber
other_ordinary_incomenumber

Annual ordinary income besides RMDs/conversions (real).

annual_returnnumber required

Real annual return applied to both accounts.

target_bracketnumber required

Marginal ordinary rate to fill each conversion year.

conversion_end_ageinteger

Stop converting at/before this age (exclusive). 0 = convert through end_age.

state_tax_ratenumber
irmaa_tier_capinteger

Optional. Cap each year's conversion so MAGI stays under the top of this Medicare IRMAA tier (0–5).

pay_tax_from_externalboolean

Pay each year's conversion tax from a side taxable account instead of netting it from the conversion, so the full conversion lands in the Roth.

external_taxable_balancenumber

The side taxable account that funds the conversion tax. Required (> 0) when pay_tax_from_external is set.

external_returnnumber

Real after-tax return on the external account; set below annual_return to model taxable drag. Defaults to annual_return.

Example request

{
  "tax_year": 2026,
  "current_age": 63,
  "end_age": 90,
  "birth_year": 1963,
  "tax_deferred_balance": 1500000,
  "roth_balance": 100000,
  "other_ordinary_income": 30000,
  "annual_return": 0.05,
  "target_bracket": 0.24,
  "conversion_end_age": 73
}

Response

Conversion projection

result_idstring
engine_versionstring
disclaimerstring

Example response

{
  "result_id": "roth_1a2b3c4d5e6f7a8b",
  "engine_version": "roth-conversion-1.0.0",
  "inputs": {
    "tax_year": 2026,
    "current_age": 63,
    "end_age": 90,
    "birth_year": 1963,
    "tax_deferred_balance": 1500000,
    "roth_balance": 100000,
    "other_ordinary_income": 30000,
    "annual_return": 0.05,
    "target_bracket": 0.24,
    "conversion_end_age": 73
  }
}

Changes

No recorded changes to this operation across all 1 revision of this API.