Read-only API · v1.0

SVG Voters List API

Search and explore the Saint Vincent & the Grenadines electoral voters list. 103,459 registered voters across 15 constituencies.

Base URL http://localhost:5001 Format JSON Auth None required

Reference

API Endpoints

GET
/api/voters
Search and list voters. All query parameters are optional.
Supports filtering by surname, given_name, gender, address, occupation, constituency, polling_division. Results are paginated with page and per_page.
Try →
GET
/api/voters/{voter_no}
Retrieve a single voter by their unique registration number (e.g. 054670).
Try →
GET
/api/constituencies
List all 15 constituencies with their names and total voter counts.
Try →
GET
/api/constituencies/{code}
Get a single constituency by its 2-letter code (e.g. CK, SG).
Try →
GET
/api/constituencies/{code}/voters
List all voters registered in a specific constituency. Supports page and per_page.
Try →
GET
/api/polling-divisions
List all polling divisions across every constituency, including their voter counts.
Try →
GET
/api/polling-divisions/{code}/voters
List voters in a specific polling division (e.g. CKA, NGF). Paginated.
Try →

Query Parameters

Search Parameters

All parameters for GET /api/voters

Parameter
Type
Description
surname
string
Partial surname match (case-insensitive). e.g. pompey
given_name
string
Partial given name match (case-insensitive). e.g. kelvin
gender
string
Exact match. One of MALE or FEMALE
address
string
Partial address match. e.g. kingstown
occupation
string
Partial occupation match. e.g. teacher
constituency
string
2-letter code. e.g. EK, SG
polling_division
string
Division code. e.g. CKA, NGF
page
integer
Page number, 1-indexed. Default: 1
per_page
integer
Results per page. Default: 50, max: 200

Examples

Common Queries

Search for a person by name

Use surname and given_name together for the most precise match:

# curl
curl "http://localhost:5001/api/voters?surname=pompey&given_name=kelvin"

# Python
import requests
resp = requests.get("http://localhost:5001/api/voters", params={
    "surname":    "pompey",
    "given_name": "kelvin",
})
data = resp.json()
print(data["total"], "result(s)")
for voter in data["data"]:
    print(voter["given_name"], voter["surname"], voter["voter_no"])

List all voters in a constituency

Retrieve the first page of voters registered in East Kingstown:

curl "http://localhost:5001/api/constituencies/EK/voters?page=1&per_page=50"

Find all nurses in a constituency

Combine occupation and constituency filters:

curl "http://localhost:5001/api/voters?occupation=nurse&constituency=EG"

Get a voter by voter number

If you know the exact voter registration number:

curl "http://localhost:5001/api/voters/054670"

Paginated response shape

Every list endpoint returns this structure:

{
  "total":    12,         // total matching records
  "page":     1,
  "per_page": 50,
  "pages":    1,          // total number of pages
  "data": [
    {
      "id":               42,
      "surname":          "POMPEY",
      "given_name":       "KELVIN",
      "gender":           "MALE",
      "address":          "KINGSTOWN",
      "occupation":       "DEVELOPER",
      "voter_no":         "054670",
      "polling_division": "CKA",
      "constituency":     "CK"
    }
  ]
}