Retrieve Office
curl --request GET \
--url https://api.signa.so/v1/offices/{code} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.signa.so/v1/offices/{code}"
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/{code}', 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/{code}",
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/{code}"
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/{code}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.signa.so/v1/offices/{code}")
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{
"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",
"capabilities": { "citations": "available" },
"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-06T14:00:00.000Z"
}
Offices
Retrieve Office
Retrieve a single trademark office with sync metadata
GET
/
v1
/
offices
/
{code}
Retrieve Office
curl --request GET \
--url https://api.signa.so/v1/offices/{code} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.signa.so/v1/offices/{code}"
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/{code}', 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/{code}",
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/{code}"
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/{code}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.signa.so/v1/offices/{code}")
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{
"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",
"capabilities": { "citations": "available" },
"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-06T14:00:00.000Z"
}
Overview
Returns a single trademark office record: update cadence, total marks ingested, last successful sync timestamp, and field coverage percentages. Use this to display data freshness and data completeness for a specific office. Offices that are not live return404.
Path Parameters
string
required
Uppercase ST.3 office code, e.g.
US, EM, WO. Legacy lowercase codes (e.g. uspto, and eu for EUIPO) are accepted as permanent aliases. This is not the jurisdiction code, use Retrieve Jurisdiction for ISO codes like US or EU.Response
This endpoint is publicly cacheable, so the response never includesrequest_id. The object has the same fields as an item in List Offices.
string
Uppercase ST.3 office code.
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.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
What Signa can serve for this office beyond the core record.
capabilities.citations is one of available, in_progress, not_available, or not_applicable. See List Offices for what each value means.object | null
Per-field completeness percentages for this office, rounded from 0 to 100. See List Offices for the full field list.
string | null
ISO 8601 timestamp of the stats run that computed
coverage, or null.{
"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",
"capabilities": { "citations": "available" },
"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-06T14:00:00.000Z"
}
Code Examples
curl "https://api.signa.so/v1/offices/US" \
-H "Authorization: Bearer sig_YOUR_KEY"
import { Signa } from "@signa-so/sdk";
const signa = new Signa({ api_key: process.env.SIGNA_API_KEY });
const office = await signa.references.office("US");
console.log(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 |
| 404 | not_found | Office code not recognized, or the office is not live |
Related Endpoints
- List Offices, all supported offices
- Search Citations, the endpoint
capabilities.citationsdescribes - Cast Office Votes, vote for an office that is not covered yet
- Retrieve Jurisdiction
- Data Freshness