List Office Votes
curl --request GET \
--url https://api.signa.so/v1/offices/votes \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.signa.so/v1/offices/votes"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.signa.so/v1/offices/votes', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.signa.so/v1/offices/votes",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.signa.so/v1/offices/votes"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.signa.so/v1/offices/votes")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.signa.so/v1/offices/votes")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"object": "list",
"data": [
{
"object": "office_vote",
"office_code": "CL",
"office_status": "not_covered",
"created_at": "2026-08-29T12:00:00.000Z"
},
{
"object": "office_vote",
"office_code": "GB",
"office_status": "roadmap",
"created_at": "2026-08-12T09:30:00.000Z"
}
],
"has_more": false,
"pagination": { "cursor": null },
"request_id": "req_01kabc..."
}
Offices
List Office Votes
List your organization’s office-coverage votes
GET
/
v1
/
offices
/
votes
List Office Votes
curl --request GET \
--url https://api.signa.so/v1/offices/votes \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.signa.so/v1/offices/votes"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.signa.so/v1/offices/votes', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.signa.so/v1/offices/votes",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.signa.so/v1/offices/votes"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.signa.so/v1/offices/votes")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.signa.so/v1/offices/votes")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"object": "list",
"data": [
{
"object": "office_vote",
"office_code": "CL",
"office_status": "not_covered",
"created_at": "2026-08-29T12:00:00.000Z"
},
{
"object": "office_vote",
"office_code": "GB",
"office_status": "roadmap",
"created_at": "2026-08-12T09:30:00.000Z"
}
],
"has_more": false,
"pagination": { "cursor": null },
"request_id": "req_01kabc..."
}
Overview
Returns every office your organization has voted for, alphabetical by office code. Watchoffice_status: when an office you voted for goes live, its votes flip to live — your ask landed.
The votable vocabulary is bounded — ISO 3166-1 country codes plus BX, AP, OA, see Cast Office Votes — so the list is always a single page: has_more is always false and pagination.cursor is always null.
Like GET /v1/feedback, this list bills 1 read unit; casting and retracting votes bill 0 units. Responses carry the standard RateLimit-* headers.
Query Parameters
integer
Accepted for compatibility with generic list clients and SDK pagination helpers, then ignored — every vote comes back in one page. Must still be a well-formed page size (1–100).
string
Accepted and ignored, same reason. There is never a next page to fetch.
400 validation_error. Responses are private, no-store — votes are org-scoped, never shared cache.
Response
string
Always
list.object[]
Show Office vote object
Show Office vote object
string
Always
office_vote.string
Canonical uppercase ST.3 office code.
string
string
When your organization first voted for this office.
boolean
Always
false.{
"object": "list",
"data": [
{
"object": "office_vote",
"office_code": "CL",
"office_status": "not_covered",
"created_at": "2026-08-29T12:00:00.000Z"
},
{
"object": "office_vote",
"office_code": "GB",
"office_status": "roadmap",
"created_at": "2026-08-12T09:30:00.000Z"
}
],
"has_more": false,
"pagination": { "cursor": null },
"request_id": "req_01kabc..."
}
Code Examples
curl "https://api.signa.so/v1/offices/votes" \
-H "Authorization: Bearer sig_YOUR_KEY"
import { Signa } from "@signa-so/sdk";
const signa = new Signa({ api_key: process.env.SIGNA_API_KEY });
const votes = await signa.references.officeVotes();
for (const vote of votes.data) {
console.log(vote.office_code, vote.office_status);
}
Errors
| Status | Type | Description |
|---|---|---|
| 400 | validation_error | An unsupported query parameter, or a limit outside 1–100 |
| 401 | unauthorized | Missing or invalid API key |
| 429 | rate_limited | Too many requests |
unknown_office_code, office_already_live, or no_trademark_register — see Cast Office Votes.
Related Endpoints
- Cast Office Votes, vote for the offices you want next
- Retract Office Vote, remove a vote
- List Offices, the offices already covered by Signa