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.
Start here
GET https://ballot305.org/api/v1 GET https://ballot305.org/api/v1/openapi.json
What is in it
| Thing | Meaning |
|---|---|
| body | A 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. |
| action | One 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. |
| tie | One 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. |
| person | One 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.
| Field | Values |
|---|---|
match | party 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 |
basis | what the match rests on: occ reported occupation, addr address, name name only |
timing, days | gift date against action date: before, after, same, unknown; days is signed (negative = before) |
actionSplit | true when any member voted no. Unanimous votes stay in the data; this flag lets you weigh them |
rollComplete | false when the roll lists only the members covered, not the whole chamber (state and federal floor votes) |
Endpoints
| Path | Filters |
|---|---|
/api/v1/bodies, /bodies/{key} | |
/api/v1/actions | body person kind since until split=1 tied=1 party q |
/api/v1/actions/{body}/{id} | |
/api/v1/ties | person body donor timing match since until minAmount |
/api/v1/people, /people/{id} | q onBallot=1 |
/api/v1/transparency | |
/api/v1/bulk | the 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.