Compliance API

Endpoint — esa_programs

A targeted view of states that operate an Education Savings Account (ESA) program. Whether a homeschooling family can actually reach the money is homeschool_access — do not infer it from amount_cents.

GET /api/v1/compliance/esa_programs

Lists every state with an ESA program. States without one are excluded from this index.

curl -H "Authorization: Bearer $TOKEN" https://homeschoolfox.com/api/v1/compliance/esa_programs
{
  "data": [
    {
      "state_abbreviation": "MO",
      "state_name": "Missouri",
      "program_name": "MOScholars (with Family Paced Education option)",
      "amount_cents": 637500,
      "homeschool_access": "status_change",
      "eligibility": "Targeted, not universal. Eligibility is limited to ...",
      "url": "https://treasurer.mo.gov/MOScholars/ParentsStudents"
    },
    ...
  ],
  "meta": { "api_version": "v1", "count": 12 }
}

GET /api/v1/compliance/esa_programs/:state_abbreviation

Returns the ESA detail for one state. 404 if the state exists but has no ESA program.

curl -H "Authorization: Bearer $TOKEN" https://homeschoolfox.com/api/v1/compliance/esa_programs/MO

Fields

  • program_name — the public name of the program
  • amount_cents — typical annual award amount in cents (637500 = $6,375). May be null where no figure is verified. This is not an eligibility signal — read homeschool_access instead.
  • homeschool_access — whether a homeschooling family can reach the money, and at what cost to their legal status:
    • open — the family keeps homeschool status while participating (AL, AR, IN, NC, TX, UT, WY)
    • status_change — the money is reachable, but participating replaces homeschool status for its duration (AZ, FL, LA, MO, NH, SC, WV)
    • closed — no path without enrolling in a public or private school (GA, IA, MS, OH, TN)
    • unclear — not verified, which is different from closed
  • eligibility — long-form prose covering income tests, IEP requirements, certification overhead, etc.
  • url — the state's official program page

The status_change / closed distinction is the whole decision for a family weighing a program, which is why this is an enum and not a boolean. A status_change program pays real money to a family willing to leave the homeschool track; a closed one pays nothing to anyone who is not enrolled in a school.

ESA data lives inside each state's YAML file under the esa: key. Updates flow through the same PR review process as the rest of the compliance data.