Data dictionaries

Endorsement

One endorser endorsing one choice in one contest, with what they said and where they published it.

Returned by
GET /v1/endorsements, GET /v1/endorsements/{id}, GET /v1/contests/{id}, GET /v1/candidates/{id}, GET /v1/elections/{slug}/export
Found in
Candidate (contests[].endorsements), Position (picks)
Shapes
The full record is in GET /v1/endorsements/{id}. The shorter forms in GET /v1/endorsements, a candidate’s endorsements and a position’s picks leave some fields out; a field that isn’t in every form says where it is.

How it connects

  • An endorsement links an endorser to one choice in one contest. A ranked-choice ranking or a vote-for-N slate is several endorsements, one per choice.
  • Its id is stable: GET /v1/endorsements/{id}/history lists every change to it, and GET /v1/changes every change to all of them.

Good to know

  • added_by says how it got here: a researched data load, staff entry, or our automatic watch of the endorser’s own page.
  • statement, source_url and published_on are null where the endorser’s list gives none.
  • stage comes from the election: general, primary or runoff.

Fields

FieldTypeMeaningExample
idintegerEndorsement id.Only in GET /v1/endorsements/{id} and GET /v1/endorsements.51411
rankintegeror nullRanked choice: the rank the endorser gave; null otherwise.1
statementstringor nullWhat the endorser said.Not in GET /v1/endorsements.—
source_urlstringor nullURLWhere it was published.Not in GET /v1/endorsements.https://berkeleydemocraticclub.com/
published_onstringor nullYYYY-MM-DDWhen it was published.—
retrieved_atstringISO 8601 date and time with time zoneWhen we collected it.Only in GET /v1/endorsements/{id}.2026-11-13T03:09:35.128Z
added_bystringHow the endorsement got here: automatic (added by our automatic watch of the endorser’s own page), staff (entered by hand by BallotData staff) or data_load (loaded in a researched data pass).automatic, staff, data_load meaningsdata_load
stagestringThe election stage the endorsement is for: general, primary or runoff (from the election it is in).general, primary, runoff meaningsgeneral
endorserobjectWho made the endorsement.Not in a position’s picks.—
endorser.idintegerEndorser id.Only in GET /v1/endorsements/{id} and GET /v1/endorsements.6260
endorser.slugstringEndorser slug.Only in GET /v1/endorsements/{id} and GET /v1/endorsements.berkeley-democratic-club
endorser.namestringEndorser name.Only in GET /v1/endorsements/{id} and GET /v1/endorsements.Berkeley Democratic Club
endorser.categoryEndorser categoryThe kind of endorser.Only in GET /v1/endorsements/{id}.—
endorser.descriptionstringor nullAbout the endorser.Only in GET /v1/endorsements/{id}.Chartered Democratic club in Berkeley; endorses in Berkeley city, school and ballot measu…
endorser.website_urlstringor nullURLEndorser’s website.Only in GET /v1/endorsements/{id}.https://berkeleydemocraticclub.com/
endorser.logo_urlstringor nullURLThe endorser’s logo image.Only in GET /v1/endorsements/{id}.—
endorser.statestringor nullTwo capital letters (USPS code)Home state; null for national endorsers.Only in GET /v1/endorsements/{id}.CA
endorser.partyPartyor nullThe party, for a party or party club.Only in GET /v1/endorsements/{id}.—
contestContestThe contest, with its district and election.Only in GET /v1/endorsements/{id} and GET /v1/endorsements.—
choiceChoiceThe choice endorsed, with its candidate.Only in GET /v1/endorsements/{id} and GET /v1/endorsements.—
contest.idintegerContest id.Only in GET /v1/endorsements.92
contest.titlestringTitle as printed on the ballot.Only in GET /v1/endorsements.Member of City Council, District 1, City of Berkeley
electionobjectThe contest’s election.Only in GET /v1/endorsements.—
election.idintegerElection id.Only in GET /v1/endorsements.1
election.slugstringElection slug.Only in GET /v1/endorsements.ca-2026-11-03-general
election.datestringYYYY-MM-DDElection day.Only in GET /v1/endorsements.2026-11-03
choice.idintegerChoice id.Only in GET /v1/endorsements.194
choice.labelstringAs printed: the candidate’s ballot name, or Yes / No.Only in GET /v1/endorsements.Ross Bernet
choice.measure_answerstringor nullyes or no for a measure; null for a candidate.yes, no meaningsOnly in GET /v1/endorsements.yes
endorsement_idintegerEndorsement id.Only in a candidate’s endorsements and a position’s picks.1485
choice_idintegerThe Choice endorsed.Only in a position’s picks.194
labelstringThat choice’s label.Only in a position’s picks.Ross Bernet
measure_answerstringor nullyes or no for a measure.yes, no meaningsOnly in a position’s picks.—

Download every dictionary as CSV or JSON.

Endorsement data dictionary · BallotData API