Ms APIlegislature.ms.gov ↗
Retrieve daily committee meeting schedules for the Mississippi House and Senate via a single normalized API endpoint with UTC times and pagination.
What is the Ms API?
The Mississippi Legislature Schedule API exposes 1 endpoint — get_schedule — that returns all committee meetings for both the Mississippi House of Representatives and State Senate on a given calendar day. Each meeting record includes 7 response fields: a stable event_id, committee name as title, date, start_time_utc in ISO 8601, status, meeting room as location, and paging metadata to walk multi-meeting days.
curl -X GET 'https://api.parse.bot/scraper/9e6573e1-ee8a-4af0-a174-93e8b4d43d2d/get_schedule?date=20261016' \ -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 legislature-ms-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: Mississippi Legislature Schedule — list today's committee meetings."""
from parse_apis.legislature_ms_gov_api import MsLegislature, DateFormatInvalid
client = MsLegislature()
# List today's meetings (date omitted = today in US Central Time), capped.
for meeting in client.meetings.list(limit=10):
room = meeting.location.name
print(f"{meeting.title} ({meeting.institution}) — {room}, {meeting.start_time_utc}")
# Fetch a specific day's schedule and drill into the first meeting.
try:
first_meeting = client.meetings.list(date="20261015", limit=1).first()
except DateFormatInvalid:
print("Bad date format — use YYYYMMDD")
first_meeting = None
if first_meeting is not None:
print(f"Event: {first_meeting.title}")
print(f"Status: {first_meeting.status}")
print(f"Institution: {first_meeting.institution}")
print(f"Location: {first_meeting.location.name}")
if first_meeting.description:
print(f"Notes: {first_meeting.description}")
print("exercised: meetings.list / DateFormatInvalid")
Returns the committee meetings scheduled in both chambers of the Mississippi Legislature for one calendar day, merged and sorted by start time. Each item is one meeting row from the chamber's published committee schedule: the committee name as title, the meeting room as location, agenda notes (hearing subject, joint-meeting note, end time) as description, and start_time_utc converted from Central Time (America/Chicago) to UTC. event_id is a stable hash of chamber, date, listed time, room and title, so it does not change between polls. Status is 'scheduled' until the listed start time has passed, then 'completed'. The Legislature streams only via YouTube, so player_url, stream_url and video_file are always null and duration_minutes is always null. A meeting whose listed time is not a clock time (TBA, WNM, BC, AA, AR) is placed at 00:00 Central and the raw time code is prepended to description. date defaults to the current day in Central Time; the published schedules only cover upcoming meetings and the most recent days, so past dates return an empty list. offset/limit page through the day's items (offset defaults to 0, limit to 50, capped at 200); total is the count on the returned page and total_available the count for the whole day. An empty day is a normal success with items: [] and total 0. Two upstream page fetches per call.
| Param | Type | Description |
|---|---|---|
| date | string | Calendar day in YYYYMMDD form. Omitted = today in US Central Time. Any other format is rejected. |
| limit | integer | Maximum items per page; values above 200 are clamped to 200. |
| offset | integer | Zero-based index of the first item to return within the day's list. Next page is offset + limit while has_more is true. |
{
"type": "object",
"fields": {
"date": "requested day, YYYYMMDD",
"items": "array of meetings: event_id (stable hash), title (committee name), date (YYYY-MM-DD), start_time_utc (ISO 8601 with Z), status (scheduled|completed), institution (house|senate), url (chamber schedule page), player_url/stream_url/video_file (always null), location.name (room or chamber), description (agenda notes or null), duration_minutes (always null)",
"limit": "effective limit after clamping",
"total": "number of items on this page",
"offset": "echoed offset",
"has_more": "boolean, true when offset + limit < total_available",
"total_available": "number of meetings for the whole day"
},
"sample": {
"data": {
"date": "20261104",
"items": [
{
"url": "https://billstatus.ls.state.ms.us/htms/h_sched.htm",
"date": "2026-11-04",
"title": "Drug Policy",
"status": "scheduled",
"event_id": "1e0e06a53aa3f02e",
"location": {
"name": "Room 113"
},
"player_url": null,
"stream_url": null,
"video_file": null,
"description": "Hearing on Kratom",
"institution": "house",
"start_time_utc": "2026-11-04T19:00:00Z",
"duration_minutes": null
}
],
"limit": 50,
"total": 1,
"offset": 0,
"has_more": false,
"total_available": 1
},
"status": "success"
}
}About the Ms API
What the API returns
The get_schedule endpoint merges and sorts committee meetings from both chambers of the Mississippi Legislature into a single list for a requested calendar day. Each item in the items array represents one scheduled meeting and carries a stable event_id hash (useful for deduplication), the committee name as title, the room or location as location, a date field in YYYY-MM-DD format, and start_time_utc in ISO 8601 with a Z suffix so times are unambiguous across time zones. A status field indicates the current state of each meeting.
Input parameters and date handling
The primary input is date, accepted only in YYYYMMDD form — any other format is rejected with an error. When date is omitted, the endpoint defaults to the current day in US Central Time, matching the timezone the Legislature operates in. Paging is controlled with limit (capped at 200) and offset (zero-based). To walk past the first page, increment offset by limit while the has_more field is true; total_available tells you the full count of meetings for that day regardless of page size.
Paging and response metadata
Every response echoes back date, limit, offset, total (items on the current page), total_available (all meetings for the day), and has_more. This makes it straightforward to build a complete daily schedule by iterating pages: fetch until has_more is false. The limit field in the response reflects the effective value after server-side clamping, so callers always know exactly how many items to expect per page.
The Ms API is a managed, monitored endpoint for legislature.ms.gov — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when legislature.ms.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 legislature.ms.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?+
- Build a daily digest of Mississippi legislative committee meetings filtered by chamber or room location.
- Alert legislative staffers or lobbyists when new meetings are added to a specific day's schedule.
- Aggregate
start_time_utcvalues to detect scheduling conflicts or overlapping committee hearings. - Power a public-facing calendar widget showing upcoming Mississippi Senate and House committee activity.
- Track historical meeting frequency by committee using
titleanddateacross multiple days. - Monitor
statuschanges on scheduled meetings to detect postponements or cancellations. - Feed a research dashboard comparing the volume of committee activity across legislative session days.
| 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 the Mississippi Legislature website have an official developer API?+
What does the `get_schedule` endpoint return for a day with no meetings scheduled?+
total_available set to 0, an empty items array, and has_more as false. The date field will echo back the requested day in YYYYMMDD format.Does the API cover bill text, voting records, or legislator profiles?+
Is meeting data available for dates outside the active legislative session?+
total_available will be 0. Historical dates before schedule data was published may similarly return empty results. You can fork the API on Parse and revise it to surface session calendar metadata if you need to distinguish session days from recess days.