Mi APIhouse.mi.gov ↗
Retrieve Michigan House of Representatives session and committee meeting schedules for any calendar day, including local/UTC times and live or archived media links.
What is the Mi API?
The house.mi.gov API exposes 1 endpoint — get_schedule — that returns the full Michigan House TV daily calendar: every House session and committee meeting scheduled for a given date, with 8 response fields per event including local start time, a UTC-normalized timestamp, event status, and media links for live or archived coverage.
curl -X GET 'https://api.parse.bot/scraper/44d03ea2-58ad-4393-acaf-e15e23c3794f/get_schedule?date=20261001' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace house-mi-gov-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Michigan House TV Schedule — fetch a day's events."""
from parse_apis.house_mi_gov_api import HouseMiGov, InvalidDateFormat
client = HouseMiGov()
# List all House TV events for a specific day, capped at 10 items.
for event in client.events.list(date="20261001", limit=10):
print(event.title, event.time, event.status)
if event.location is not None:
print(" ", event.location.full_name)
# Drill into a single event to inspect media and metadata.
event = client.events.list(date="20261001", limit=1).first()
if event is not None:
print(event.event_id, event.start_time_utc)
print("Video:", event.video_file)
print("Category:", event.category, "| Series:", event.series_title)
if event.description is not None:
print("Agenda:", event.description)
# Handle an invalid date format gracefully.
try:
client.events.list(date="2026-08-01", limit=1).first()
except InvalidDateFormat as e:
print("Bad date format:", e.message)
print("exercised: events.list / InvalidDateFormat")
Returns the Michigan House of Representatives House TV schedule for one calendar day (America/Detroit): every House session and House committee meeting listed on the House calendar for that date, sorted by start time. Each item carries the displayed local start time plus a UTC conversion, the room/building, the posted agenda text when present (otherwise null), a status of live, scheduled or completed, and media links. Media resolution: when the Video Archive already lists a recording for the event that day, video_file is the archived MP4 and player_url is the archive player page (status completed); otherwise video_file is the YouTube live-stream link the calendar points to and player_url is the House TV player page, with status scheduled before the listed start time, live after it on the current day, and completed for past days. The site publishes no HLS manifests, durations or thumbnails, so stream_url, duration, duration_minutes and thumbnail are always null. Mackinac Room bookings, the untimed QuadBox multi-view channel and non-House events are not returned. Pagination is local: offset skips that many items and limit caps the page; omitting limit returns all remaining items. total is the page size, total_available the day's full count, has_more whether items remain. A day with nothing scheduled returns an empty items list with status success. Two requests per call (calendar week + archive lookup), one when the day has no events.
| Param | Type | Description |
|---|---|---|
| daterequired | string | Calendar day as YYYYMMDD, interpreted in America/Detroit. Echoed back as data.date. |
| limit | integer | Maximum items to return on this page (minimum 1). Omitted = all remaining items. |
| offset | integer | Number of items to skip from the start of the day's list. |
{
"type": "object",
"fields": {
"date": "echo of the requested day as YYYYMMDD",
"items": "array of event objects: event_id, title, date (YYYY-MM-DD), time (displayed local start), start_time_utc (ISO-8601 Z), status (live|scheduled|completed), institution (house), type (session|committee), description (agenda text or null), duration/duration_minutes (always null), url (House TV calendar page), player_url, stream_url (always null), video_file (archived MP4 or YouTube live link), location {name, type, fullName} or null, thumbnail (null), category, series_title, program_id (archive video id or null)",
"limit": "page size applied (page length when limit omitted)",
"total": "number of items on this page",
"offset": "offset applied",
"has_more": "true when items remain after this page",
"total_available": "number of events for the day before pagination"
},
"sample": {
"data": {
"date": "20261001",
"items": [
{
"url": "https://house.mi.gov/Calendar?from=HouseTV",
"date": "2026-10-01",
"time": "12:00 PM",
"type": "session",
"title": "House Session",
"status": "completed",
"category": "House Session",
"duration": null,
"event_id": "1149_0_196",
"location": {
"name": "House Session Floor",
"type": "State Capitol Building",
"fullName": "House Session Floor, State Capitol Building, Lansing, MI"
},
"thumbnail": null,
"player_url": "https://house.mi.gov/VideoArchivePlayer?video=Session-100126.mp4",
"program_id": "Session-100126",
"stream_url": null,
"video_file": "https://www.house.mi.gov/ArchiveVideoFiles/Session-100126.mp4",
"description": null,
"institution": "house",
"series_title": "House Session",
"start_time_utc": "2026-10-01T16:00:00Z",
"duration_minutes": null
}
],
"limit": 1,
"total": 1,
"offset": 0,
"has_more": false,
"total_available": 1
},
"status": "success"
}
}About the Mi API
What the API Returns
The get_schedule endpoint returns all House TV schedule entries for a single calendar day in the America/Detroit timezone. Each call requires a date parameter formatted as YYYYMMDD. The response includes a total_available count of events for that day, an items array of event objects, and pagination metadata (limit, offset, has_more).
Event Object Fields
Each item in the items array contains: event_id, title, date (YYYY-MM-DD), time (displayed local start time), start_time_utc (ISO-8601 UTC timestamp), status (e.g. live, archived, scheduled), and media link fields for accessing broadcast coverage. Events are sorted by start time, covering both floor sessions and committee meetings listed on the official House calendar.
Pagination
When a day has many events, use the optional limit and offset integer parameters to page through results. Omitting limit returns all events for the day in a single response. The has_more field signals whether additional items remain beyond the current page, and total_available gives the full event count before any pagination is applied.
Scope and Freshness
Coverage is limited to the Michigan House of Representatives calendar. The API reflects scheduled sessions and committee meetings as listed on house.mi.gov for the requested date. Data is tied to what appears on the official House TV schedule; Senate schedules and legislative bill data are not included.
The Mi API is a managed, monitored endpoint for house.mi.gov — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when house.mi.gov changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official house.mi.gov API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Display today's Michigan House committee meeting schedule in a civic information app using the
dateparameter set to the current date - Build a calendar widget that shows House session start times in both local (America/Detroit) and UTC using
timeandstart_time_utcfields - Monitor which House events are currently live by filtering
itemson thestatusfield - Archive links to past committee meeting broadcasts by storing the media link fields from historical
daterequests - Alert subscribers when new events appear on a given day by comparing
total_availableacross periodic calls - Paginate through a busy legislative day's full schedule using
limitandoffsetwithout loading all events at once
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does house.mi.gov provide an official developer API?+
What does the `status` field in each event object indicate?+
status field reflects the broadcast state of the event as shown on the House TV schedule — for example, whether the event is currently live, has an archived recording available, or is upcoming. This lets you filter the items array to surface only events with available media without checking each media link individually.Does the API cover Michigan Senate schedules or legislative bill data?+
How far back or forward can I request dates?+
date parameter accepts any YYYYMMDD value, but available data depends on what house.mi.gov publishes for that date. Future dates return scheduled events as they appear on the official calendar; past dates return events including archived media status if present. Dates with no scheduled House activity will return an empty items array with total_available of 0.Can I retrieve schedules for multiple days in one request?+
get_schedule call targets a single calendar day specified by the required date parameter. You can fork this API on Parse and revise it to add a date-range endpoint that batches multiple daily responses.