Inputs
| Field | Type | Valid domain |
|---|---|---|
| age | int | 60 – 100 |
| plannedGivingAnnual | float | 0 – 500,000 |
| rmdAmount | float | 0 – 500,000 |
| marginalRatePct | float | 0 – 50 |
| itemizes | choice | yes | no |
- Whole-year ages: eligibility modeled at 71+ (§408(d)(8) grants it at 70½ — a donor at 70 should read the answer as their post-70½ position).
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/qcd
{
"age": 80,
"plannedGivingAnnual": 250000,
"rmdAmount": 250000,
"marginalRatePct": 25,
"itemizes": "yes"
}Response (chart arrays compacted)
{
"ok": true,
"model": "qcd",
"specVersion": "1.0.0",
"contractUrl": "/api/v1/models/qcd",
"specUrl": "/api/v1/models/qcd/spec",
"inputs": {
"age": 80,
"plannedGivingAnnual": 250000,
"rmdAmount": 250000,
"marginalRatePct": 25,
"itemizes": "yes"
},
"outputs": {
"eligible": 1,
"limitApplied": 111000,
"qcdAllowed": 111000,
"rmdOffset": 111000,
"taxSavedVsCashGift": 0,
"taxSavedOnRmdOffset": 27750,
"excessGivingBeyondLimit": 139000
},
"sentinels": [],
"assumptions": [
"Implements model spec qcd v1.0.0 (Concordance-tested: independently reimplemented from the spec).",
"Whole-year ages: eligibility modeled at 71+ (§408(d)(8) grants it at 70½ — a donor at 70 should read the answer as their post-70½ position)."
],
"facts": [
{
"id": "irs.qcd.annual-limit.2026",
"label": "Qualified charitable distribution annual limit (§408(d)(8)(A))",
"value": 111000,
"period": "TY2026",
"source": "IRS Notice 2025-67 (2026 retirement plan COLAs)"
}
],
"record": {
"sha256": "0eeeb74bf724b2a593b2c8d571fd14c909cb96dcc1ca45f3a50bce8a54e8f46a",
"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.