Docs · Model reference
state-income-tax
spec v1.1.0 · 250 open casesInputs
| Field | Type | Valid domain |
|---|---|---|
| state | choice | AK | FL | NV | NH | SD | TN | TX | WA | WY | IL | PA | CO | CA | NY | MA | NJ | VA |
| stateTaxableIncome | float | 0 – 10,000,000 |
| filingStatus | choice | single | married |
- Input is STATE taxable income — each state's own deductions, exemptions, and base modifications are the caller's job (spec exclusion). Covers the nine no-income-tax states, the flat-rate states IL/PA/CO, and the graduated states CA/NY/MA/NJ/VA, all at TY2025 tables. filingStatus selects the graduated table and affects no flat or no-tax state. NY's tax-benefit recapture, MA's short-term-gains rates, and all local taxes are spec exclusions.
All fields required. Out-of-domain values are rejected with per-field errors — never clamped. Unknown fields are rejected.
Live example — generated from the real engine
Request
POST /api/v1/models/state-income-tax
{
"state": "AK",
"stateTaxableIncome": 5000000,
"filingStatus": "single"
}Response (chart arrays compacted)
{
"ok": true,
"model": "state-income-tax",
"specVersion": "1.1.0",
"contractUrl": "/api/v1/models/state-income-tax",
"specUrl": "/api/v1/models/state-income-tax/spec",
"inputs": {
"state": "AK",
"stateTaxableIncome": 5000000,
"filingStatus": "single"
},
"outputs": {
"method": "none",
"stateTax": 0,
"effectiveRatePct": 0,
"marginalRatePct": 0,
"afterTaxIncome": 5000000
},
"sentinels": [],
"assumptions": [
"Implements model spec state-income-tax v1.1.0 (Concordance-tested: independently reimplemented from the spec).",
"Input is STATE taxable income — each state's own deductions, exemptions, and base modifications are the caller's job (spec exclusion). Covers the nine no-income-tax states, the flat-rate states IL/PA/CO, and the graduated states CA/NY/MA/NJ/VA, all at TY2025 tables. filingStatus selects the graduated table and affects no flat or no-tax state. NY's tax-benefit recapture, MA's short-term-gains rates, and all local taxes are spec exclusions."
],
"facts": [
{
"id": "state.il.flat-income-rate.ty2025",
"label": "Illinois flat individual income tax rate (TY2025)",
"value": 0.0495,
"period": "TY2025",
"source": "Illinois DOR rate, unchanged since 2017 (via ustax.tools state summary)"
},
{
"id": "state.pa.flat-income-rate.ty2025",
"label": "Pennsylvania flat personal income tax rate (TY2025)",
"value": 0.0307,
"period": "TY2025",
"source": "PA personal income tax, unchanged since 2004 (TaxAct state guide)"
},
{
"id": "state.co.income-rate.ty2025",
"label": "Colorado income tax rate with TABOR reduction active (TY2025)",
"value": 0.0425,
"period": "TY2025",
"source": "Thomson Reuters: Colorado TABOR temporary rate reduction, TY2025"
},
{
"id": "state.ca.bracket-1-top.single.ty2025",
"label": "California 1% bracket top, single (TY2025) — table vintage marker",
"value": 10756,
"period": "TY2025",
"source": "Tax Foundation, State Individual Income Tax Rates and Brackets (2025)"
},
{
"id": "state.ny.bracket-1-top.single.ty2025",
"label": "New York 4% bracket top, single (TY2025) — table vintage marker",
"value": 8500,
"period": "TY2025",
"source": "Tax Foundation, State Individual Income Tax Rates and Brackets (2025)"
},
{
"id": "state.ma.surtax-threshold.ty2025",
"label": "Massachusetts 4% surtax threshold (TY2025)",
"value": 1083150,
"period": "TY2025",
"source": "Tax Foundation, State Individual Income Tax Rates and Brackets (2025)"
},
{
"id": "state.nj.bracket-1-top.ty2025",
"label": "New Jersey 1.4% bracket top (TY2025) — table vintage marker",
"value": 20000,
"period": "TY2025",
"source": "Tax Foundation, State Individual Income Tax Rates and Brackets (2025)"
},
{
"id": "state.va.bracket-1-top.ty2025",
"label": "Virginia 2% bracket top (TY2025) — table vintage marker",
"value": 3000,
"period": "TY2025",
"source": "Tax Foundation, State Individual Income Tax Rates and Brackets (2025)"
}
],
"record": {
"sha256": "6c93c34fe14a82623a021b3e803fbbf64fea9706c64c23b4d9102506fa4a145a",
"fields": [
"model",
"specVersion",
"inputs",
"outputs"
],
"howToVerify": "Store this record with any advice or agent output built on these numbers. To verify later: build {model, specVersion, inputs, outputs} from the stored response, serialize as JSON with object keys sorted recursively (no whitespace), and SHA-256 it — a match proves the numbers came from this spec version with these inputs, unaltered."
},
"disclaimer": "Illustrative planning model, not financial advice. Outputs follow the published model spec exactly; read the spec for assumptions and exclusions before relying on any number."
}This example is executed against the production engine when the page builds — it cannot drift from the API's real behavior.