Compliance API

Endpoint — states

The core compliance data: one record per U.S. jurisdiction (50 states + DC).

GET /api/v1/compliance/states

Returns a summary record for every jurisdiction. The summary deliberately omits the long-form prose fields (special_notes, withdrawal_process, etc.) to keep the payload small for list views.

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

Response (truncated):

{
  "data": [
    {
      "abbreviation": "AK",
      "name": "Alaska",
      "compulsory_age_range": "7-16",
      "notice": { "required": false, "type": "none" },
      "requirements": { "hours_per_year": null, ... }
    },
    ...
  ],
  "meta": { "api_version": "v1", "count": 51 }
}

GET /api/v1/compliance/states/:abbreviation

The full record for one jurisdiction. The :abbreviation is the standard two-letter postal code, case-insensitive.

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

Response (excerpted):

{
  "data": {
    "abbreviation": "MO",
    "name": "Missouri",
    "compulsory_age_range": "7-17",
    "notice": { "required": false, "type": "none" },
    "requirements": {
      "hours_per_year": 1000,
      "core_hours_per_year": 600,
      "secondary_hours_per_year": null,
      "days_per_year": null,
      "hours_per_day": null,
      "subjects": ["reading", "math", "social studies", "language arts", "science"]
    },
    "assessment": { "type": "none", "frequency": "none", "description": "..." },
    "portfolio": { "required": true, "description": "..." },
    "reporting": { "frequency": "none" },
    "esa": { "program_name": "MOScholars (...)", "amount_cents": 637500, ... },
    "tax_credit_summary": null,
    "umbrella_summary": null,
    "filing_deadlines": {},
    "required_documents": [],
    "special_notes": "...",
    "withdrawal_process": null,
    "source_urls": [
      { "name": "HSLDA", "url": "https://hslda.org/legal/missouri" },
      { "name": "Families for Home Education (FHE-MO)", "url": "https://fhe-mo.org/" }
    ],
    "editorial": {
      "schema_version": "1",
      "last_verified_at": "2026-05-12",
      "needs_review": false,
      "verification_notes": null
    }
  },
  "meta": {
    "api_version": "v1",
    "version": 1,
    "released_at": "2026-05-12",
    "git_sha": "ec3bc5a2"
  }
}

Optional query params

  • ?as_of=YYYY-MM-DD — return the snapshot active on that date
  • ?version=N — pin to a specific monotonic version number

You can only pass one at a time. Both 404 if the requested date predates the first snapshot or the version doesn't exist.

GET /api/v1/compliance/states/:abbreviation/versions

Returns the version history for one state, newest-first. Each version row carries the version number, release date, short SHA, commit author, commit message (change_summary), and a diff block listing top-level keys added / removed / changed vs the previous version.

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

Optional ?limit=N (default 50, max 200).

GET /api/v1/compliance/states/:abbreviation/versions/:version_number

Returns the historical payload at a specific version — byte-identical to what GET /states/MO?version=N returns. Useful for explicit pinning where you want the version number visible in the URL.