Read-only JSON endpoints for ABLE eligibility rules, state plan fees, QDE tags, and interaction rules with public benefits. Free to use with attribution. Rate limited to 1,000 requests per hour per IP.
Returns eligibility outcome and annual contribution capacity given age, disability onset, employment, and state.
Query params:
onset_age integer Age at disability onset. Required.
age integer Current age. Required.
working boolean Working with earned income. Default false.
state string Two-letter state code. Default "US".
Example: GET /eligibility?onset_age=32&age=40&working=true&state=IL
Response:
{
"eligible": true,
"annual_cap": 20000,
"working_earner_bonus": 15650,
"total_cap": 35650,
"reason": "Onset before age 46",
"ssi_shield_ceiling": 100000,
"medicaid_cap": 596925,
"state": "IL",
"state_plan": "Illinois ABLE"
}
Returns all 51 state ABLE plans with fees, features, and residency rules. Cached daily.
Query params (optional):
state string Filter by state code
sort string "fee" | "cap" | "name"
Example: GET /plans?sort=fee
Response:
[
{
"state": "CA",
"plan_name": "CalABLE",
"annual_fee_pct": 0.35,
"medicaid_cap": 596925,
"tax_deduction": false,
"residency_required": false,
"url": "https://www.calable.ca.gov/",
"investment_options": ["Cash", "Conservative", "Moderate", "Aggressive"]
},
// ...50 more
]
Returns whether a plain-text expense is a QDE. Uses semantic search over 100+ tagged expense examples.
Path params:
expense string Free-text expense description
Example: GET /qde/gym%20membership
Response:
{
"query": "gym membership",
"tag": "gray",
"category": "Health",
"guidance": "Gray area. Ask plan admin. Keep receipt showing therapeutic benefit.",
"similar_examples": ["physical therapy", "personal trainer"]
}
Returns how ABLE interacts with each public benefits program.
Query params (optional):
program string Filter by program code (SSI, SSDI, Medicaid, ...)
Example: GET /benefits/interaction?program=SSI
Response:
{
"program": "SSI",
"excluded_amount": 100000,
"treatment": "Balances up to $100k excluded from asset test. Above $100k, SSI suspended (not lost).",
"citation": "POMS SI 01130.740",
"source_url": "https://secure.ssa.gov/apps10/poms.nsf/lnx/0501130740",
"last_updated": "2025-10-01"
}
Returns 25-year balance projection given inputs. Same model as ABLE Simulator.
Query params:
monthly number Monthly contribution
employer_match number Employer match monthly
working_bonus number Annual working-earner bonus
starting_balance number Current balance
allocation string cash | conservative | moderate | aggressive
fee_pct number Annual plan fee
inflation number Real-return adjustment
Example: GET /simulate/growth?monthly=200&employer_match=50&allocation=moderate
Response:
{
"projection": [
{ "year": 1, "balance": 3210, "deposits": 3000, "growth": 210 },
{ "year": 5, "balance": 17842, "deposits": 15000, "growth": 2842 },
// through year 25
]
}
Returns state-year ABLE adoption metrics from 2016 to present. Data source: State ABLE program reports, aggregated by RISEI Lab.
Response format: CSV or JSON via Accept header.
Fields:
state string
year integer
accounts integer Total open accounts end of year
contribs number Total contributions ($M)
avg_balance number Average balance
Example: GET /data/state-year?state=IL&format=json
[
{ "state": "IL", "year": 2018, "accounts": 2100, "contribs": 6.2, "avg_balance": 3450 },
// ...
]
The API is currently open (no authentication required). Rate limit: 1,000 requests per hour per IP. For higher volume, contact us at api@riseilab.org for a key. Please cite RISEI Lab in derivative products. All data is refreshed daily from authoritative federal and state sources.