List Offices
curl --request GET \
--url https://api.signa.so/v1/offices \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.signa.so/v1/offices"
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', 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",
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"
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")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.signa.so/v1/offices")
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": [
{
"code": "EM",
"object": "office",
"legacy_code": "euipo",
"st3_code": "EM",
"name": "European Union Intellectual Property Office",
"country_name": "European Union",
"jurisdiction_code": "EU",
"website_url": "https://euipo.europa.eu",
"status": "live",
"update_cadence": "daily",
"total_marks": 3202739,
"last_synced_at": "2026-07-06T07:03:32.937Z",
"coverage": {
"images": 64,
"goods_services_text": 76,
"design_codes": 15,
"publication_date": 81,
"registration_number": 94,
"registration_date": 92,
"expiry_date": 88,
"priority_claims": 7,
"seniority_claims": 3,
"filing_basis": 31,
"first_use_date": 24,
"attorney_linkage": 68,
"owner_linkage": 99,
"status_effective_date": 73
},
"coverage_computed_at": "2026-07-06T08:00:00.000Z"
},
{
"code": "US",
"object": "office",
"legacy_code": "uspto",
"st3_code": "US",
"name": "United States Patent and Trademark Office",
"country_name": "United States of America",
"jurisdiction_code": "US",
"website_url": "https://www.uspto.gov",
"status": "live",
"update_cadence": "daily",
"total_marks": 14175925,
"last_synced_at": "2026-07-06T13:04:22.321Z",
"coverage": null,
"coverage_computed_at": null
}
],
"has_more": true,
"pagination": { "cursor": "US" }
}
Offices & Jurisdictions
List Offices
List all supported trademark offices
GET
/
v1
/
offices
List Offices
curl --request GET \
--url https://api.signa.so/v1/offices \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.signa.so/v1/offices"
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', 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",
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"
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")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.signa.so/v1/offices")
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": [
{
"code": "EM",
"object": "office",
"legacy_code": "euipo",
"st3_code": "EM",
"name": "European Union Intellectual Property Office",
"country_name": "European Union",
"jurisdiction_code": "EU",
"website_url": "https://euipo.europa.eu",
"status": "live",
"update_cadence": "daily",
"total_marks": 3202739,
"last_synced_at": "2026-07-06T07:03:32.937Z",
"coverage": {
"images": 64,
"goods_services_text": 76,
"design_codes": 15,
"publication_date": 81,
"registration_number": 94,
"registration_date": 92,
"expiry_date": 88,
"priority_claims": 7,
"seniority_claims": 3,
"filing_basis": 31,
"first_use_date": 24,
"attorney_linkage": 68,
"owner_linkage": 99,
"status_effective_date": 73
},
"coverage_computed_at": "2026-07-06T08:00:00.000Z"
},
{
"code": "US",
"object": "office",
"legacy_code": "uspto",
"st3_code": "US",
"name": "United States Patent and Trademark Office",
"country_name": "United States of America",
"jurisdiction_code": "US",
"website_url": "https://www.uspto.gov",
"status": "live",
"update_cadence": "daily",
"total_marks": 14175925,
"last_synced_at": "2026-07-06T13:04:22.321Z",
"coverage": null,
"coverage_computed_at": null
}
],
"has_more": true,
"pagination": { "cursor": "US" }
}
Overview
Returns the trademark offices that are currently live on the Signa platform, with per-office sync metadata: update cadence, total marks, last successful sync time, and field coverage percentages. Offices that are not yet live are omitted from this response.Query Parameters
integer
default:"100"
Max results per page (max 500).
string
Pagination cursor, the office
code of the last item on the previous page.Response
This endpoint is publicly cacheable, so the response never includesrequest_id.
string
Always
list.object[]
Show Office object
Show Office object
string
Uppercase ST.3 office code, e.g.
US, EM. Legacy lowercase codes (e.g. uspto, and eu for EUIPO) are accepted as permanent aliases on requests.string
Always
office.string
The pre-ST.3 internal office code (e.g.
uspto). Accepted as a permanent request alias.string | null
WIPO ST.3 code — equal to
code; kept for the transition.string
Full office name.
string | null
Name of the office’s country or region.
string
ISO jurisdiction code for this office, e.g.
US, EU.string | null
Office website URL.
string
live when the office is shipping data normally, paused when it is temporarily offline.string | null
How often this office’s data is refreshed:
daily, weekly, monthly, on_demand, or null when not yet scheduled.integer
Total trademark records currently held for this office.
string | null
ISO 8601 timestamp of the last successful data sync, or
null.object | null
Per-field completeness percentages for this office, rounded from 0 to 100.
null means coverage has not been computed yet.Show Coverage fields
Show Coverage fields
integer
Records with image media.
integer
Records with goods/services text on classifications.
integer
Records with Vienna or USPTO design search codes.
integer
Records with a publication date.
integer
Records with a registration number.
integer
Records with a registration date.
integer
Records with an expiry date.
integer
Records with priority-claim data.
integer
Records with seniority-claim data.
integer
Records with filing-basis data.
integer
Records with first-use dates.
integer
Records linked to at least one attorney/representative.
integer
Records linked to at least one owner.
integer
Records with a status effective date.
string | null
ISO 8601 timestamp of the stats run that computed
coverage, or null.boolean
Whether more pages are available.
{
"object": "list",
"data": [
{
"code": "EM",
"object": "office",
"legacy_code": "euipo",
"st3_code": "EM",
"name": "European Union Intellectual Property Office",
"country_name": "European Union",
"jurisdiction_code": "EU",
"website_url": "https://euipo.europa.eu",
"status": "live",
"update_cadence": "daily",
"total_marks": 3202739,
"last_synced_at": "2026-07-06T07:03:32.937Z",
"coverage": {
"images": 64,
"goods_services_text": 76,
"design_codes": 15,
"publication_date": 81,
"registration_number": 94,
"registration_date": 92,
"expiry_date": 88,
"priority_claims": 7,
"seniority_claims": 3,
"filing_basis": 31,
"first_use_date": 24,
"attorney_linkage": 68,
"owner_linkage": 99,
"status_effective_date": 73
},
"coverage_computed_at": "2026-07-06T08:00:00.000Z"
},
{
"code": "US",
"object": "office",
"legacy_code": "uspto",
"st3_code": "US",
"name": "United States Patent and Trademark Office",
"country_name": "United States of America",
"jurisdiction_code": "US",
"website_url": "https://www.uspto.gov",
"status": "live",
"update_cadence": "daily",
"total_marks": 14175925,
"last_synced_at": "2026-07-06T13:04:22.321Z",
"coverage": null,
"coverage_computed_at": null
}
],
"has_more": true,
"pagination": { "cursor": "US" }
}
Code Examples
curl "https://api.signa.so/v1/offices?limit=10" \
-H "Authorization: Bearer sig_YOUR_KEY"
import { Signa } from "@signa-so/sdk";
const signa = new Signa({ api_key: process.env.SIGNA_API_KEY });
const offices = await signa.references.offices();
for (const office of offices.data) {
console.log(office.code, office.total_marks, office.last_synced_at);
}
Errors
| Status | Type | Description |
|---|---|---|
| 401 | unauthorized | Missing or invalid API key |
| 403 | forbidden | API key missing the trademarks:read scope |
| 429 | rate_limited | Too many requests |
Related Endpoints
- Get Office, single office detail
- List Jurisdictions, jurisdiction overview
- Data Freshness, sync cadence and coverage by office
⌘I