Discover/SC State House API
live

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.

Endpoint health
monitored
get_schedule
Checks pendingself-healing
Endpoints
1
Updated
2h ago

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.

This call costs10 credits / call— charged only on success
Try it
Calendar date in America/New_York as YYYYMMDD (e.g. 20261023). Omitted means today plus all later scheduled broadcasts.
Maximum number of items in the page; values above 100 are clamped to 100.
Number of items to skip before the page.
→ api.parse.bot/scraper/1acf1205-2f5b-48ad-b365-3363ff2c61d4/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Call it over HTTPgrab a free API key at signup
curl -X GET 'https://api.parse.bot/scraper/1acf1205-2f5b-48ad-b365-3363ff2c61d4/get_schedule?date=20261023' \
  -H 'X-API-Key: $PARSE_API_KEY'
Python SDK · recommended

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")
All endpoints · 1 totalmissing one? ·

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.

Input
ParamTypeDescription
datestringCalendar date in America/New_York as YYYYMMDD (e.g. 20261023). Omitted means today plus all later scheduled broadcasts.
limitintegerMaximum number of items in the page; values above 100 are clamped to 100.
offsetintegerNumber of items to skip before the page.
Response
{
  "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.

Reliability & maintenance

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?+
It's built not to. Every endpoint is health-checked on a schedule with automated test probes. When the source site changes and a check fails, the API is automatically queued for repair and re-verified — that's the self-healing layer. Each API page shows when its endpoints were last verified. And because marketplace APIs are shared, any fix reaches everyone using it.
Is this an official API from the source site?+
No — Parse APIs are independent, managed REST wrappers over publicly available data. That is the point: where a site has no official API (or only a limited one), Parse gives you a maintained, monitored endpoint for that data and keeps it working as the site changes — so you get a stable contract over a source that never promised one.
Can I fix or extend this API myself if I need a new endpoint or field?+
Yes — and you don't have to wait on us. This API was generated by the Parse agent, which stays attached. Describe the change in plain English ("add an endpoint that returns reviews", "fix the price field") in the revise box on the API page or via the revise_api MCP tool, and the agent rebuilds it against the live site in minutes. Contributing the change back to the public API is free.
What happens if I call an endpoint that has an issue?+
Errors are machine-readable: a bad call returns a clean status with the list of available endpoints and a repair hint, so an agent (or you) can recover or trigger a fix instead of failing silently. Confirmed failures feed the automatic repair queue.
Common use cases
  • Build a calendar widget that displays today's South Carolina Legislature floor sessions and committee meetings using the title, time, and type fields.
  • Monitor live broadcasts in real time by polling get_schedule without a date parameter and checking for items with start_time_utc close to the current moment.
  • Aggregate archived recordings by iterating over past dates and collecting event_id and HLS media references for offline storage or analysis.
  • Classify legislative activity by filtering the type field 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_available across periodic calls to the same date.
  • Populate a legislative transparency dashboard with watch-page links and UTC-normalized start times for cross-timezone display.
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo2005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000100 req/min
Team$300/mo20,000300 req/min
Company$1,000/mo100,000500 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.

Frequently asked questions
Does scstatehouse.gov have an official developer API?+
No. The South Carolina State House website at scstatehouse.gov does not publish a public developer API or documented data feed for its broadcast schedule. This API provides structured programmatic access to that schedule data.
What does the `get_schedule` endpoint return for a date with no broadcasts?+
The response returns the same envelope structure — 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?+
Each part of a multi-part meeting is a separate item in the 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?+
Not currently. The API accepts one 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?+
Not currently. Returned fields cover scheduling and media metadata: 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.
Page content last updated . Spec covers 1 endpoint from scstatehouse.gov.
Related APIs in Government PublicSee all →