Committees & hearings

Five endpoints: search committees, fetch one, list its members, list its hearings, and sweep hearings across every committee in a state.

All paths are relative to https://delilah-api.jsv21b.workers.dev and require an X-API-Key header (Authentication). Field names in the samples are exactly what the API returns; values written as <type> are placeholders.

List committees

GET/v1/committees

Search committees by jurisdiction, chamber, or name. Results are ordered by state, chamber, then committee name.

ParameterTypeRequiredDescription
statestringOptional2-letter postal code (e.g. FL), DC, or US for Congress.
chamberstringOptionalChamber name match.
qstringOptionalSubstring match on the committee name.
limitintegerOptionalMax rows. Defaults to 100, clamped to 500.
bash
curl "https://delilah-api.jsv21b.workers.dev/v1/committees?state=FL&chamber=Senate" \
  -H "X-API-Key: dk_live_…"
json
{
  "data": [
    {
      "committee_id": "<int>",
      "state_abbr": "<string>",
      "chamber": "<string>",
      "committee_name": "<string>",
      "committee_type": "<string>",
      "description": "<string>",
      "chair_name": "<string>",
      "vice_chair_name": "<string>",
      "members_count": "<int>",
      "website_url": "<string>",
      "meeting_schedule": "<string>"
    }
  ]
}

Get one committee

GET/v1/committees/{committee_id}

The same record fetched by id, as { data: {…} }. Returns 404 not_found when no committee carries that id.

ParameterTypeRequiredDescription
committee_idinteger (path)RequiredThe committee identifier. Non-integer values return 400 bad_request.
bash
curl "https://delilah-api.jsv21b.workers.dev/v1/committees/1234" \
  -H "X-API-Key: dk_live_…"
json
{
  "data": {
    "committee_id": "<int>",
    "state_abbr": "<string>",
    "chamber": "<string>",
    "committee_name": "<string>",
    "committee_type": "<string>",
    "description": "<string>",
    "chair_name": "<string>",
    "vice_chair_name": "<string>",
    "members_count": "<int>",
    "website_url": "<string>",
    "meeting_schedule": "<string>"
  }
}

Committee members

GET/v1/committees/{committee_id}/members

The committee roster, ordered by role then name. member_role is the seat — chair, vice chair, or member — and each people_id keys into /v1/legislators/{people_id}.

ParameterTypeRequiredDescription
committee_idinteger (path)RequiredThe committee identifier. Non-integer values return 400 bad_request.
bash
curl "https://delilah-api.jsv21b.workers.dev/v1/committees/1234/members" \
  -H "X-API-Key: dk_live_…"
json
{
  "data": [
    {
      "committee_id": "<int>",
      "people_id": "<int>",
      "name": "<string>",
      "party_id": "<int>",
      "party_name": "<string>",
      "member_role": "<string>"
    }
  ]
}

Committee hearings

GET/v1/committees/{committee_id}/hearings

Hearings held by this committee, most recent first, capped at 100 rows. The committee is resolved to its jurisdiction and name first, so an unknown id returns 404 not_found rather than an empty list.

ParameterTypeRequiredDescription
committee_idinteger (path)RequiredThe committee identifier. Non-integer values return 400 bad_request.
bash
curl "https://delilah-api.jsv21b.workers.dev/v1/committees/1234/hearings" \
  -H "X-API-Key: dk_live_…"
json
{
  "data": [
    {
      "hearing_id": "<int>",
      "state_code": "<string>",
      "chamber": "<string>",
      "committee_name": "<string>",
      "hearing_title": "<string>",
      "hearing_description": "<string>",
      "hearing_date": "<date>",
      "hearing_time": "<string>",
      "hearing_datetime": "<timestamp>",
      "is_live": "<bool>",
      "status": "<string>",
      "hearing_location": "<string>",
      "room_number": "<string>",
      "video_url": "<string>",
      "video_source_type": "<string>",
      "video_duration_seconds": "<int>",
      "audio_url": "<string>",
      "transcript_url": "<string>",
      "transcript_text": "<string>",
      "transcript_format": "<string>",
      "has_captions": "<bool>",
      "participants": "<json>",
      "bills_discussed": "<json>",
      "topics": "<json>",
      "tags": "<json>",
      "source_url": "<string>",
      "scrape_date": "<timestamp>",
      "last_updated": "<timestamp>",
      "view_count": "<int>",
      "transcript_extracted_at": "<timestamp>",
      "transcript_polished_json": "<json>",
      "transcript_polished_at": "<timestamp>"
    }
  ]
}

The media fields — video_url, audio_url, transcript_url, transcript_text — are present for the states that publish them and null elsewhere; the same is true of the polished-transcript fields. is_live and statusare what you watch for a “happening now” view, and bills_discussed is the link back to bills.

Hearings across committees

GET/v1/hearings

The same hearing rows, swept across every committee rather than one — the endpoint to poll for “what is on the calendar in this state”. Ordered by hearing date, most recent first.

ParameterTypeRequiredDescription
statestringOptional2-letter postal code (e.g. FL), DC, or US for Congress.
sincestring (date-time)OptionalISO-8601 date or timestamp. Returns hearings dated on or after it; non-ISO values return 400.
limitintegerOptionalMax rows. Defaults to 100, clamped to 500.
bash
curl "https://delilah-api.jsv21b.workers.dev/v1/hearings?state=FL&since=2026-08-01" \
  -H "X-API-Key: dk_live_…"
json
{
  "data": [
    {
      "hearing_id": "<int>",
      "state_code": "<string>",
      "chamber": "<string>",
      "committee_name": "<string>",
      "hearing_title": "<string>",
      "hearing_description": "<string>",
      "hearing_date": "<date>",
      "hearing_time": "<string>",
      "hearing_datetime": "<timestamp>",
      "is_live": "<bool>",
      "status": "<string>",
      "hearing_location": "<string>",
      "room_number": "<string>",
      "video_url": "<string>",
      "video_source_type": "<string>",
      "video_duration_seconds": "<int>",
      "audio_url": "<string>",
      "transcript_url": "<string>",
      "transcript_text": "<string>",
      "transcript_format": "<string>",
      "has_captions": "<bool>",
      "participants": "<json>",
      "bills_discussed": "<json>",
      "topics": "<json>",
      "tags": "<json>",
      "source_url": "<string>",
      "scrape_date": "<timestamp>",
      "last_updated": "<timestamp>",
      "view_count": "<int>",
      "transcript_extracted_at": "<timestamp>",
      "transcript_polished_json": "<json>",
      "transcript_polished_at": "<timestamp>"
    }
  ]
}