API reference
The Archivist is a bearer-authenticated REST API over an hourly-normalized mirror of US government records. Pick a section to the left — start with authentication if you don’t yet have a key.
Endpoints
Page through the bill mirror, or resolve a single bill by id.
GET /bills
Resolve a member across Congress-number sessions.
GET /members
Roll-call votes with per-member positions resolved to current member records.
GET /votes
Names normalized so a hearing matches its committee record.
GET /committees
Linked to bills, members, and committees by foreign keys.
GET /hearings
Mirror the full bills dataset as one gzip-encoded NDJSON stream. One call, one stream — no query parameters or cursor to follow.
GET /v1/exports/bills
Curl-to-run
Copy-paste a request as-is — substitute your key for $ARCHIVIST_KEY.
One request, five endpoints
# Bills — page 1
curl https://api.archivist.dev/bills \
-H "Authorization: Bearer $ARCHIVIST_KEY"
# Members — all from California
curl 'https://api.archivist.dev/members?state=CA' \
-H "Authorization: Bearer $ARCHIVIST_KEY"
# Votes — today’s passed House votes
curl 'https://api.archivist.dev/votes?chamber=house&result=passed' \
-H "Authorization: Bearer $ARCHIVIST_KEY"
# Committees — 118th Congress House committees
curl 'https://api.archivist.dev/committees?chamber=house&congress=118' \
-H "Authorization: Bearer $ARCHIVIST_KEY"
# Hearings — upcoming Judiciary
curl 'https://api.archivist.dev/hearings?committee_id=hsju00' \
-H "Authorization: Bearer $ARCHIVIST_KEY"A few rules of the road
- Stable ids. Bill and member ids are stable across Congress-number sessions — no orphaned references when one rolls into the next.
- Cursor pagination. Every list endpoint returns nextCursor. Pass it back as ?cursor=… for the next page; pages remain stable as new data lands.
- Caching. responses are Cache-Control public/max-age=60; the mirror refreshes within an hour of upstream.
- Tiers. the paid beta tier lifts the free-tier rate limits and unlocks diff subscriptions.
Keys are server-to-server; surface them only from environment variables in trusted runtimes. For browser users, proxy through your backend.