---
title: "Medicare IRMAA Part B & Part D surcharges"
method: POST
path: "/v1/medicare/irmaa"
tags: ["Healthcare"]
---

# Medicare IRMAA Part B & Part D surcharges

`POST /v1/medicare/irmaa`

## Request

- Base URL: `https://api.numeratica.com`
- URL: `https://api.numeratica.com/v1/medicare/irmaa`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-API-Key`

Computes the Medicare income-related monthly adjustment amount (IRMAA) — the Part B and Part D surcharges high-income beneficiaries pay on top of the standard premiums — from the benefit year, filing status, and MAGI. IRMAA uses MAGI from two years before the benefit year (a cliff: $1 over a threshold triggers the full surcharge). Returns the tier, monthly and annual surcharge, and the headroom to the next tier (which drives Roth / withdrawal decisions). Year-keyed SSA/CMS tables. Deterministic.

## Request body

- IRMAARequest
  - `irmaa_year` integer, required: Benefit year. Supported: 2025, 2026. Uses MAGI from two years prior.
  - `filing_status` 'single' | 'mfj' | 'mfs' | 'hoh', required: hoh uses the individual thresholds.
  - `magi` number, required: Modified adjusted gross income (from the 2-year-lookback year).

## Response `200`

IRMAA result

- IRMAAResponse
  - `result_id` string
  - `engine_version` string
  - `inputs` IRMAARequest
    - `irmaa_year` integer, required: Benefit year. Supported: 2025, 2026. Uses MAGI from two years prior.
    - `filing_status` 'single' | 'mfj' | 'mfs' | 'hoh', required: hoh uses the individual thresholds.
    - `magi` number, required: Modified adjusted gross income (from the 2-year-lookback year).
  - `result` object
    - `tier` integer: 0 = standard (no surcharge) … 5 = highest.
    - `part_b_standard` number: Monthly standard Part B premium.
    - `part_b_surcharge` number: Monthly Part B IRMAA.
    - `part_d_surcharge` number: Monthly Part D IRMAA.
    - `part_b_total` number: Standard + Part B surcharge.
    - `monthly_surcharge` number: Part B + Part D surcharge.
    - `annual_surcharge` number: 12 × monthly surcharge.
    - `headroom_to_next_tier` number: MAGI room before the next tier (0 at the top).
    - `top_tier` boolean
  - `disclaimer` string

## Other responses

- `400`: Invalid request
- `401`: Missing or invalid API key.
- `405`: Method not allowed
- `429`: The key's per-minute request budget is exceeded. Retry after the delay in the Retry-After header.
- `503`: A dependency (e.g. the key store) is temporarily unavailable, or the request exceeded its compute deadline. Retryable.

---

[API](https://skmtc.dev/numeratica/apis/numeratica-financial-planning-calculations-api.md) · [All operations](https://skmtc.dev/numeratica/apis/numeratica-financial-planning-calculations-api/llms.txt) · [OpenAPI document](https://skmtc.dev/numeratica/apis/numeratica-financial-planning-calculations-api/revisions/075bcfbd1ebf?raw)
