Skip to main content
GET
/
v1
/
offices
/
{code}
Get 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": "uspto",
  "object": "office",
  "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": {
    "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 return 404.

Path Parameters

code
string
required
Lowercase office code, e.g. uspto, euipo, wipo. This is not the jurisdiction code, use Get Jurisdiction for ISO codes like US or EU.

Response

This endpoint is publicly cacheable, so the response never includes request_id. The object has the same fields as an item in List Offices.
code
string
Lowercase office code.
object
string
Always office.
name
string
Full office name.
country_name
string | null
Name of the office’s country or region.
jurisdiction_code
string
ISO jurisdiction code for this office, e.g. US.
website_url
string | null
Office website URL.
status
string
live when the office is shipping data normally, paused when it is temporarily offline.
update_cadence
string | null
How often this office’s data is refreshed: daily, weekly, monthly, on_demand, or null when not yet scheduled.
total_marks
integer
Total trademark records currently held for this office.
last_synced_at
string | null
ISO 8601 timestamp of the last successful data sync, or null.
coverage
object | null
Per-field completeness percentages for this office, rounded from 0 to 100. See List Offices for the full field list.
coverage_computed_at
string | null
ISO 8601 timestamp of the stats run that computed coverage, or null.
{
  "code": "uspto",
  "object": "office",
  "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": {
    "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/uspto" \
  -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("uspto");
console.log(office.total_marks, office.last_synced_at);

Errors

StatusTypeDescription
401unauthorizedMissing or invalid API key
403forbiddenAPI key missing the trademarks:read scope
404not_foundOffice code not recognized, or the office is not live