get

vacancies

/vacancies

List currently-vacant legislative seats

Seats whose holder has departed and which no sitting member currently occupies. Poll this to vacate seats explicitly rather than inferring a vacancy from a member disappearing between syncs. Scope is legislative seats only — they are keyed by (state, chamber, district), which is what makes occupancy checkable. Executive and judicial departures are not reported here because their seats have no stable district key.

Parameters

nametyperequireddescription
statequerystringFilter by state code (two-letter lowercase)

Example

curl
curl "https://civiclens.io/api/v1/vacancies"
200 response
{
  "data": {
    "vacancies": [
      {
        "branch": "legislative",
        "chamber": "upper",
        "district": "11",
        "formerMember": "Julian Garrett",
        "level": "state",
        "reason": "deceased",
        "stateCode": "ia",
        "vacatedAt": "2026-09-15T19:45:04.692Z"
      },
      {
        "branch": "legislative",
        "chamber": "lower",
        "district": "77",
        "formerMember": "Price Wallace",
        "level": "state",
        "reason": "deceased",
        "stateCode": "ms",
        "vacatedAt": "2026-09-15T19:45:03.583Z"
      },
      {
        "branch": "legislative",
        "chamber": "upper",
        "district": "14",
        "formerMember": "Larry Selders",
        "level": "state",
        "reason": "deceased",
        "stateCode": "la",
        "vacatedAt": "2026-09-15T19:31:51.995Z"
      },
      {
        "branch": "legislative",
        "chamber": "upper",
        "district": "13",
        "formerMember": "Nathan Manning",
        "level": "state",
        "reason": "resigned",
        "stateCode": "oh",
        "vacatedAt": "2026-08-16T03:56:56.185Z"
      },
      {
        "branch": "legislative",
        "chamber": "lower",
        "district": "20",
        "formerMember": "Michelle Maldonado",
        "level": "state",
        "reason": "other",
        "stateCode": "va",
        "vacatedAt": "2026-07-31T05:00:14.395Z"
      },
      {
        "branch": "legislative",
        "chamber": "lower",
        "district": "12",
        "formerMember": "Stephenie Scialabba",
        "level": "state",
        "reason": "other",
        "stateCode": "pa",
        "vacatedAt": "2026-07-31T05:00:11.663Z"
      },
      {
        "branch": "legislative",
        "chamber": "lower",
        "district": "99",
        "formerMember": "Ajay Pittman",
        "level": "state",
        "reason": "other",
        "stateCode": "ok",
        "vacatedAt": "2026-07-31T05:00:08.960Z"
      },
      {
        "branch": "legislative",
        "chamber": "lower",
        "district": "113",
        "formerMember": "Vicki Lopez",
        "level": "state",
        "reason": "other",
        "stateCode": "fl",
        "vacatedAt": "2026-07-31T05:00:03.481Z"
      },
      {
        "branch": "legislative",
        "chamber": "lower",
        "district": "Cheshire 1",
        "formerMember": "Dylan Germana",
        "level": "state",
        "reason": "resigned",
        "stateCode": "nh",
        "vacatedAt": "2026-07-17T22:09:18.680Z"
      },
      {
        "branch": "legislative",
        "chamber": "lower",
        "district": "Coos 6",
        "formerMember": "Mike Murphy",
        "level": "state",
        "reason": "other",
        "stateCode": "nh",
        "vacatedAt": "2026-07-17T22:09:18.500Z"
      },
      {
        "branch": "legislative",
        "chamber": "lower",
        "district": "114",
        "formerMember": "Ken Waller",
        "level": "state",
        "reason": "deceased",
        "stateCode": "mo",
        "vacatedAt": "2026-07-17T22:09:18.338Z"
      },
      {
        "branch": "legislative",
        "chamber": "lower",
        "district": "110",
        "formerMember": "Justin Sparks",
        "level": "state",
        "reason": "other",
  …

A live response, trimmed to the first records. sourceUrl values are shown redacted in documentation; the API returns the full value.

Responses

200Currently-vacant seats
500Internal server error

Try it

PlaygroundLive responses from the real API
curl
curl "https://civiclens.io/api/v1/vacancies"