Ballot305

Public data API

Everything on this site about what officials did and who paid them is open data. Read it as JSON, filter it, or take the raw files. No key, no login, CORS on.

License: CC BY 4.0, attribution "Ballot305 (ballot305.org)". The underlying records are public government records; the joins, matches and hand checks are ours. Corrections: corrections@ballot305.org. Code: GitHub (MIT).

Start here

GET https://ballot305.org/api/v1
GET https://ballot305.org/api/v1/openapi.json

What is in it

ThingMeaning
bodyA decision-making body: county commission, a city council, the Florida House, the U.S. Senate, the Cabinet. Members, their campaign and committee accounts, and a plain-language note on how far the coverage goes.
actionOne official act: a vote with a roll call by name, a budget request a legislator filed, a bill they sponsored, a lawsuit an agency brought. Who moved and seconded, the tally, the registered lobbyists on the item, links to the record.
tieOne gift from a donor connected to an action, to an official who took part in it. Each tie says how the donor was connected and when the gift came.
personOne officeholder or candidate from the roster: terms held with dates and sources, races on the ballot, every action they took part in.

Read the caveats as fields

A tie is a connection the records support, not a claim of cause. The status of each connection is in the data, so a consumer that shows only numbers still shows what they rest on.

FieldValues
matchparty the company the item names gave · lobbyist the lobbyist registered on the item gave · firm that lobbyist's firm, its PAC, or another of its lobbyists gave · office someone registered at the same office address gave · listed a name-only match, flagged · class a kind of business the item helps, not a named party
basiswhat the match rests on: occ reported occupation, addr address, name name only
timing, daysgift date against action date: before, after, same, unknown; days is signed (negative = before)
actionSplittrue when any member voted no. Unanimous votes stay in the data; this flag lets you weigh them
rollCompletefalse when the roll lists only the members covered, not the whole chamber (state and federal floor votes)

Endpoints

PathFilters
/api/v1/bodies, /bodies/{key}
/api/v1/actionsbody person kind since until split=1 tied=1 party q
/api/v1/actions/{body}/{id}
/api/v1/tiesperson body donor timing match since until minAmount
/api/v1/people, /people/{id}q onBallot=1
/api/v1/transparency
/api/v1/bulkthe raw JSON and CSV files behind everything

Lists take limit (default 100, max 500) and offset, and return total plus an X-Total-Count header. Responses carry an ETag and X-Data-Updated; send If-None-Match to skip unchanged data.

Examples

# County commission votes that split, where a donor to someone on the ballot was tied to the item
/api/v1/actions?body=county&split=1&tied=1

# Gifts to Vicki Lopez's accounts that came before the vote they are tied to
/api/v1/ties?person=vicki-l-lopez&timing=before

# Every tie from the company named on the item, $10,000 or more
/api/v1/ties?match=party&minAmount=10000

# One person: terms, races, actions, ties
/api/v1/people/vicki-l-lopez

Scope and method

Miami-Dade County and the cities with races on the November 3, 2026 ballot, the Florida Legislature and Cabinet, and the Miami-Dade members of Congress. Which actions were checked, and how donors and lobbyists were matched, is on the methodology page. The schema is versioned: fields will be added to v1, not removed or renamed.