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
| name | type | required | description |
|---|---|---|---|
| statequery | string | — | Filter 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"