Votes

Two endpoints: the summary of a roll call, and the individual member votes underneath it — who voted yea, who voted nay, and who was absent.

You reach a roll_call_id from /v1/bills/{bill_id}/votesor from a member’s voting history. Both paths below are relative to https://delilah-api.jsv21b.workers.dev and require an X-API-Key header (Authentication). Field names in the samples are exactly what the API returns; values written as <type> are placeholders.

Roll-call summary

GET/v1/votes/{roll_call_id}

The header record for one roll call: which chamber took it, on what date, what the motion was, and the tally. Returns 404 not_found when no roll call carries that id.

ParameterTypeRequiredDescription
roll_call_idinteger (path)RequiredThe roll-call identifier. Non-integer values return 400 bad_request.
bash
curl "https://delilah-api.jsv21b.workers.dev/v1/votes/1234567" \
  -H "X-API-Key: dk_live_…"
json
{
  "data": {
    "roll_call_id": "<int>",
    "bill_id": "<int>",
    "roll_call_body_id": "<int>",
    "body": "<string>",
    "vote_date": "<date>",
    "description": "<string>",
    "yea": "<int>",
    "nay": "<int>",
    "nv": "<int>",
    "absent": "<int>",
    "total": "<int>",
    "passed": "<int>",
    "state_url": "<string>"
  }
}

The header tallies are authoritative — they are what the chamber recorded. If you compute your own totals from the member-level rows below and get a different number, trust the header: some chambers publish a roll call whose printed detail list is incomplete. state_urllinks the roll call on the legislature’s own site, which is where to go when a count needs to be defended to a client.

Individual member votes

GET/v1/votes/{roll_call_id}/details

How each member voted on this roll call, ordered by surname. This is the depth most legislative feeds do not carry: they stop at the tally, so “did my legislator vote for this” is unanswerable from them. The response adds a summary object alongside data.

ParameterTypeRequiredDescription
roll_call_idinteger (path)RequiredThe roll-call identifier. Non-integer values return 400 bad_request.
bash
curl "https://delilah-api.jsv21b.workers.dev/v1/votes/1234567/details" \
  -H "X-API-Key: dk_live_…"
json
{
  "data": [
    {
      "people_id": "<int>",
      "name": "<string>",
      "party_name": "<string>",
      "district": "<string>",
      "vote": "<string>"
    }
  ],
  "summary": {
    "roll_call_id": "<int>",
    "total": "<int>"
  }
}

vote is the readable vote name — Yea, Nay, Not Voting, or Absent. summary.totalcounts the rows returned, which is the number of members with a recorded position, not the chamber’s own total from the header. Each people_id keys into /v1/legislators/{people_id}, so a roll call can be joined to full member profiles in one more call per member.