API and embeds
Everything this site publishes is available as JSON, free, with no key and no rate limit.55 programs, 1008 records. Every figure carries the sentence it was read from, the byte offset of that sentence in a stored snapshot of the source document, the sha256 of that snapshot, and the date it was last verified against it.
That is the point of it. Anyone can scrape the number. The evidence is what lets you check the number without taking our word for it, and what lets you tell your own users where it came from.
Endpoints
| Endpoint | What it returns |
|---|---|
| /api/v1/index.json | Catalog of every program, its years, and its endpoints |
| /api/v1/latest.json | Every figure currently in force, with evidence, in one file |
| /api/v1/{program}.json | Every year of one program |
| /api/v1/{program}/{year}.json | One record |
| /api/v1/{program}/{state}/{year}.json | One record of a state-level program |
Building an index of what this site knows? Fetch latest.jsononce rather than walking the catalog. It is one request for the whole current set.
What a figure looks like
Each figure carries its own source, even where several figures share one. Pull a single number out of a response and it still arrives with the document behind it.
{
"key": "self-only",
"label": "Self-only",
"value": 4400,
"format": "usd",
"formatted": "$4,400",
"scope": null,
"derived": false,
"quote": "For calendar year 2026, the annual limitation on deductions under
ยง 223(b)(2)(A) for an individual with self-only coverage under a
high deductible health plan is $4,400.",
"offset": 649,
"source": {
"url": "https://www.irs.gov/pub/irs-drop/rp-25-19.pdf",
"title": "Rev. Proc. 2025-19",
"publisher": "IRS",
"fetched_at": "2026-08-27T12:31:14.653Z",
"sha256_text": "c0b5b8ea568516f125f863a1144e1cc1682f8f2679d8911b0e1e5fcc33fa4641",
"snapshot_url": "https://ratesandlimits.com/snapshots/hsa-contribution-limit/2026/rp-25-19.txt"
}
}Checking a figure yourself
Fetch the snapshot_url. Hash it with sha256 and compare againstsha256_text. Seek to offset and read quote.lengthcharacters. You should be holding the same sentence we did. Snapshots never change and never disappear, which government PDFs cannot promise.
A figure with "derived": true has no quote. Those appear only inside an estimate, and they carry an estimate block naming the formula and its inputs, each of which is evidenced normally.
Embeds
A card showing one program's current figures, styled to sit inside your page and following the reader's light or dark preference. It loads nothing from anywhere but this site, sets no cookie, and reports nothing back.
<script src="https://ratesandlimits.com/embed/v1/loader.js"
data-program="hsa-contribution-limit"
data-year="2026"></script>It is a few dozen lines with nothing hidden in it: read the loader script before you put it on your page. The loader sizes the frame for you. If you would rather not run our script, a plain iframe with a fixed height works just as well:
<iframe src="https://ratesandlimits.com/embed/v1/hsa-contribution-limit/2026"
width="100%" height="220" style="border:1px solid #ddd;border-radius:6px"
title="HSA Contribution Limit 2026"></iframe>Add data-state="florida" for a state-level program such as the minimum wage. The card carries a source line and a link back to the page the figures are published on. That link is how the embed pays for itself, so please leave it in place.
Licence
Free to use, including commercially. Attribute this site and link back. Do not strip the evidence fields and then present the figures as sourced from here: the evidence is the claim.
Addresses under /api/v1/ and /snapshots/ are permanent. Neither is removed once published; the build refuses to ship if one goes missing.