Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.
get_api_artifactsOne API's artifacts, grouped by type.
get_openapiThe primary OpenAPI for this API.
find_similar_apisAPIs that look like this one.
apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
resolveTurn a domain, URL or GitHub org into the provider it belongs to.
find_cohortsEvery scored population of providers in the catalog.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/democracy-works-voting-locations-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Democracy Works Voting Locations API
version: '2.0'
description: '# Introduction
The Democracy Works Elections API provides your application with comprehensive elections data and voting guidance, surfacing our unparalleled coverage of upcoming local, state, and federal elections.'
servers:
- url: https://api.democracy.works/v2
tags:
- name: Voting Locations
paths:
/voting-locations:
get:
operationId: getVotingLocations
summary: Voting Locations
description: '### Address arguments
An address may be supplied in one of two ways:
- **As a single string**, via `address`.
- **As components**, via `addressStreet`, `addressCity`, `addressState`,
and `addressZip`. All four component parameters must be present, and
`addressUnitNumber` may optionally be added.
All requests must include an address as single string or with all required
components (preferred).
```bash
# Address as a single string
curl \
--get \
--header "X-API-KEY: $YOUR_API_KEY" \
--data-urlencode address="20 Jay Street Brooklyn NY 11201" \
--data-urlencode publishStatus=prepublished \
https://api.democracy.works/v2/voting-locations
```
```bash
# Address as components
curl \
--get \
--header "X-API-KEY: $YOUR_API_KEY" \
--data-urlencode addressStreet="20 Jay Street" \
--data-urlencode addressCity=Brooklyn \
--data-urlencode addressState=NY \
--data-urlencode addressZip=11201 \
--data-urlencode addressUnitNumber="Unit 410" \
--data-urlencode publishStatus=prepublished \
https://api.democracy.works/v2/voting-locations
```'
parameters:
- in: query
name: address
required: false
schema:
type: string
description: The full street address as a single string. Required unless all of `addressStreet`, `addressCity`, `addressState`, and `addressZip` are provided.
example: 20 Jay Street Brooklyn NY 11201
- in: query
name: addressStreet
required: false
schema:
type: string
description: The street portion of the address. Must be provided together with `addressCity`, `addressState`, and `addressZip`.
example: 20 Jay Street
- in: query
name: addressCity
required: false
schema:
type: string
description: The city portion of the address. Must be provided together with `addressStreet`, `addressState`, and `addressZip`.
example: Brooklyn
- in: query
name: addressState
required: false
schema:
type: string
description: The 2-letter postal abbreviation for the state. DC is also accepted. Must be provided together with `addressStreet`, `addressCity`, and `addressZip`.
example: NY
- in: query
name: addressZip
required: false
schema:
type: string
description: The 5-digit ZIP code. Must be provided together with `addressStreet`, `addressCity`, and `addressState`.
example: '11201'
- in: query
name: addressUnitNumber
required: false
schema:
type: string
description: Optional apartment, suite, or unit number. Used only with the address component parameters; it is silently ignored when sent alongside `address`.
example: Unit 410
- in: query
name: publishStatus
required: false
schema:
type: string
example: prepublished
default: published
enum:
- published
- prepublished
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
properties:
election:
$ref: '#/components/schemas/votingLocationElection'
otherElections:
type: array
items:
$ref: '#/components/schemas/votingLocationElection'
normalizedInput:
$ref: '#/components/schemas/normalizedAddress'
state:
$ref: '#/components/schemas/state'
votingLocations:
type: array
items:
$ref: '#/components/schemas/votingLocation'
earlyVoteSites:
type: array
items:
$ref: '#/components/schemas/votingLocation'
dropOffLocations:
type: array
items:
$ref: '#/components/schemas/votingLocation'
example:
election:
id: 36546cc9-aafb-466b-b92a-b91674eeb091
name: New York General Election
electionDay: '2025-11-04'
ocdDivisionId: ocd-division/country:us/state:ny
otherElections: []
normalizedInput:
line1: 20 Jay St
line2: null
unit_number: null
unit_label: null
city: Brooklyn
state: NY
zip: '11201'
state:
name: Hawaii
electionAdministrationBody:
electionNoticeText: null
electionNoticeUrl: null
votingLocationFinderUrl: https://elections.hawaii.gov/voter-service-centers-and-places-of-deposit/
votingLocations:
- uuid: 05bf2123-143c-4ad5-8473-37959b147240
address:
locationName: Farragut Comm Ctr
line1: 228 York St
line2: null
city: Brooklyn
state: NY
zip: '11201'
latitude: 40.700687
longitude: 73.98139
startDate: '2025-11-04'
endDate: '2025-11-04'
pollingHours: 'Tue, Nov 4: 6:00 am - 9:00 pm'
notes: Conference Room G
sources:
- name: Democracy Works
earlyVoteSites:
- uuid: f86db89d-8940-45d4-9144-6c9ec11171a8
address:
locationName: New York City College of Technology
line1: 285 Jay St
line2: null
city: Brooklyn
state: NY
zip: '11201'
latitude: 40.695488
longitude: -73.98695
startDate: '2025-10-25'
endDate: '2025-11-02'
pollingHours: 'Sat, Oct 25: 9:00 am - 5:00 pm
Sun, Oct 26: 9:00 am - 5:00 pm
Mon, Oct 27: 9:00 am - 5:00 pm
Tue, Oct 28: 10:00 am - 8:00 pm
Wed, Oct 29: 10:00 am - 8:00 pm
Thu, Oct 30: 9:00 am - 5:00 pm
Fri, Oct 31: 8:00 am - 4:00 pm
Sat, Nov 1: 9:00 am - 5:00 pm
Sun, Nov 2: 9:00 am - 5:00 pm'
notes: null
sources:
- name: Democracy Works
dropOffLocations:
- uuid: 7ac7ab89-1d10-4001-975f-e5e4bf7e882f
address:
locationName: New York City College of Technology
line1: 285 Jay St
line2: null
city: Brooklyn
state: NY
zip: '11201'
latitude: 40.695488
longitude: -73.98695
startDate: '2025-10-25'
endDate: '2025-11-02'
pollingHours: 'Sat, Oct 25: 9:00 am - 5:00 pm
Sun, Oct 26: 9:00 am - 5:00 pm
Mon, Oct 27: 9:00 am - 5:00 pm
Tue, Oct 28: 10:00 am - 8:00 pm
Wed, Oct 29: 10:00 am - 8:00 pm
Thu, Oct 30: 9:00 am - 5:00 pm
Fri, Oct 31: 8:00 am - 4:00 pm
Sat, Nov 1: 9:00 am - 5:00 pm
Sun, Nov 2: 9:00 am - 5:00 pm'
notes: null
sources:
- name: Democracy Works
- uuid: fa0c4eb9-8e7c-473a-8430-f2defe2214c1
address:
locationName: Farragut Comm Ctr
line1: 228 York St
line2: null
city: Brooklyn
state: NY
zip: '11201'
latitude: 40.700687
longitude: -73.98139
startDate: '2025-11-04'
endDate: '2025-11-04'
pollingHours: 'Tue, Nov 4: 6:00 am - 9:00 pm'
notes: null
sources:
- name: Democracy Works
- uuid: 6ac9151a-9097-41a0-a82a-19581a32a577
address:
locationName: Kings County Board of Elections
line1: 345 Adams Street
line2: 4th Floor
city: Brooklyn
state: NY
zip: '11201'
latitude: 40.692623
longitude: -73.98846
startDate: '2025-10-25'
endDate: '2025-11-04'
pollingHours: 'Sat, Oct 25: 9:00 am - 5:00 pm
Sun, Oct 26: 9:00 am - 5:00 pm
Mon, Oct 27: 9:00 am - 5:00 pm
Tue, Oct 28: 10:00 am - 8:00 pm
Wed, Oct 29: 10:00 am - 8:00 pm
Thu, Oct 30: 9:00 am - 5:00 pm
Fri, Oct 31: 8:00 am - 4:00 pm
Sat, Nov 1: 9:00 am - 5:00 pm
Sun, Nov 2: 9:00 am - 5:00 pm
Tue, Nov 4: 6:00 am - 9:00 pm'
notes: null
sources:
- name: Democracy Works
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/votingLocationError'
examples:
missingAddress:
summary: Missing address parameters
value:
message: Invalid parameters, address components or an address must be provided.
invalidPublishStatus:
summary: Invalid publishStatus value
value:
message: Invalid param supplied for publishStatus
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/votingLocationError'
example:
message: Forbidden
'422':
description: Unprocessable Entity
content:
application/json:
schema:
$ref: '#/components/schemas/votingLocationError'
examples:
missingHouseNumber:
summary: No house number identified
value:
message: Incomplete address. No house number identified.
noSMARTYNormalization:
summary: Unable to normalize address
value:
message: Unable to normalize user address
'429':
description: Too Many Requests
content:
application/json:
schema:
$ref: '#/components/schemas/votingLocationError'
example:
message: Too Many Requests
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/votingLocationError'
example:
message: Internal server error
'503':
description: Service Unavailable
content:
application/json:
schema:
$ref: '#/components/schemas/votingLocationError'
example:
message: Service unavailable
tags:
- Voting Locations
components:
schemas:
votingLocationError:
type: object
properties:
message:
type: string
description: A human-readable message describing the error.
required:
- message
votingLocation:
type: object
properties:
uuid:
type: string
address:
type: object
properties:
locationName:
type:
- string
- null
line1:
type: string
line2:
type:
- string
- null
city:
type: string
state:
type: string
zip:
type: string
latitude:
type: number
longitude:
type: number
startDate:
type: string
endDate:
type: string
pollingHours:
type: string
notes:
type:
- string
- 'null'
description: Additional information to help voters find a Voting Location
sources:
type: array
items:
type: object
properties:
name:
type: string
description: The name of the organization that gathered the Voting Locations
normalizedAddress:
type: object
properties:
line1:
type: string
line2:
type:
- string
- null
unit_number:
type:
- string
- null
unit_label:
type:
- string
- null
city:
type: string
state:
type: string
zip:
type: string
state:
type: object
properties:
name:
type: string
description: Name of the state
electionAdministrationBody:
type: object
properties:
electionNoticeText:
type:
- string
- 'null'
description: Information shared by the state related to an ongoing election
electionNoticeUrl:
type:
- string
- 'null'
description: Link to an official state source for electionNoticeText
votingLocationFinderUrl:
type:
- string
- 'null'
description: Link to official state lookup tool
votingLocationElection:
type: object
properties:
id:
type: string
name:
type: string
electionDay:
type: string
ocdDivisionId:
type: string
securitySchemes:
ApiKeyAuth:
type: apiKey
in: header
name: X-API-KEY