Start with one request
const response = await fetch(
'https://civil.services/api/v1/members.json'
);
if (!response.ok) throw new Error('Request failed');
const { meta, data: members } = await response.json();
console.log(meta.asOf, members);Available endpoints
| Endpoint | Contents |
|---|---|
/api/v1/meta.json | Dataset version, dates and source registry |
/api/v1/members.json | Published member index, current and historical |
/api/v1/members/C001075.json | Full record for one member (Bill Cassidy) |
/api/v1/states.json | States, territories and population metadata |
/api/v1/groups/senate/hispanic-american-senators.json | A documented collection and its sources |
Response format
{
"meta": {
"version": "5c1d25bdcc65",
"asOf": "2026-09-28",
"updatedAt": "2026-09-28",
"schemaVersion": 1
},
"data": []
}Every response has a meta object and a data value. Member IDs are Congressional Bioguide identifiers. A member’s roles array links to chamber-specific profiles. Missing values remain null or absent; they must not be interpreted as negative answers.
Current and historical records
active indicates current service according to the roster snapshot. currentTerm contains the current mandate or null. Historical coverage is selective: it supports the documented collections and restored profiles, rather than a complete publication of every member since 1789.
Updates and caching
The update workflow is scheduled daily and validates data before publishing. Use asOf to check freshness, and retain your last successful response when a request fails. The API provides snapshots, not live legislative events. Cache responses and avoid unnecessary repeat requests.
Attribution and compatibility
Retain the attached sources and their dates, especially for personal demographic assertions. Source licenses differ; see the source registry. These v1 endpoints are a new API. They do not promise compatibility with historical Civil Services npm clients or the former api.civil.services service.