# HSA Contribution Limits: GET /api/v1/limits

> For AI agents: this page is also Markdown at [/developers/get-contribution-limits.md](https://www.hsatrackr.com/developers/get-contribution-limits.md). Every docs page is listed in [/developers/llms.txt](https://www.hsatrackr.com/developers/llms.txt).

Get HSA contribution limits, HDHP minimum requirements, and out-of-pocket maximums for a specific year.

```http
GET /api/v1/limits
```

## Parameters

| Name | In | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `year` | query | no |  | Tax year, 2004 to 2026. Omit to get every year. |

## Example request

```bash
curl "https://www.hsatrackr.com/api/v1/limits?year=2026"
```

## Example response

A real response from the live handler.

```json
{
  "data": {
    "year": 2026,
    "selfOnly": 4400,
    "family": 8750,
    "catchUp": 1000,
    "oopMaxSelfOnly": 8500,
    "oopMaxFamily": 17000,
    "minDeductibleSelfOnly": 1700,
    "minDeductibleFamily": 3400,
    "notes": "IRS Rev. Proc. 2025-19 (https://www.irs.gov/pub/irs-drop/rp-25-19.pdf). Effective for tax year 2026. Sources checked October 8, 2026."
  },
  "meta": {
    "source": "https://www.hsatrackr.com/limits",
    "citation_url": "https://www.hsatrackr.com/limits",
    "updated": "2026-01-01",
    "disclaimer": "This information is for educational purposes only and does not constitute tax, legal, or financial advice. Consult a qualified professional for your specific situation.",
    "api_docs": "https://www.hsatrackr.com/api/v1"
  }
}
```

## Response fields

Every response is `{ data, meta }`. `meta.citation_url` is the public page to cite.

### When the response is: one year

| Field | Type | Always present |
| --- | --- | --- |
| `year` | integer | yes |
| `selfOnly` | integer | yes |
| `family` | integer | yes |
| `catchUp` | integer | yes |
| `oopMaxSelfOnly` | integer | yes |
| `oopMaxFamily` | integer | yes |
| `minDeductibleSelfOnly` | integer | yes |
| `minDeductibleFamily` | integer | yes |
| `notes` | string | yes |

### When the response is: every year (year omitted)

| Field | Type | Always present |
| --- | --- | --- |
| `years` | object[] | yes |
| `availableYears` | integer[] | yes |

## Errors

| Status | Meaning |
| --- | --- |
| `400` | Bad request - invalid parameters |
| `404` | Resource not found |
| `429` | Rate limit exceeded (30 requests per minute per IP) |

Full contract: [openapi.json](https://www.hsatrackr.com/openapi.json). All endpoints: [API overview](https://www.hsatrackr.com/developers).
