v1 · Congress mirror
/docs

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

Bills

Page through the bill mirror, or resolve a single bill by id.

GET /bills

Open →
Members

Resolve a member across Congress-number sessions.

GET /members

Open →
Votes

Roll-call votes with per-member positions resolved to current member records.

GET /votes

Open →
Committees

Names normalized so a hearing matches its committee record.

GET /committees

Open →
Hearings

Linked to bills, members, and committees by foreign keys.

GET /hearings

Open →
Bulk exports

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

Open →

Curl-to-run

Copy-paste a request as-is — substitute your key for $ARCHIVIST_KEY.

One request, five endpoints

Bearer auth required
# 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.
Don't ship a key to the client

Keys are server-to-server; surface them only from environment variables in trusted runtimes. For browser users, proxy through your backend.

Need full error handling? See Errors & limits on the authentication page.