Data dictionaries

Office term

One person’s term in one seat: when it began and ended, how they got it and how it ended.

Show samples as
The sample at the end of the page as JSON, or as CSV (format=csv).
Returned by
GET /v1/office-terms, GET /v1/offices/{slug}
Found in
Office (current_holders, terms)
Shapes
The full record is in GET /v1/office-terms. The shorter forms in an office’s current holders leave some fields out; a field that isn’t in every form says where it is.

How it connects

  • office is the seat’s slug (GET /v1/offices/{slug}). person_key is the same for one person across all their terms and seats.
  • contest_id is the election that gave the term; candidate_id links to the candidate when they were on one of our ballots. Appointees and holders elected before 2018 have neither.

Good to know

  • Each re-election is a new term.
  • Dates come from the source (dates_basis sourced) or from the law that sets when terms start (statutory). An end_date taken from the next holder’s start says next_holder.
  • end_date is null while the holder is serving, or until we know when they left.

Fields

FieldTypeMeaningExample
idintegerTerm id.Only in GET /v1/office-terms.1
officestringMatches ^[a-z0-9]+(-[a-z0-9]+)*$The seat’s slug.Only in GET /v1/office-terms.us-house-ca-1
office_namestringThe seat’s name.Only in GET /v1/office-terms.U.S. Representative, California Congressional District 1
statestringor nullTwo capital letters (USPS code)USPS state code.Only in GET /v1/office-terms.CA
namestringThe holder’s name as the source gives it.Doug LaMalfa
person_keystringStable id for the person across terms: bioguide:<id>, ocd-person/<uuid>, or name:<state>:<family>-<given>. Pass as person= to list someone’s terms.name:ca:lamalfa-doug
candidate_idintegeror nullTheir candidate id (GET /v1/candidates/{id}) when they were on one of our ballots.Only in GET /v1/office-terms.73171
bioguide_idstringor nullCongressional Biographical Directory id, for members of Congress.Only in GET /v1/office-terms.H001068
openstates_person_idstringor nullOpen States person id (as in GET /v1/officeholders).Only in GET /v1/office-terms.—
partystringor nullParty when the term began.Republican
party_changesarray of objectParty switches during the term.Only in GET /v1/office-terms.—
party_changes[].onstringYYYY-MM-DDDate of the switch.Only in GET /v1/office-terms.—
party_changes[].party_slugstringThe new party.Only in GET /v1/office-terms.—
howstringHow the term began.elected, special_election, appointed, succeeded, retained, holdover, other meaningselected
start_datestringor nullYYYY-MM-DDWhen they took office.2021-01-03
end_datestringor nullYYYY-MM-DDWhen they left office; null while serving or not known.Only in GET /v1/office-terms.2023-01-03
scheduled_end_datestringor nullYYYY-MM-DDWhen the term was due to end.2023-01-03
end_reasonstringor nullHow the term ended.10 values: meaningsOnly in GET /v1/office-terms.term_ended
dates_basisstringor nullWhere the dates come from.sourced, statutory, next_holder meaningsOnly in GET /v1/office-terms.statutory
election_datestringor nullYYYY-MM-DDThe election that gave the term, if any.Only in GET /v1/office-terms.2020-11-03
contest_idintegeror nullThat election’s contest (GET /v1/contests/{id}).Only in GET /v1/office-terms.109060
district_ocd_idstringor nullThe district version they served from.Only in GET /v1/office-terms.ocd-division/country:us/state:ca/cd:1/plan:2020
district_idintegeror nullIts contest district id.Only in GET /v1/office-terms.89089
sourceobjectWhere the term comes from.Only in GET /v1/office-terms.—
source.kindstringWhat kind of source the term comes from: results, official or dataset.results, official, dataset meaningsOnly in GET /v1/office-terms.results
source.namestringWho published the term’s facts: an election office, a legislature, a dataset.Only in GET /v1/office-terms.Federal Election Commission, Federal Elections 2020 (official results)
source.urlstringURLWhere the term’s facts were published.Only in GET /v1/office-terms.https://www.fec.gov/resources/cms-content/documents/federalelections2020.xlsx
source.licensestringor nullFor a dataset, its license (CC0-1.0, public domain).Only in GET /v1/office-terms.—
source.retrieved_onstringor nullYYYY-MM-DDWhen we read a dataset.Only in GET /v1/office-terms.—
updated_atstringISO 8601 date and time with time zoneWhen we last changed this term.Only in GET /v1/office-terms.2026-11-14T03:18:48.42618+00:00

Download every dictionary as CSV or JSON.

CSV: GET /v1/office-terms?format=csv

One row per term: one person in one seat for one term. An empty cell is a null or a value that doesn’t apply. The next page’s cursor comes in the X-Next-Cursor header.

ColumnTypeMeaningExample
term_idintegerTerm id.From id in the JSON.1
officestringMatches ^[a-z0-9]+(-[a-z0-9]+)*$The seat’s slug.From office in the JSON.us-house-ca-1
office_namestringThe seat’s name.From office_name in the JSON.U.S. Representative, California Congressional District 1
statestringcan be emptyTwo capital letters (USPS code)USPS state code.From state in the JSON.CA
namestringThe holder’s name as the source gives it.From name in the JSON.Doug LaMalfa
person_keystringStable id for the person across terms: bioguide:<id>, ocd-person/<uuid>, or name:<state>:<family>-<given>. Pass as person= to list someone’s terms.From person_key in the JSON.name:ca:lamalfa-doug
candidate_idintegercan be emptyTheir candidate id (GET /v1/candidates/{id}) when they were on one of our ballots.From candidate_id in the JSON.73171
bioguide_idstringcan be emptyCongressional Biographical Directory id, for members of Congress.From bioguide_id in the JSON.H001068
openstates_person_idstringcan be emptyOpen States person id (as in GET /v1/officeholders).From openstates_person_id in the JSON.—
partystringcan be emptyParty when the term began.From party in the JSON.Republican
howstringHow the term began.elected, special_election, appointed, succeeded, retained, holdover, other meaningsFrom how in the JSON.elected
start_datestringcan be emptyYYYY-MM-DDWhen they took office.From start_date in the JSON.2021-01-03
end_datestringcan be emptyYYYY-MM-DDWhen they left office; null while serving or not known.From end_date in the JSON.2023-01-03
scheduled_end_datestringcan be emptyYYYY-MM-DDWhen the term was due to end.From scheduled_end_date in the JSON.2023-01-03
end_reasonstringcan be emptyHow the term ended.10 values: meaningsFrom end_reason in the JSON.term_ended
dates_basisstringcan be emptyWhere the dates come from.sourced, statutory, next_holder meaningsFrom dates_basis in the JSON.statutory
election_datestringcan be emptyYYYY-MM-DDThe election that gave the term, if any.From election_date in the JSON.2020-11-03
contest_idintegercan be emptyThat election’s contest (GET /v1/contests/{id}).From contest_id in the JSON.109060
district_ocd_idstringcan be emptyThe district version they served from.From district_ocd_id in the JSON.ocd-division/country:us/state:ca/cd:1/plan:2020
district_idintegercan be emptyIts contest district id.From district_id in the JSON.89089
source_kindstringWhat kind of source the term comes from: results, official or dataset.results, official, dataset meaningsFrom source.kind in the JSON.results
source_namestringWho published the term’s facts: an election office, a legislature, a dataset.From source.name in the JSON.Federal Election Commission, Federal Elections 2020 (official results)
source_urlstringURLWhere the term’s facts were published.From source.url in the JSON.https://www.fec.gov/resources/cms-content/documents/federalelections2020.xlsx
licensestringcan be emptyFor a dataset, its license (CC0-1.0, public domain).From source.license in the JSON.—
updated_atstringISO 8601 date and time with time zoneWhen we last changed this term.From updated_at in the JSON.2026-11-14T03:18:48.42618+00:00

Sample (JSON)

One office term as the API returns it, in GET /v1/office-terms. More in the sample data.

{
  "id": 1,
  "office": "us-house-ca-1",
  "office_name": "U.S. Representative, California Congressional District 1",
  "state": "CA",
  "name": "Doug LaMalfa",
  "person_key": "name:ca:lamalfa-doug",
  "candidate_id": 73171,
  "bioguide_id": null,
  "openstates_person_id": null,
  "party": "Republican",
  "party_changes": [],
  "how": "elected",
  "start_date": "2021-01-03",
  "end_date": "2023-01-03",
  "scheduled_end_date": "2023-01-03",
  "end_reason": "term_ended",
  "dates_basis": "statutory",
  "election_date": "2020-11-03",
  "contest_id": 109060,
  "district_ocd_id": "ocd-division/country:us/state:ca/cd:1/plan:2020",
  "district_id": 89089,
  "source": {
    "kind": "results",
    "name": "Federal Election Commission, Federal Elections 2020 (official results)",
    "url": "https://www.fec.gov/resources/cms-content/documents/federalelections2020.xlsx",
    "license": null,
    "retrieved_on": null
  },
  "updated_at": "2026-11-14T03:18:48.42618+00:00"
}

Sample (CSV)

The same records as the JSON sample, as GET /v1/office-terms?format=csv returns them. Download: CSV, JSON.

term_id,office,office_name,state,name,person_key,candidate_id,bioguide_id,openstates_person_id,party,how,start_date,end_date,scheduled_end_date,end_reason,dates_basis,election_date,contest_id,district_ocd_id,district_id,source_kind,source_name,source_url,license,updated_at
1,us-house-ca-1,"U.S. Representative, California Congressional District 1",CA,Doug LaMalfa,name:ca:lamalfa-doug,73171,,,Republican,elected,2021-01-03,2023-01-03,2023-01-03,term_ended,statutory,2020-11-03,109060,ocd-division/country:us/state:ca/cd:1/plan:2020,89089,results,"Federal Election Commission, Federal Elections 2020 (official results)",https://www.fec.gov/resources/cms-content/documents/federalelections2020.xlsx,,2026-11-14T03:18:48.42618+00:00
3,us-house-ca-2,"U.S. Representative, California Congressional District 2",CA,Jared Huffman,bioguide:H001068,72,H001068,,Democratic,elected,2021-01-03,2023-01-03,2023-01-03,term_ended,statutory,2020-11-03,109036,ocd-division/country:us/state:ca/cd:2/plan:2020,89090,results,"Federal Election Commission, Federal Elections 2020 (official results)",https://www.fec.gov/resources/cms-content/documents/federalelections2020.xlsx,,2026-11-14T03:18:48.42618+00:00
Office term data dictionary · BallotData API