SC State House APIscstatehouse.gov ↗
Retrieve scheduled, live, and archived South Carolina Legislature broadcasts by date. Includes HLS media references, UTC start times, and watch-page links.
What is the SC State House API?
The scstatehouse.gov API exposes 1 endpoint — get_schedule — that returns all South Carolina Legislature broadcasts for a given calendar date, covering floor sessions, committee meetings, and press conferences. Each response item includes up to 9 fields: event_id, type, title, date, wall-clock time, UTC start time, and media references. Multi-part recordings surface as distinct items with suffixed event IDs such as 16641-part-2.
curl -X GET 'https://api.parse.bot/scraper/1acf1205-2f5b-48ad-b365-3363ff2c61d4/get_schedule?date=20261023' \ -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 scstatehouse-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: SC Legislature schedule — list broadcasts for a date."""
from parse_apis.scstatehouse_gov_api import SCStatehouse, InputFormatInvalid
client = SCStatehouse()
# List today's (and future) broadcasts, capped at 10 items.
for broadcast in client.broadcasts.list(limit=10):
print(broadcast.title, "|", broadcast.date, broadcast.time)
print(f" {broadcast.institution} / {broadcast.category} — {broadcast.status}")
print(f" Location: {broadcast.location.full_name}")
if broadcast.video_file:
print(f" Archive: {broadcast.video_file}")
# Fetch broadcasts for a specific date with error handling.
try:
first = client.broadcasts.list(date="20261009", limit=1).first()
except InputFormatInvalid:
print("Invalid date format — use YYYYMMDD")
first = None
if first is not None:
print(f"\nFirst broadcast on 2026-10-09: {first.title}")
print(f" Starts: {first.start_time_utc} Event ID: {first.event_id}")
print(f" Watch: {first.url}")
print("exercised: broadcasts.list / InputFormatInvalid")
Returns the broadcasts of the South Carolina Legislature for one America/New_York calendar date, one item per meeting part (a meeting recorded in several parts yields event_ids like 16641, 16641-part-2). When date is omitted, data.date is today and items contain today's broadcasts plus every later broadcast still listed on the site's schedule; when date is given, items are only that day. Future listings come from the site's broadcast schedule; live state and media come from the player schedule; past dates the player schedule no longer covers are read from the historical archive (a larger, slower fetch). status is scheduled, live, or completed; category is session, committee, or press_conference; institution is house, senate, or joint. stream_url is present on scheduled/live items and video_file on completed items; description, duration, duration_minutes, format, thumbnail, and the media fields are omitted when not applicable. Items are sorted by start_time_utc then event_id and sliced by offset and limit (limit clamps to 100); total is the item count in this page, total_available the count before paging, and has_more is true only when offset + total < total_available. A date with no broadcasts returns an empty items list. Rows canceled on the site are excluded, and the audio-only control of a meeting is not a separate item.
| Param | Type | Description |
|---|---|---|
| date | string | Calendar date in America/New_York as YYYYMMDD (e.g. 20261023). Omitted means today plus all later scheduled broadcasts. |
| limit | integer | Maximum number of items in the page; values above 100 are clamped to 100. |
| offset | integer | Number of items to skip before the page. |
{
"type": "object",
"fields": {
"date": "requested date (YYYYMMDD), or today in America/New_York when omitted",
"items": "array of broadcast items: event_id, type, title, date (YYYY-MM-DD), time (site wall-clock text), start_time_utc (ISO-8601 Z), institution, category, status, location {name, type, fullName}, url, player_url, and when applicable format, thumbnail, stream_url, video_file, description, duration, duration_minutes",
"limit": "limit applied (after clamping)",
"total": "number of items in this page (equals items.length)",
"offset": "offset applied",
"has_more": "true only when offset + total < total_available",
"total_available": "number of items for the date before paging"
},
"sample": {
"data": {
"date": "20261023",
"items": [
{
"url": "https://www.scstatehouse.gov/video/stream.php?key=16636&audio=0",
"date": "2026-10-23",
"time": "10:30 am",
"type": "event",
"title": "Government Efficiency and Legislative Oversight Committee",
"format": "video",
"status": "scheduled",
"category": "committee",
"event_id": "16636",
"location": {
"name": "Blatt Room 110",
"type": "room",
"fullName": "Blatt Room 110"
},
"thumbnail": "https://www.scstatehouse.gov/video/images/2000000235.png",
"player_url": "https://www.scstatehouse.gov/video/stream.php?key=16636&audio=0",
"stream_url": "https://media1.scstatehouse.gov/adaptive/BL-110.smil/playlist.m3u8",
"institution": "house",
"start_time_utc": "2026-10-23T14:30:00Z"
}
],
"limit": 100,
"total": 1,
"offset": 0,
"has_more": false,
"total_available": 1
},
"status": "success"
}
}About the SC State House API
What the API returns
The get_schedule endpoint returns an array of broadcast items for a single America/New_York calendar date. Each item in items carries an event_id (unique per broadcast part), a type classifying the event (floor session, committee, press conference, etc.), a human-readable title, a date in YYYY-MM-DD format, a time string as it appears on the schedule page, a start_time_utc in ISO-8601 format, and references for the watch page and HLS media stream. When a meeting is recorded in multiple parts, each part appears as a separate item with a suffixed event_id.
Date and pagination parameters
The date parameter accepts a string in YYYYMMDD format interpreted in the America/New_York timezone. When omitted, the response reflects today's date and includes any broadcasts currently scheduled or later that day. Use limit (clamped to a maximum of 100) and offset to page through results. The response envelope always includes total_available (the full count for that date before paging), has_more (a boolean indicating whether additional pages exist), the applied limit, and the applied offset.
Coverage scope
Broadcasts span scheduled future events, live streams in progress, and archived recordings from past sessions. The South Carolina State House does not maintain a separate public developer API; this API is the structured way to access that broadcast schedule data programmatically. Data is scoped to one date per request, so multi-day queries require one call per date.
The SC State House API is a managed, monitored endpoint for scstatehouse.gov — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when scstatehouse.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 scstatehouse.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 calendar widget that displays today's South Carolina Legislature floor sessions and committee meetings using the
title,time, andtypefields. - Monitor live broadcasts in real time by polling
get_schedulewithout adateparameter and checking for items withstart_time_utcclose to the current moment. - Aggregate archived recordings by iterating over past dates and collecting
event_idand HLS media references for offline storage or analysis. - Classify legislative activity by filtering the
typefield to distinguish floor sessions from committee meetings and press conferences. - Track multi-part meetings by grouping items that share a base
event_id(e.g.,16641,16641-part-2) to reconstruct full session timelines. - Alert subscribers when new broadcasts are added to a future date by comparing
total_availableacross periodic calls to the samedate. - Populate a legislative transparency dashboard with watch-page links and UTC-normalized start times for cross-timezone display.
| 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 scstatehouse.gov have an official developer API?+
What does the `get_schedule` endpoint return for a date with no broadcasts?+
date, items, limit, offset, total, total_available, and has_more — with items as an empty array and total_available equal to zero. No error is raised for a valid date that has no scheduled broadcasts.How does multi-part meeting pagination interact with the `offset` parameter?+
items array, so offset and limit operate at the individual broadcast-part level, not at the meeting level. A limit of 5 may return parts 1 and 2 of one meeting alongside three other distinct events depending on the day's schedule.Can I retrieve broadcasts across a date range in a single request?+
date per request; multi-day coverage requires one call per date. You can fork this API on Parse and revise it to add a date-range endpoint that loops across dates and merges results.Does the API expose legislator names, bill numbers, or committee membership linked to each broadcast?+
event_id, type, title, date, time, start_time_utc, and media references. Legislative detail such as bill numbers or member rosters is not included. You can fork this API on Parse and revise it to add an endpoint that retrieves supplementary legislative details for a given session.