Retrieve Trademark
curl --request GET \
--url https://api.signa.so/v1/trademarks/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.signa.so/v1/trademarks/{id}"
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/trademarks/{id}', 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/trademarks/{id}",
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/trademarks/{id}"
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/trademarks/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.signa.so/v1/trademarks/{id}")
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{
"id": "tm_8kLm2nPq",
"object": "trademark",
"mark_text": "NIKE",
"mark_text_language": "en",
"mark_text_script": null,
"mark_feature_type": "word",
"mark_legal_category": "standard",
"right_kind": "trademark",
"is_series_mark": null,
"series_count": null,
"status": {
"primary": "active",
"stage": "registered",
"reason": null,
"challenges": [],
"effective_date": "1974-04-16",
"source": "explicit",
"raw_code": "800",
"raw_label": null
},
"office_code": "US",
"jurisdiction_code": "US",
"filing_route": "direct_national",
"scope_kind": "national",
"origin_office_code": null,
"source_primary_id": "72396458",
"application_number": "72396458",
"registration_number": "0978952",
"ir_number": null,
"filing_date": "1971-02-04",
"registration_date": "1974-04-16",
"expiry_date": "2034-04-16",
"expiry_date_basis": "derived",
"renewal_due_date": "2034-04-16",
"renewal_due_date_basis": "derived",
"publication_date": "1974-01-29",
"priority_date": null,
"termination_date": null,
"protection_effective_date": null,
"designation_date": null,
"dependency_period_end_date": null,
"transformation_deadline_date": null,
"is_retracted": false,
"owners": [
{
"id": "own_R3jK9mN2",
"name": "Nike, Inc.",
"country_code": "US",
"entity_type": "corporation",
"role": "owner",
"entity_id": "ent_019f34d6-2222-7777-8888-222222222222",
"entity_id_type": "resolved",
"address": {
"lines": ["One Bowerman Drive"],
"city": "BEAVERTON",
"state": "OR",
"postal_code": "97005",
"country_code": "US"
}
}
],
"attorneys": [
{
"id": "att_Lp3mN7qR",
"name": "Katelyn Andrews",
"firm_id": "firm_Xk9pQ2rS",
"firm_name": "Banner & Witcoff, Ltd.",
"role": "representative",
"address": {
"lines": ["1100 13th Street NW", "Suite 1200"],
"city": "WASHINGTON",
"state": "DC",
"postal_code": "20005",
"country_code": "US"
}
}
],
"classifications": [
{
"nice_class": 25,
"nice_edition": null,
"goods_services_text": "Clothing, footwear, headgear",
"goods_services_language": "en",
"status": "accepted",
"class_status_raw": "6",
"subclass_codes": null
}
],
"nice_classes": [25],
"design_codes": [],
"text_variants": [],
"statements": [],
"media": [
{
"id": "med_9mQ4pXk2",
"media_type": "image",
"mime_type": "image/png",
"url": "https://api.signa.so/v1/trademarks/tm_8kLm2nPq/media/med_9mQ4pXk2",
"is_primary": true
}
],
"priority_claims": [],
"filing_bases": [
{
"basis_type": "use_in_commerce",
"nice_class_number": 25,
"first_use_date": "1971-01-01",
"first_use_in_commerce_date": "1972-01-01",
"foreign_application_number": null,
"foreign_country_code": null
}
],
"publications": [],
"us_register": {
"register": "principal",
"acquired_distinctiveness": null,
"incontestable": false,
"standard_characters_claimed": false
},
"seniority_claims": [],
"derived": {
"ruleset_version": "2026-09-02",
"deadlines_supported": true,
"deadlines_unsupported_reason": null,
"deadlines": [
{
"rule_id": "us_renewal_s9",
"type": "combined_renewal_and_use",
"name": "Section 8+9 — Renewal + Declaration of Use",
"jurisdiction_code": "US",
"trigger_date": "2024-04-16",
"trigger_field": "registration_date",
"window_opens": "2033-04-16",
"due_date": "2034-04-17",
"grace_expiry": "2034-10-16",
"recurring": true,
"optional": false,
"consequence_if_missed": "cancellation_and_expiration"
}
],
"opposition_window": null
},
"has_media": true,
"primary_image_url": "https://api.signa.so/v1/trademarks/tm_8kLm2nPq/media/med_9mQ4pXk2",
"coverage": null,
"relationships": [],
"events_count": 21,
"proceedings_count": 0,
"citations_count": 2,
"provenance": {
"source_data_date": "2026-03-18",
"office_updated_at": "2022-10-28T00:00:00.000Z",
"retrieved_at": null
},
"created_at": "2026-03-22T08:27:23.446Z",
"updated_at": "2026-03-30T02:13:13.704Z",
"request_id": "req_01kp4v2yycy3pq3czhxcsmn9md"
}
{
"id": "tm_4pQ7rT2v",
"object": "trademark",
"mark_text": "MERIDIAN",
"office_code": "WO",
"jurisdiction_code": "WO",
"filing_route": "madrid_ir",
"scope_kind": "international_registration",
"ir_number": "1654321",
"origin_office_code": "US",
"coverage": {
"territory_count": 3,
"by_primary": { "active": 2, "pending": 1 },
"by_stage": { "registered": 2, "published": 1 },
"territories": [
{
"territory": "EU",
"territory_name": "European Union",
"trademark_id": "tm_9nR4sV8w",
"primary": "active",
"stage": "registered",
"protection_status": "protected",
"designation_date": "2022-04-11",
"protection_date": "2023-02-27",
"refusal_date": null,
"status_effective_date": "2023-02-27",
"is_subsequent_designation": false,
"designation_protocol": "madrid_protocol",
"source_records": []
},
{
"territory": "JP",
"territory_name": "Japan",
"trademark_id": "tm_2wX5yZ1a",
"primary": "active",
"stage": "registered",
"protection_status": "protected",
"designation_date": "2022-04-11",
"protection_date": "2023-06-09",
"refusal_date": "2022-11-02",
"status_effective_date": "2023-06-09",
"is_subsequent_designation": false,
"designation_protocol": "madrid_protocol",
"source_records": [
{
"source_office_code": "WO",
"territory_code": "JP",
"trademark": {
"id": "tm_6bC3dE9f",
"href": "/v1/trademarks/tm_6bC3dE9f"
}
}
]
},
{
"territory": "CA",
"territory_name": "Canada",
"trademark_id": "tm_8gH1jK5l",
"primary": "pending",
"stage": "published",
"protection_status": null,
"designation_date": "2024-01-30",
"protection_date": null,
"refusal_date": null,
"status_effective_date": "2024-08-14",
"is_subsequent_designation": true,
"designation_protocol": "madrid_protocol",
"source_records": []
}
]
},
"relationships": [
{
"type": "based_on_basic_registration",
"direction": "child",
"trademark_id": null,
"target_office_code": "US",
"target_record_id": "97123456",
"office_code": null,
"mark_text": null,
"status_stage": null,
"effective_date": "2022-04-11"
}
],
"provenance": {
"source_data_date": "2026-03-18",
"office_updated_at": "2026-03-17T00:00:00.000Z",
"retrieved_at": "2026-03-18T04:12:55.019Z"
},
"request_id": "req_01kp4v2yycy3pq3czhxcsmn9me"
}
Retrieve
Retrieve Trademark
Retrieve a single trademark by ID
GET
/
v1
/
trademarks
/
{id}
Retrieve Trademark
curl --request GET \
--url https://api.signa.so/v1/trademarks/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.signa.so/v1/trademarks/{id}"
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/trademarks/{id}', 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/trademarks/{id}",
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/trademarks/{id}"
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/trademarks/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.signa.so/v1/trademarks/{id}")
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{
"id": "tm_8kLm2nPq",
"object": "trademark",
"mark_text": "NIKE",
"mark_text_language": "en",
"mark_text_script": null,
"mark_feature_type": "word",
"mark_legal_category": "standard",
"right_kind": "trademark",
"is_series_mark": null,
"series_count": null,
"status": {
"primary": "active",
"stage": "registered",
"reason": null,
"challenges": [],
"effective_date": "1974-04-16",
"source": "explicit",
"raw_code": "800",
"raw_label": null
},
"office_code": "US",
"jurisdiction_code": "US",
"filing_route": "direct_national",
"scope_kind": "national",
"origin_office_code": null,
"source_primary_id": "72396458",
"application_number": "72396458",
"registration_number": "0978952",
"ir_number": null,
"filing_date": "1971-02-04",
"registration_date": "1974-04-16",
"expiry_date": "2034-04-16",
"expiry_date_basis": "derived",
"renewal_due_date": "2034-04-16",
"renewal_due_date_basis": "derived",
"publication_date": "1974-01-29",
"priority_date": null,
"termination_date": null,
"protection_effective_date": null,
"designation_date": null,
"dependency_period_end_date": null,
"transformation_deadline_date": null,
"is_retracted": false,
"owners": [
{
"id": "own_R3jK9mN2",
"name": "Nike, Inc.",
"country_code": "US",
"entity_type": "corporation",
"role": "owner",
"entity_id": "ent_019f34d6-2222-7777-8888-222222222222",
"entity_id_type": "resolved",
"address": {
"lines": ["One Bowerman Drive"],
"city": "BEAVERTON",
"state": "OR",
"postal_code": "97005",
"country_code": "US"
}
}
],
"attorneys": [
{
"id": "att_Lp3mN7qR",
"name": "Katelyn Andrews",
"firm_id": "firm_Xk9pQ2rS",
"firm_name": "Banner & Witcoff, Ltd.",
"role": "representative",
"address": {
"lines": ["1100 13th Street NW", "Suite 1200"],
"city": "WASHINGTON",
"state": "DC",
"postal_code": "20005",
"country_code": "US"
}
}
],
"classifications": [
{
"nice_class": 25,
"nice_edition": null,
"goods_services_text": "Clothing, footwear, headgear",
"goods_services_language": "en",
"status": "accepted",
"class_status_raw": "6",
"subclass_codes": null
}
],
"nice_classes": [25],
"design_codes": [],
"text_variants": [],
"statements": [],
"media": [
{
"id": "med_9mQ4pXk2",
"media_type": "image",
"mime_type": "image/png",
"url": "https://api.signa.so/v1/trademarks/tm_8kLm2nPq/media/med_9mQ4pXk2",
"is_primary": true
}
],
"priority_claims": [],
"filing_bases": [
{
"basis_type": "use_in_commerce",
"nice_class_number": 25,
"first_use_date": "1971-01-01",
"first_use_in_commerce_date": "1972-01-01",
"foreign_application_number": null,
"foreign_country_code": null
}
],
"publications": [],
"us_register": {
"register": "principal",
"acquired_distinctiveness": null,
"incontestable": false,
"standard_characters_claimed": false
},
"seniority_claims": [],
"derived": {
"ruleset_version": "2026-09-02",
"deadlines_supported": true,
"deadlines_unsupported_reason": null,
"deadlines": [
{
"rule_id": "us_renewal_s9",
"type": "combined_renewal_and_use",
"name": "Section 8+9 — Renewal + Declaration of Use",
"jurisdiction_code": "US",
"trigger_date": "2024-04-16",
"trigger_field": "registration_date",
"window_opens": "2033-04-16",
"due_date": "2034-04-17",
"grace_expiry": "2034-10-16",
"recurring": true,
"optional": false,
"consequence_if_missed": "cancellation_and_expiration"
}
],
"opposition_window": null
},
"has_media": true,
"primary_image_url": "https://api.signa.so/v1/trademarks/tm_8kLm2nPq/media/med_9mQ4pXk2",
"coverage": null,
"relationships": [],
"events_count": 21,
"proceedings_count": 0,
"citations_count": 2,
"provenance": {
"source_data_date": "2026-03-18",
"office_updated_at": "2022-10-28T00:00:00.000Z",
"retrieved_at": null
},
"created_at": "2026-03-22T08:27:23.446Z",
"updated_at": "2026-03-30T02:13:13.704Z",
"request_id": "req_01kp4v2yycy3pq3czhxcsmn9md"
}
{
"id": "tm_4pQ7rT2v",
"object": "trademark",
"mark_text": "MERIDIAN",
"office_code": "WO",
"jurisdiction_code": "WO",
"filing_route": "madrid_ir",
"scope_kind": "international_registration",
"ir_number": "1654321",
"origin_office_code": "US",
"coverage": {
"territory_count": 3,
"by_primary": { "active": 2, "pending": 1 },
"by_stage": { "registered": 2, "published": 1 },
"territories": [
{
"territory": "EU",
"territory_name": "European Union",
"trademark_id": "tm_9nR4sV8w",
"primary": "active",
"stage": "registered",
"protection_status": "protected",
"designation_date": "2022-04-11",
"protection_date": "2023-02-27",
"refusal_date": null,
"status_effective_date": "2023-02-27",
"is_subsequent_designation": false,
"designation_protocol": "madrid_protocol",
"source_records": []
},
{
"territory": "JP",
"territory_name": "Japan",
"trademark_id": "tm_2wX5yZ1a",
"primary": "active",
"stage": "registered",
"protection_status": "protected",
"designation_date": "2022-04-11",
"protection_date": "2023-06-09",
"refusal_date": "2022-11-02",
"status_effective_date": "2023-06-09",
"is_subsequent_designation": false,
"designation_protocol": "madrid_protocol",
"source_records": [
{
"source_office_code": "WO",
"territory_code": "JP",
"trademark": {
"id": "tm_6bC3dE9f",
"href": "/v1/trademarks/tm_6bC3dE9f"
}
}
]
},
{
"territory": "CA",
"territory_name": "Canada",
"trademark_id": "tm_8gH1jK5l",
"primary": "pending",
"stage": "published",
"protection_status": null,
"designation_date": "2024-01-30",
"protection_date": null,
"refusal_date": null,
"status_effective_date": "2024-08-14",
"is_subsequent_designation": true,
"designation_protocol": "madrid_protocol",
"source_records": []
}
]
},
"relationships": [
{
"type": "based_on_basic_registration",
"direction": "child",
"trademark_id": null,
"target_office_code": "US",
"target_record_id": "97123456",
"office_code": null,
"mark_text": null,
"status_stage": null,
"effective_date": "2022-04-11"
}
],
"provenance": {
"source_data_date": "2026-03-18",
"office_updated_at": "2026-03-17T00:00:00.000Z",
"retrieved_at": "2026-03-18T04:12:55.019Z"
},
"request_id": "req_01kp4v2yycy3pq3czhxcsmn9me"
}
Overview
Returns the full detail-tier representation of a single trademark: identification, status, filing and key dates, owners, attorneys, classifications, computed deadlines, media, Madrid territory coverage, mark-to-mark relationships, and source provenance. Everything bounded is inlined — includingcoverage (per-territory breakdown for a Madrid international registration), relationships[] (mark-to-mark links), and provenance (where the record came from and when we last saw it). Only the unbounded, independently filterable children stay behind their own endpoints: events, proceedings, assignments and documents. Events, proceedings and examiner citations appear here as counts (events_count, proceedings_count, citations_count).
Path Parameters
string
default:"tm_8kLm2nPq"
required
Trademark ID (e.g.,
tm_8kLm2nPq)Query Parameters
string
Comma-separated optional detail projections.
office_extensions includes the office_extensions object (raw office-specific data), which is otherwise omitted.string
Sparse top-level field projection, comma-separated (e.g.
?fields=mark_text,status,owners). id and object are always retained. Unknown field names, or nested paths like status.primary, return 400.string
Preferred goods/services language for
classifications[] rows, applied only to records that carry per-language variants (direct and Madrid designation records; 2-3 letters with optional 2-letter region, e.g. en, eng, or en-US). When multiple language variants exist for the same Nice class, Signa returns the requested language if present; groups without the requested language — and IR-parent rollup classifications, which have no per-language variants — keep all rows in default classification order.The
ETag is a weak semantic validator (W/"…"), because the response includes a per-request request_id. Return it unchanged in If-None-Match; matching 304 responses preserve the weak form. The validator varies with the requested projection and language: a request with ?include=, ?fields=, and/or ?language= gets a different validator than the plain request, so a cached full response never 304s a different representation.Response
Returns the full detail-tier representation of a trademark, including all bounded children (owners, attorneys, classifications, coverage, relationships, etc.) inline. Unbounded children (events, proceedings) appear as counts only. Maintenance deadlines and opposition windows are computed at read time from the normalized record and rule registry, and served underderived.
string
Prefixed trademark ID (
tm_*)string
Always
"trademark"Show Mark identification
Show Mark identification
string | null
Word mark as filed (null for design-only marks)
string | null
ISO 639-1 language code of the mark text
string | null
ISO 15924 script code
string | null
Mark feature type (e.g.,
word, figurative, combined)string | null
Legal category (e.g.,
standard, certification, collective)string
Right kind (
trademark, trade_name, geographical_indication, etc.)boolean | null
Whether the mark is a series mark
integer | null
Number of marks in the series
Show Status
Show Status
object
Show Status object
Show Status object
string
Primary status:
active, pending, inactive, unknownstring
Lifecycle stage, one of 18 normalized values:
filed, examining, pending_publication, published, opposition_period, pending_opposition, pending_cancellation, pending_issuance, registered, allowed, abandoned, withdrawn, surrendered, refused, cancelled, invalidated, expired, unknown. See the status taxonomy.string | null
Reason for current status (e.g.,
section_8_accepted)string[]
Active challenge states (e.g.,
opposition_pending, cancellation_pending)string | null
ISO date when this status became effective
string
How the status was determined:
explicit (the office reported it directly), event_derived (derived from the prosecution event timeline), dispatch_derived (derived from a bulk data dispatch), or computed (the mark spans a mixed-status family and Signa computed a representative status)string | null
Office-native status code (e.g.,
800)string | null
Office-native status label (e.g.,
Registered and renewed)Show Office and filing
Show Office and filing
string | null
Uppercase ST.3 office code (e.g.,
US, EM). Null if the stored office identifier cannot be resolved (fail-closed — internal codes are never leaked).string
ISO 2-letter jurisdiction (e.g.,
US, EU)string
Filing route (
direct_national, madrid_designation, etc.)string
Scope kind (
national, regional, international_registration)string | null
Origin office for Madrid designations
string
Source system primary identifier
string | null
Application/serial number
string | null
Registration number
string | null
International registration number (Madrid system)
Show Key dates
Show Key dates
string | null
ISO date
string | null
ISO date
string | null
ISO date
string
Basis for the expiry date:
reported (the office reported it directly), derived (Signa computed it from other dates), or unknownstring | null
ISO date
string
Basis for the renewal due date:
reported (the office stated it), derived (the connector computed it, e.g. from the expiry date), or unknown (the connector has not declared a basis yet). Same vocabulary as expiry_date_basis.string | null
First publication date (ISO)
string | null
Earliest priority date (ISO), derived from priority claims
string | null
ISO date
string | null
ISO date
string | null
ISO date (Madrid designations)
string | null
ISO date (Madrid dependency period)
string | null
ISO date
boolean
Whether the record has been retracted by the source office
Show Owners
Show Owners
object[]
Show Owner object
Show Owner object
string
Owner ID (
own_*)string
Canonical owner name
string | null
ISO 2-letter country code
string | null
Entity type (e.g.,
corporation, individual)string
Owner role (e.g.,
owner, applicant)string
Resolved cross-office entity ID (
ent_*). Group an owner’s marks across offices by this, and filter with ?entity_id= to pull the entity’s whole global portfolio.string
resolved when the owner is linked to a materialized entity; derived when it is not linked yet (a stable placeholder ID scoped to this owner).object[] | undefined
Public company records matched to this owner (
source sec or gleif, plus ticker, exchange, lei, entity_status). Present only on grouped Madrid IR-parent detail owners; omitted on every other detail response, and omitted when there are no matches.Show Attorneys
Show Attorneys
object[]
Show Attorney object
Show Attorney object
string
Attorney ID (
att_*)string
Canonical attorney name
string | null
Firm ID (
firm_*)string | null
Firm name
string
Attorney role (e.g.,
representative)object | null
Postal address as reported by the office. All fields optional; whole object is
null when no address is on file. Same shape as the owner address object.Show Classifications
Show Classifications
object[]
Show Classification object
Show Classification object
integer | null
Nice class number (1-45)
string | null
Nice classification edition
string | null
Goods/services description
string | null
Language of the description
string | null
Class status
string | null
Raw class status from the office
string[] | null
Office-native subclass codes, or
null when not reportedinteger[]
Compact list of the distinct Nice class numbers in
classifications[]Show Signa-computed data (`derived`)
Show Signa-computed data (`derived`)
object
Everything Signa computes from the record, namespaced apart from what the office reported. Computed at read time from the normalized record and the rule registry. Free on every read.
The
derived block is clock-free: it carries statutory dates, never countdowns or “today”-relative statuses. That keeps a cached response a faithful function of the record: a status or days_until_due baked into a cacheable body goes stale silently. Derive them client-side from the dates (one line of date math), or call Compute Deadlines with an explicit as_of_date when you want the server to evaluate statuses for you.Show derived object
Show derived object
string
Corpus-level stamp of the deadline ruleset that produced this block: the latest
last_verified date across the maintenance rule configurations, an attestation date that moves on any re-verification (including provenance-only re-citations), not a change signal. It moves only when a re-verification advances the newest date in the corpus, so re-verifying a jurisdiction that is already behind the current maximum leaves it unchanged. Treat it as a coarse “how fresh is the corpus” signal, not per-rule provenance. For that, read rule_id on each row and resolve it against List Deadline Rules, where the rule’s own last_verified and effective_from live.boolean
false when no schedule could be computed. See deadlines_unsupported_reason.string | null
Why no schedule was computed:
unsupported_jurisdiction (no rules modeled for the jurisdiction) or requires_office_date (the record does not carry the input the statute needs and the office stated no expiry date to anchor on, so the engine declines to guess rather than serve a wrong date). null when supported.object[]
Computed maintenance deadlines from the jurisdiction’s statutory rules and the mark’s lifecycle dates. Rules are authored to be non-overlapping per jurisdiction. First-class API fields, not scraped office text; they supplement office-reported dates such as
renewal_due_date. Empty for marks with nothing left to maintain (abandoned, withdrawn, surrendered, invalidated, refused); for savable-dead marks (expired, cancelled) only the still-actionable rows appear, such as an open late-renewal window or a restoration window.Show Deadline object
Show Deadline object
string
Stable, permanent slug of the statutory rule that produced this row, e.g.
us_declaration_of_use_s8. This is the row’s identity and the join key to List Deadline Rules, where the statutory citations, last_verified and effective_from live. Treat it as opaque: do not parse it. It is deliberately not a prefixed entity ID (tm_, own_) because it names a statutory rule, not a stored entity.string
Deadline type (e.g.,
renewal, declaration_of_use, restoration)string
Human-readable deadline name, for display. Not an identifier: use
rule_id to identify the rule.string
Jurisdiction this deadline applies to
string
The record date the computation was anchored on
string
Which date that was:
filing_date, registration_date, grant_date, protection_grant_date, intl_registration_date, reported_expiry when the ladder is anchored on the office-stated expiry, or reported_renewal_due when it is anchored on an office-stated renewal-due date and no expiry is storedstring
ISO date when the filing window opens
string
ISO date when the deadline is due
string | null
ISO date when the grace period ends
boolean
Whether this deadline repeats on a cycle
boolean
true for filings that are advantageous but not required (e.g. US §15 incontestability)string
What happens if this deadline is missed. One of
expiration (the right ends by operation of law when the term plus any grace runs out), removal_from_register (the office strikes the entry as the statutory consequence), cancellation (the office cancels a still-running registration for a missed maintenance filing, US §8/§71), cancellation_and_expiration (combined US §8+§9), expungement (Canada’s statutory word), lapse_of_international_registration (Madrid), permanent_loss (restoration rules: the last remedy has passed) or none (optional filing). Whether a remedy exists afterwards is said by the presence of a restoration rule, not by this value. See the deadline rules guide.object | null
Computed opposition period for offices and routes covered by Signa’s opposition rule registry:
rule_id, trigger_event, publication_date, window_opens, window_closes, close_adjustment, office_time_zone, rule_version, common_extension and reason. close_adjustment (moved | unchanged | not_checked) qualifies window_closes: it says whether the close was checked against the office’s holiday calendar and whether that check moved it. not_checked means no calendar stands behind the date — it falls outside the calendar’s pinned coverage years, the rule carries no calendar, or there is no close date at all — and because a rollover only ever moves a close later, such a date is correct-or-early. This block is clock-free, so you derive open/closed yourself: treat a not_checked close as indeterminate for the 20 days after it. rule_id is the stable, opaque slug of the opposition rule used, and the join key to List Opposition Rules. null means the office/route is not modeled yet or the rule engine intentionally fell back; an object whose window_opens and window_closes are both null means the office/route is modeled but no dates could be computed.reason names why in that case, as a snake_case code, and is null on every normal window. One value is emitted today: publication_date_kind_mismatch — the record’s publication-date provenance is not the publication the matched Madrid rule runs from (see Opposition windows). A record that simply has no publication date leaves reason null; the null publication_date already says that. Treat the vocabulary as open: branch on the codes you know and fall through on the rest.Show Other children
Show Other children
object[]
Vienna classification design codes
object[]
Alternative text representations of the mark
object[]
Disclaimers, descriptions of mark, etc.
object[]
Media files (images, sounds). Each entry carries
id (med_*), media_type, mime_type, url, and is_primary.media[].url (and primary_image_url) is an unauthenticated proxy that serves the image bytes directly: a 200 response with the image, not a redirect. It follows any upstream office redirect server-side, so there is nothing for your client to resolve. It is cache-safe for 24 hours (Cache-Control: public, max-age=86400, immutable) and sets cross-origin headers, so it is safe to drop straight into an <img src> — browsers cannot attach an Authorization header. Use the URL exactly as returned; do not construct it yourself.object[]
Convention priority claims
object[]
Filing bases (US-specific: use in commerce, intent to use, etc.)
object[]
Publication history (gazette/journal entries)
object | undefined
Office-specific data not captured by the standard schema. Omitted by default; returned only when
?include=office_extensions is requested.object
USPTO register data promoted from
office_extensions; absent for non-USPTO records or when register data is unavailableobject[]
EUIPO seniority claims promoted from trademark relationships.
country_code is uppercased, kind is national or international when EUIPO provides a known raw kind, and status uses lowercased EUIPO vocabulary: claimed, accepted, refused, partially_refused, abandoned, or deficiency. Empty array when none exist.Show Coverage (Madrid international registrations)
Show Coverage (Madrid international registrations)
object | null
Per-territory coverage for a grouped Madrid international registration: the same reconciled rollup the grouped search row carries, plus the per-designation detail the search row omits.
null on individual designation legs and on direct or regional marks, which cover exactly one territory.Show Coverage object
Show Coverage object
integer
Number of designated territories
object
Territory counts keyed by primary status (
active, pending, inactive, unknown)object
Territory counts keyed by lifecycle stage
object[]
Show Territory object
Show Territory object
string
Designated territory code (ISO 2-letter; WIPO’s
EM is rendered EU)string | null
Display name of the territory
string
The designation record covering this territory (
tm_*). Always present and always resolvable via Retrieve Trademark.string
Primary status in this territory
string
Lifecycle stage in this territory
string | null
Office-reported protection status (e.g.
protected, refused)string | null
ISO date the territory was designated
string | null
ISO date protection took effect
string | null
ISO date of a provisional or final refusal
string | null
ISO date the current territory status took effect
boolean | null
Whether the territory was added after the initial international registration
string | null
Treaty the designation was made under (e.g.
madrid_protocol)object[]
Reconciliation alternates for a dual-feed territory — the WIPO-feed record folded into the winning national-feed record, or vice versa. Empty for a single-feed territory. Each entry carries
source_office_code, territory_code, and an optional trademark reference.Show Relationships
Show Relationships
object[]
Mark-to-mark links. Madrid designations are not repeated here (they are
coverage.territories[]), and neither are seniority claims (they are seniority_claims[]). Party history (previous owners, representatives, and addresses) is not a mark-to-mark link and is not surfaced. Capped at 200 entries per mark.Show Relationship object
Show Relationship object
string
One of
based_on_basic_application, based_on_basic_registration, divisional_parent, partial_assignment_from, merged_into, transformed_from, replaces_under_4bis, partial_transfer_of, continuation_of.string
child when this mark is the source of the relationship, parent when it is the targetstring | null
The counterpart record (
tm_*), or null when the counterpart is not a record Signa holds — most based_on_basic_* edges are cross-office and unresolved. Identify those by target_office_code + target_record_id.string | null
ST.3 office code of the counterpart as reported by the office. Null on
parent edges (the counterpart is identified by trademark_id).string | null
Office-native identifier of the counterpart (application or registration number). Null on
parent edges (the counterpart is identified by trademark_id).string | null
ST.3 office code of the counterpart — the resolved record’s office when
trademark_id is set, otherwise the office-reported target_office_code.string | null
Mark text of the resolved counterpart record
string | null
Lifecycle stage of the resolved counterpart record
string | null
ISO date the relationship took effect, when the office reports one
Show Provenance
Show Provenance
object
Where this record came from and when Signa last saw it. See Data Freshness & Coverage for how often each office updates.
Show Counts and metadata
Show Counts and metadata
boolean
Whether the mark has any media files
string | null
Media-proxy URL for the mark’s primary image;
null when the mark has no media. Same unauthenticated image proxy as media[].url — a 200 with the image bytes.integer
Total number of events (fetch via Trademark Events)
integer
Total number of proceedings (fetch via Trademark Proceedings)
integer | null
Examiner refusal citations issued against this mark’s application (fetch via Trademark Citations).
0 means the office is covered and this mark has no citations. null means citations are not counted for this office at all, which is not the same as “no citations exist”. Check capabilities.citations on List Offices to tell which offices return a number (available) and which return null. A null count is also not a promise of an empty list: while a new office is being brought online, the citations endpoint can already return rows for a mark whose count is still null.string
ISO timestamp
string
ISO timestamp
string
Unique request identifier
{
"id": "tm_8kLm2nPq",
"object": "trademark",
"mark_text": "NIKE",
"mark_text_language": "en",
"mark_text_script": null,
"mark_feature_type": "word",
"mark_legal_category": "standard",
"right_kind": "trademark",
"is_series_mark": null,
"series_count": null,
"status": {
"primary": "active",
"stage": "registered",
"reason": null,
"challenges": [],
"effective_date": "1974-04-16",
"source": "explicit",
"raw_code": "800",
"raw_label": null
},
"office_code": "US",
"jurisdiction_code": "US",
"filing_route": "direct_national",
"scope_kind": "national",
"origin_office_code": null,
"source_primary_id": "72396458",
"application_number": "72396458",
"registration_number": "0978952",
"ir_number": null,
"filing_date": "1971-02-04",
"registration_date": "1974-04-16",
"expiry_date": "2034-04-16",
"expiry_date_basis": "derived",
"renewal_due_date": "2034-04-16",
"renewal_due_date_basis": "derived",
"publication_date": "1974-01-29",
"priority_date": null,
"termination_date": null,
"protection_effective_date": null,
"designation_date": null,
"dependency_period_end_date": null,
"transformation_deadline_date": null,
"is_retracted": false,
"owners": [
{
"id": "own_R3jK9mN2",
"name": "Nike, Inc.",
"country_code": "US",
"entity_type": "corporation",
"role": "owner",
"entity_id": "ent_019f34d6-2222-7777-8888-222222222222",
"entity_id_type": "resolved",
"address": {
"lines": ["One Bowerman Drive"],
"city": "BEAVERTON",
"state": "OR",
"postal_code": "97005",
"country_code": "US"
}
}
],
"attorneys": [
{
"id": "att_Lp3mN7qR",
"name": "Katelyn Andrews",
"firm_id": "firm_Xk9pQ2rS",
"firm_name": "Banner & Witcoff, Ltd.",
"role": "representative",
"address": {
"lines": ["1100 13th Street NW", "Suite 1200"],
"city": "WASHINGTON",
"state": "DC",
"postal_code": "20005",
"country_code": "US"
}
}
],
"classifications": [
{
"nice_class": 25,
"nice_edition": null,
"goods_services_text": "Clothing, footwear, headgear",
"goods_services_language": "en",
"status": "accepted",
"class_status_raw": "6",
"subclass_codes": null
}
],
"nice_classes": [25],
"design_codes": [],
"text_variants": [],
"statements": [],
"media": [
{
"id": "med_9mQ4pXk2",
"media_type": "image",
"mime_type": "image/png",
"url": "https://api.signa.so/v1/trademarks/tm_8kLm2nPq/media/med_9mQ4pXk2",
"is_primary": true
}
],
"priority_claims": [],
"filing_bases": [
{
"basis_type": "use_in_commerce",
"nice_class_number": 25,
"first_use_date": "1971-01-01",
"first_use_in_commerce_date": "1972-01-01",
"foreign_application_number": null,
"foreign_country_code": null
}
],
"publications": [],
"us_register": {
"register": "principal",
"acquired_distinctiveness": null,
"incontestable": false,
"standard_characters_claimed": false
},
"seniority_claims": [],
"derived": {
"ruleset_version": "2026-09-02",
"deadlines_supported": true,
"deadlines_unsupported_reason": null,
"deadlines": [
{
"rule_id": "us_renewal_s9",
"type": "combined_renewal_and_use",
"name": "Section 8+9 — Renewal + Declaration of Use",
"jurisdiction_code": "US",
"trigger_date": "2024-04-16",
"trigger_field": "registration_date",
"window_opens": "2033-04-16",
"due_date": "2034-04-17",
"grace_expiry": "2034-10-16",
"recurring": true,
"optional": false,
"consequence_if_missed": "cancellation_and_expiration"
}
],
"opposition_window": null
},
"has_media": true,
"primary_image_url": "https://api.signa.so/v1/trademarks/tm_8kLm2nPq/media/med_9mQ4pXk2",
"coverage": null,
"relationships": [],
"events_count": 21,
"proceedings_count": 0,
"citations_count": 2,
"provenance": {
"source_data_date": "2026-03-18",
"office_updated_at": "2022-10-28T00:00:00.000Z",
"retrieved_at": null
},
"created_at": "2026-03-22T08:27:23.446Z",
"updated_at": "2026-03-30T02:13:13.704Z",
"request_id": "req_01kp4v2yycy3pq3czhxcsmn9md"
}
{
"id": "tm_4pQ7rT2v",
"object": "trademark",
"mark_text": "MERIDIAN",
"office_code": "WO",
"jurisdiction_code": "WO",
"filing_route": "madrid_ir",
"scope_kind": "international_registration",
"ir_number": "1654321",
"origin_office_code": "US",
"coverage": {
"territory_count": 3,
"by_primary": { "active": 2, "pending": 1 },
"by_stage": { "registered": 2, "published": 1 },
"territories": [
{
"territory": "EU",
"territory_name": "European Union",
"trademark_id": "tm_9nR4sV8w",
"primary": "active",
"stage": "registered",
"protection_status": "protected",
"designation_date": "2022-04-11",
"protection_date": "2023-02-27",
"refusal_date": null,
"status_effective_date": "2023-02-27",
"is_subsequent_designation": false,
"designation_protocol": "madrid_protocol",
"source_records": []
},
{
"territory": "JP",
"territory_name": "Japan",
"trademark_id": "tm_2wX5yZ1a",
"primary": "active",
"stage": "registered",
"protection_status": "protected",
"designation_date": "2022-04-11",
"protection_date": "2023-06-09",
"refusal_date": "2022-11-02",
"status_effective_date": "2023-06-09",
"is_subsequent_designation": false,
"designation_protocol": "madrid_protocol",
"source_records": [
{
"source_office_code": "WO",
"territory_code": "JP",
"trademark": {
"id": "tm_6bC3dE9f",
"href": "/v1/trademarks/tm_6bC3dE9f"
}
}
]
},
{
"territory": "CA",
"territory_name": "Canada",
"trademark_id": "tm_8gH1jK5l",
"primary": "pending",
"stage": "published",
"protection_status": null,
"designation_date": "2024-01-30",
"protection_date": null,
"refusal_date": null,
"status_effective_date": "2024-08-14",
"is_subsequent_designation": true,
"designation_protocol": "madrid_protocol",
"source_records": []
}
]
},
"relationships": [
{
"type": "based_on_basic_registration",
"direction": "child",
"trademark_id": null,
"target_office_code": "US",
"target_record_id": "97123456",
"office_code": null,
"mark_text": null,
"status_stage": null,
"effective_date": "2022-04-11"
}
],
"provenance": {
"source_data_date": "2026-03-18",
"office_updated_at": "2026-03-17T00:00:00.000Z",
"retrieved_at": "2026-03-18T04:12:55.019Z"
},
"request_id": "req_01kp4v2yycy3pq3czhxcsmn9me"
}
Code Examples
curl "https://api.signa.so/v1/trademarks/tm_8kLm2nPq" \
-H "Authorization: Bearer $SIGNA_API_KEY"
import { Signa } from "@signa-so/sdk";
const signa = new Signa({ api_key: process.env.SIGNA_API_KEY });
const trademark = await signa.trademarks.retrieve("tm_8kLm2nPq");
console.log(trademark.mark_text, trademark.status.stage);
Errors
| Status | Type | When |
|---|---|---|
| 400 | validation_error | Invalid trademark ID format |
| 401 | unauthorized | Missing or invalid API key |
| 403 | forbidden | API key lacks the trademarks:read scope |
| 404 | not_found | Trademark ID does not exist |
| 429 | rate_limited | Rate limit exceeded |
Related Endpoints
- Search Trademarks: filtered search and browsing
- Batch Retrieve: hydrate multiple known IDs in one request
- Trademark Events: prosecution event timeline
- Trademark Proceedings: oppositions, cancellations, and other contested proceedings
- Trademark Citations: prior marks an examiner cited against this application
- Trademark Cited By: applications this mark was cited against