Ca APIassembly.ca.gov ↗
Access California State Assembly event schedules and HLS video stream URLs. Retrieve live and archived legislative session data via two structured endpoints.
What is the Ca API?
The assembly.ca.gov API provides access to California State Assembly event data and video stream metadata across 2 endpoints. The list_events endpoint returns event objects with titles, timestamps, locations, and media slugs for past recordings, while get_event_media resolves those slugs into HLS m3u8 playlist URLs, download links for video, audio, and captions, and poster image paths.
curl -X GET 'https://api.parse.bot/scraper/341c51f3-2253-4983-b6ea-a740168ce92f/list_events?filter=all' \ -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 assembly-ca-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: California State Assembly Events — list events, drill into media."""
from parse_apis.assembly_ca_gov_api import AssemblyCA, EventFilter, MediaNotFound
client = AssemblyCA()
# List past events (those with archived video) and print titles.
for event in client.events.list(filter=EventFilter.PAST, limit=5):
print(event.title, "|", event.date_time)
# Find the first past event that has a media_slug for video lookup.
event = client.events.list(filter=EventFilter.PAST, limit=10).first()
if event is not None and event.media_slug is not None:
# Drill into the media detail using the slug from the event.
try:
media = client.event_media.get(media_slug=event.media_slug)
except MediaNotFound:
print("Media page not available for", event.media_slug)
else:
print(media.title, "|", media.date)
print("Stream:", media.m3u8_url)
for dl in media.downloads:
print(f" {dl.label}: {dl.url}")
print("exercised: events.list / event_media.get")
List events from the California State Assembly. Returns today's events, upcoming events, past events with video links, or all combined. Past events include media_slug values that can be used with get_event_media to retrieve stream URLs. Today and upcoming events include structured start/end times when available via calendar data.
| Param | Type | Description |
|---|---|---|
| filter | string | Filter events by time period. |
{
"type": "object",
"fields": {
"total": "integer count of events returned",
"events": "array of event objects with title, date_time, type, location, start_time, end_time, event_id, media_slug, and description"
},
"sample": {
"data": {
"total": 33,
"events": [
{
"type": "floor_meeting",
"title": "Regular Session",
"end_time": null,
"event_id": "df-event-floor-session-content-20221",
"location": null,
"date_time": "",
"media_slug": null,
"start_time": null,
"description": "The Assembly has adjourned until Monday, August 10th, 2026 at 1:00 p.m."
},
{
"type": "committee_hearing",
"title": "Joint Hearing Select Committee On Cybersecurity And Privacy And Consumer Protection",
"end_time": null,
"event_id": "df-event-committee-hearing-content-20194",
"location": "State Capitol, Room 447",
"date_time": "11:00 a.m.",
"media_slug": null,
"start_time": null,
"description": null
}
]
},
"status": "success"
}
}About the Ca API
Event Listings
The list_events endpoint returns an array of Assembly events filterable by time period using the filter parameter. Each event object includes title, date_time, type, location, start_time, end_time, event_id, media_slug, and description. Past events carry a media_slug value that links directly to archived video content. Today's and upcoming events expose scheduling structure without media slugs, since recordings are not yet available.
Video Stream Metadata
The get_event_media endpoint accepts a media_slug string (e.g., assembly-floor-session-20260806) and returns the full video stream record for that event. The response includes an m3u8_url for HLS playback, a media_type field indicating whether the stream is archive or live, a media_format field distinguishing video from audio, and a downloads array containing labeled download links for MP4 video, MP4 audio, and VTT captions. A media_image field provides the poster thumbnail URL when available.
Coverage and Scope
The API covers California State Assembly proceedings only — floor sessions, committee hearings, and similar legislative events listed on the assembly.ca.gov events page. The total field in list_events responses gives an integer count of how many events matched the applied filter. Media slugs from past events are the bridge between the two endpoints: retrieve slugs from list_events with a past filter, then pass each slug to get_event_media to resolve stream and download URLs.
The Ca API is a managed, monitored endpoint for assembly.ca.gov — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when assembly.ca.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 assembly.ca.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?+
- Embed live or archived Assembly floor session video using the HLS m3u8_url in a custom media player
- Build a legislative calendar app that surfaces today's and upcoming committee hearings using list_events
- Download closed-caption VTT files from get_event_media to generate searchable transcripts of Assembly proceedings
- Archive Assembly session recordings by collecting MP4 download URLs from past events
- Monitor new Assembly events by polling list_events and filtering for recent additions by date_time
- Display poster thumbnails alongside event listings using the media_image field from get_event_media
| 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 California State Assembly website have an official developer API?+
How does the filter parameter in list_events work, and what values does it accept?+
filter parameter is optional and narrows results by time period. You can use it to return today's events, upcoming events, or past events with associated media slugs. Omitting the filter returns all event types combined. Only past events carry media_slug values that can be passed to get_event_media.What exactly does get_event_media return for a live event versus an archived one?+
media_type field in the response will be live for in-progress streams or archive for completed events. Archived events typically include the full downloads array with video, audio, and caption links, while live events expose the m3u8_url for real-time HLS playback. The availability of download links for live events may be limited until the stream ends.Does the API cover California State Senate events or events from other state bodies?+
Does the API support pagination for large event result sets?+
list_events response includes a total integer count but the current spec does not expose pagination parameters such as page or offset. If you need to handle large result windows or page through historical events incrementally, you can fork this API on Parse and revise it to add pagination support.