Batch Get Trademarks
curl --request POST \
--url https://api.signa.so/v1/trademarks/batch \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"ids": [
"<string>"
],
"identifiers": [
{
"application_number": "<string>",
"registration_number": "<string>",
"ir_number": "<string>",
"office": "<string>"
}
],
"include": [
"<string>"
]
}
'import requests
url = "https://api.signa.so/v1/trademarks/batch"
payload = {
"ids": ["<string>"],
"identifiers": [
{
"application_number": "<string>",
"registration_number": "<string>",
"ir_number": "<string>",
"office": "<string>"
}
],
"include": ["<string>"]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
ids: ['<string>'],
identifiers: [
{
application_number: '<string>',
registration_number: '<string>',
ir_number: '<string>',
office: '<string>'
}
],
include: ['<string>']
})
};
fetch('https://api.signa.so/v1/trademarks/batch', 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/batch",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'ids' => [
'<string>'
],
'identifiers' => [
[
'application_number' => '<string>',
'registration_number' => '<string>',
'ir_number' => '<string>',
'office' => '<string>'
]
],
'include' => [
'<string>'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.signa.so/v1/trademarks/batch"
payload := strings.NewReader("{\n \"ids\": [\n \"<string>\"\n ],\n \"identifiers\": [\n {\n \"application_number\": \"<string>\",\n \"registration_number\": \"<string>\",\n \"ir_number\": \"<string>\",\n \"office\": \"<string>\"\n }\n ],\n \"include\": [\n \"<string>\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.signa.so/v1/trademarks/batch")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"ids\": [\n \"<string>\"\n ],\n \"identifiers\": [\n {\n \"application_number\": \"<string>\",\n \"registration_number\": \"<string>\",\n \"ir_number\": \"<string>\",\n \"office\": \"<string>\"\n }\n ],\n \"include\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.signa.so/v1/trademarks/batch")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"ids\": [\n \"<string>\"\n ],\n \"identifiers\": [\n {\n \"application_number\": \"<string>\",\n \"registration_number\": \"<string>\",\n \"ir_number\": \"<string>\",\n \"office\": \"<string>\"\n }\n ],\n \"include\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"object": "list",
"data": [
{
"id": "tm_8kLm2nPq",
"object": "trademark",
"mark_text": "AURORA",
"mark_text_language": "en",
"mark_text_script": null,
"mark_feature_type": "word",
"mark_legal_category": "standard",
"right_kind": "trademark",
"is_series_mark": false,
"series_count": null,
"status": {
"primary": "active",
"stage": "registered",
"reason": null,
"challenges": [],
"effective_date": "2024-09-18",
"source": "explicit",
"raw_code": "800",
"raw_label": "Registered"
},
"office_code": "US",
"jurisdiction_code": "US",
"filing_route": "direct_national",
"scope_kind": "national",
"origin_office_code": null,
"source_primary_id": "97123456",
"application_number": "97123456",
"registration_number": "7123456",
"ir_number": null,
"filing_date": "2023-04-12",
"registration_date": "2024-09-18",
"expiry_date": "2034-09-18",
"expiry_date_basis": "derived",
"renewal_due_date": "2034-09-18",
"publication_date": "2024-06-01",
"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": "Aurora Digital Inc.",
"country_code": "US",
"entity_type": "corporation",
"role": "owner",
"address": {
"lines": ["100 Market Street"],
"city": "SAN FRANCISCO",
"state": "CA",
"postal_code": "94105",
"country_code": "US"
}
}
],
"attorneys": [
{
"id": "att_Lp3mN7qR",
"name": "Jane Smith",
"firm_id": "firm_Xk9pQ2rS",
"firm_name": "Smith & Associates LLP",
"role": "representative",
"address": {
"lines": ["200 Main Street", "Suite 400"],
"city": "SAN FRANCISCO",
"state": "CA",
"postal_code": "94105",
"country_code": "US"
}
}
],
"classifications": [
{
"nice_class": 9,
"nice_edition": "12",
"goods_services_text": "Computer software for data analytics",
"goods_services_language": "en",
"status": null,
"class_status_raw": null
},
{
"nice_class": 35,
"nice_edition": "12",
"goods_services_text": "Business consulting services",
"goods_services_language": "en",
"status": null,
"class_status_raw": null
},
{
"nice_class": 42,
"nice_edition": "12",
"goods_services_text": "Cloud computing services",
"goods_services_language": "en",
"status": null,
"class_status_raw": null
}
],
"design_codes": [],
"text_variants": [],
"statements": [],
"media": [],
"priority_claims": [],
"filing_bases": [],
"publications": [],
"office_extensions": {},
"deadlines": [],
"madrid": null,
"has_media": false,
"events_count": 12,
"proceedings_count": 0,
"coverage_count": 0,
"relationships_count": 0,
"data_freshness": {
"source_data_date": "2026-04-10",
"source_format": "dtd_v2",
"last_updated_at": "2026-04-10T06:00:00.000Z"
},
"created_at": "2025-08-01T12:00:00.000Z",
"updated_at": "2026-04-10T06:00:00.000Z"
}
],
"not_found": ["tm_Zr5nK8jL"],
"has_more": false,
"pagination": { "cursor": null },
"request_id": "req_bT9kM3nP"
}
Retrieve
Batch Get Trademarks
Retrieve multiple trademarks by ID or office-native identifiers in a single request
POST
/
v1
/
trademarks
/
batch
Batch Get Trademarks
curl --request POST \
--url https://api.signa.so/v1/trademarks/batch \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"ids": [
"<string>"
],
"identifiers": [
{
"application_number": "<string>",
"registration_number": "<string>",
"ir_number": "<string>",
"office": "<string>"
}
],
"include": [
"<string>"
]
}
'import requests
url = "https://api.signa.so/v1/trademarks/batch"
payload = {
"ids": ["<string>"],
"identifiers": [
{
"application_number": "<string>",
"registration_number": "<string>",
"ir_number": "<string>",
"office": "<string>"
}
],
"include": ["<string>"]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
ids: ['<string>'],
identifiers: [
{
application_number: '<string>',
registration_number: '<string>',
ir_number: '<string>',
office: '<string>'
}
],
include: ['<string>']
})
};
fetch('https://api.signa.so/v1/trademarks/batch', 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/batch",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'ids' => [
'<string>'
],
'identifiers' => [
[
'application_number' => '<string>',
'registration_number' => '<string>',
'ir_number' => '<string>',
'office' => '<string>'
]
],
'include' => [
'<string>'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.signa.so/v1/trademarks/batch"
payload := strings.NewReader("{\n \"ids\": [\n \"<string>\"\n ],\n \"identifiers\": [\n {\n \"application_number\": \"<string>\",\n \"registration_number\": \"<string>\",\n \"ir_number\": \"<string>\",\n \"office\": \"<string>\"\n }\n ],\n \"include\": [\n \"<string>\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.signa.so/v1/trademarks/batch")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"ids\": [\n \"<string>\"\n ],\n \"identifiers\": [\n {\n \"application_number\": \"<string>\",\n \"registration_number\": \"<string>\",\n \"ir_number\": \"<string>\",\n \"office\": \"<string>\"\n }\n ],\n \"include\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.signa.so/v1/trademarks/batch")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"ids\": [\n \"<string>\"\n ],\n \"identifiers\": [\n {\n \"application_number\": \"<string>\",\n \"registration_number\": \"<string>\",\n \"ir_number\": \"<string>\",\n \"office\": \"<string>\"\n }\n ],\n \"include\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"object": "list",
"data": [
{
"id": "tm_8kLm2nPq",
"object": "trademark",
"mark_text": "AURORA",
"mark_text_language": "en",
"mark_text_script": null,
"mark_feature_type": "word",
"mark_legal_category": "standard",
"right_kind": "trademark",
"is_series_mark": false,
"series_count": null,
"status": {
"primary": "active",
"stage": "registered",
"reason": null,
"challenges": [],
"effective_date": "2024-09-18",
"source": "explicit",
"raw_code": "800",
"raw_label": "Registered"
},
"office_code": "US",
"jurisdiction_code": "US",
"filing_route": "direct_national",
"scope_kind": "national",
"origin_office_code": null,
"source_primary_id": "97123456",
"application_number": "97123456",
"registration_number": "7123456",
"ir_number": null,
"filing_date": "2023-04-12",
"registration_date": "2024-09-18",
"expiry_date": "2034-09-18",
"expiry_date_basis": "derived",
"renewal_due_date": "2034-09-18",
"publication_date": "2024-06-01",
"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": "Aurora Digital Inc.",
"country_code": "US",
"entity_type": "corporation",
"role": "owner",
"address": {
"lines": ["100 Market Street"],
"city": "SAN FRANCISCO",
"state": "CA",
"postal_code": "94105",
"country_code": "US"
}
}
],
"attorneys": [
{
"id": "att_Lp3mN7qR",
"name": "Jane Smith",
"firm_id": "firm_Xk9pQ2rS",
"firm_name": "Smith & Associates LLP",
"role": "representative",
"address": {
"lines": ["200 Main Street", "Suite 400"],
"city": "SAN FRANCISCO",
"state": "CA",
"postal_code": "94105",
"country_code": "US"
}
}
],
"classifications": [
{
"nice_class": 9,
"nice_edition": "12",
"goods_services_text": "Computer software for data analytics",
"goods_services_language": "en",
"status": null,
"class_status_raw": null
},
{
"nice_class": 35,
"nice_edition": "12",
"goods_services_text": "Business consulting services",
"goods_services_language": "en",
"status": null,
"class_status_raw": null
},
{
"nice_class": 42,
"nice_edition": "12",
"goods_services_text": "Cloud computing services",
"goods_services_language": "en",
"status": null,
"class_status_raw": null
}
],
"design_codes": [],
"text_variants": [],
"statements": [],
"media": [],
"priority_claims": [],
"filing_bases": [],
"publications": [],
"office_extensions": {},
"deadlines": [],
"madrid": null,
"has_media": false,
"events_count": 12,
"proceedings_count": 0,
"coverage_count": 0,
"relationships_count": 0,
"data_freshness": {
"source_data_date": "2026-04-10",
"source_format": "dtd_v2",
"last_updated_at": "2026-04-10T06:00:00.000Z"
},
"created_at": "2025-08-01T12:00:00.000Z",
"updated_at": "2026-04-10T06:00:00.000Z"
}
],
"not_found": ["tm_Zr5nK8jL"],
"has_more": false,
"pagination": { "cursor": null },
"request_id": "req_bT9kM3nP"
}
Overview
Fetch up to 100 trademarks in a single request. This is significantly more efficient than making individualGET /v1/trademarks/{id} calls when hydrating a list of known marks, e.g. after a search or when loading a portfolio view.
The endpoint accepts either:
ids: an array of Signa public IDs (tm_*), oridentifiers: an array of office-native identifiers (application number + office, registration number + office, or IR number).
ids or identifiers. Items that resolve are returned in the data array; items that do not match any trademark are returned in the not_found array, so callers can reconcile the inputs against the response.
Request Body
string[]
Array of Signa trademark IDs (
tm_*), max 100. Mutually exclusive with identifiers.object[]
Array of office-native identifiers, max 100. Mutually exclusive with
ids. Each entry must include exactly one of:application_number+office(uppercase ST.3 office code, e.g.US; legacy lowercase likeusptoaccepted as an alias)registration_number+officeir_number(no office; Madrid IRs are global)
string[]
Optional detail projections, applied to every trademark in the response.
office_extensions includes each trademark’s office_extensions object (raw office-specific data), which is otherwise omitted. There is no fields= sparse projection on batch; each returned trademark is the full detail tier.Response
string
Always
list.object[]
Array of trademark detail-tier objects matching the requested inputs.
(string | object)[]
Inputs that could not be resolved. When
ids was supplied, this is an array of the unresolved Signa IDs. When identifiers was supplied, this is an array of the original identifier objects that did not match. Callers should diff this against the input list to know what to retry or surface.boolean
Always
false. Batch is not paginated.object
Always
{ "cursor": null }.string
Unique request identifier for support and debugging.
{
"object": "list",
"data": [
{
"id": "tm_8kLm2nPq",
"object": "trademark",
"mark_text": "AURORA",
"mark_text_language": "en",
"mark_text_script": null,
"mark_feature_type": "word",
"mark_legal_category": "standard",
"right_kind": "trademark",
"is_series_mark": false,
"series_count": null,
"status": {
"primary": "active",
"stage": "registered",
"reason": null,
"challenges": [],
"effective_date": "2024-09-18",
"source": "explicit",
"raw_code": "800",
"raw_label": "Registered"
},
"office_code": "US",
"jurisdiction_code": "US",
"filing_route": "direct_national",
"scope_kind": "national",
"origin_office_code": null,
"source_primary_id": "97123456",
"application_number": "97123456",
"registration_number": "7123456",
"ir_number": null,
"filing_date": "2023-04-12",
"registration_date": "2024-09-18",
"expiry_date": "2034-09-18",
"expiry_date_basis": "derived",
"renewal_due_date": "2034-09-18",
"publication_date": "2024-06-01",
"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": "Aurora Digital Inc.",
"country_code": "US",
"entity_type": "corporation",
"role": "owner",
"address": {
"lines": ["100 Market Street"],
"city": "SAN FRANCISCO",
"state": "CA",
"postal_code": "94105",
"country_code": "US"
}
}
],
"attorneys": [
{
"id": "att_Lp3mN7qR",
"name": "Jane Smith",
"firm_id": "firm_Xk9pQ2rS",
"firm_name": "Smith & Associates LLP",
"role": "representative",
"address": {
"lines": ["200 Main Street", "Suite 400"],
"city": "SAN FRANCISCO",
"state": "CA",
"postal_code": "94105",
"country_code": "US"
}
}
],
"classifications": [
{
"nice_class": 9,
"nice_edition": "12",
"goods_services_text": "Computer software for data analytics",
"goods_services_language": "en",
"status": null,
"class_status_raw": null
},
{
"nice_class": 35,
"nice_edition": "12",
"goods_services_text": "Business consulting services",
"goods_services_language": "en",
"status": null,
"class_status_raw": null
},
{
"nice_class": 42,
"nice_edition": "12",
"goods_services_text": "Cloud computing services",
"goods_services_language": "en",
"status": null,
"class_status_raw": null
}
],
"design_codes": [],
"text_variants": [],
"statements": [],
"media": [],
"priority_claims": [],
"filing_bases": [],
"publications": [],
"office_extensions": {},
"deadlines": [],
"madrid": null,
"has_media": false,
"events_count": 12,
"proceedings_count": 0,
"coverage_count": 0,
"relationships_count": 0,
"data_freshness": {
"source_data_date": "2026-04-10",
"source_format": "dtd_v2",
"last_updated_at": "2026-04-10T06:00:00.000Z"
},
"created_at": "2025-08-01T12:00:00.000Z",
"updated_at": "2026-04-10T06:00:00.000Z"
}
],
"not_found": ["tm_Zr5nK8jL"],
"has_more": false,
"pagination": { "cursor": null },
"request_id": "req_bT9kM3nP"
}
{
"object": "list",
"data": [
{
"id": "tm_8kLm2nPq",
"object": "trademark",
"mark_text": "AURORA",
"mark_feature_type": "word",
"mark_legal_category": "standard",
"right_kind": "trademark",
"status": {
"primary": "active",
"stage": "registered",
"reason": null,
"challenges": [],
"effective_date": "2024-09-18",
"source": "explicit",
"raw_code": "800",
"raw_label": "Registered"
},
"office_code": "US",
"jurisdiction_code": "US",
"filing_route": "direct_national",
"scope_kind": "national",
"application_number": "97123456",
"registration_number": "7123456",
"filing_date": "2023-04-12",
"registration_date": "2024-09-18",
"expiry_date": "2034-09-18",
"owners": [
{
"id": "own_R3jK9mN2",
"name": "Aurora Digital Inc.",
"country_code": "US",
"entity_type": "corporation",
"role": "owner",
"address": {
"lines": ["100 Market Street"],
"city": "SAN FRANCISCO",
"state": "CA",
"postal_code": "94105",
"country_code": "US"
}
}
],
"classifications": [
{
"nice_class": 9,
"nice_edition": "12",
"goods_services_text": "Computer software for data analytics",
"goods_services_language": "en",
"status": null,
"class_status_raw": null
}
],
"attorneys": [],
"design_codes": [],
"text_variants": [],
"statements": [],
"media": [],
"priority_claims": [],
"filing_bases": [],
"publications": [],
"office_extensions": {},
"deadlines": [],
"madrid": null,
"has_media": false,
"events_count": 5,
"proceedings_count": 0,
"coverage_count": 0,
"relationships_count": 0,
"data_freshness": {
"source_data_date": "2026-04-10",
"source_format": "dtd_v2",
"last_updated_at": "2026-04-10T06:00:00.000Z"
},
"created_at": "2025-08-01T12:00:00.000Z",
"updated_at": "2026-04-10T06:00:00.000Z"
}
],
"not_found": [
{ "registration_number": "9999999", "office": "US" }
],
"has_more": false,
"pagination": { "cursor": null },
"request_id": "req_cL2nP4qR"
}
Code Examples
curl -X POST "https://api.signa.so/v1/trademarks/batch" \
-H "Authorization: Bearer sig_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"ids": ["tm_8kLm2nPq", "tm_Xp4wQ7vR", "tm_Zr5nK8jL"]
}'
curl -X POST "https://api.signa.so/v1/trademarks/batch" \
-H "Authorization: Bearer sig_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"identifiers": [
{ "application_number": "97123456", "office": "US" },
{ "registration_number": "6789012", "office": "US" },
{ "ir_number": "1234567" }
]
}'
import { Signa } from "@signa-so/sdk";
const signa = new Signa({ api_key: process.env.SIGNA_API_KEY });
const result = await signa.trademarks.batch({
identifiers: [
{ application_number: "97123456", office: "US" },
{ registration_number: "6789012", office: "US" },
{ ir_number: "1234567" },
],
});
console.log(`Resolved ${result.data.length}, missing ${result.not_found.length}`);
When to Use Batch vs. Individual Lookups
| Scenario | Recommended Approach |
|---|---|
| Display a single trademark detail page | Individual Get Trademark |
| Hydrate a dashboard with 10-50 known IDs | Batch (this endpoint) |
| Sync a portfolio of trademarks periodically | Batch, chunked into groups of 100 |
| Search for trademarks matching criteria | List Trademarks |
| Iterate through all trademarks in your org | Paginated List Trademarks |
A batch request of 50 IDs counts as one request against your rate limit, not 50. Use batches whenever you know the IDs upfront. See Rate Limits.
Keep batch sizes at or below 100 items. Requests with more than 100 IDs are rejected with a
400 validation error.A batch request returns HTTP
200 even if some requested items are not found. Always check the not_found array to reconcile against your input list. For chunking strategies when you have more than 100 IDs, see the Bulk operations guide.Errors
| Status | Type | Description |
|---|---|---|
| 400 | validation_error | Both ids and identifiers supplied, neither supplied, more than 100 items, or an identifier missing the required office field |
| 401 | unauthorized | Missing or invalid API key |
| 403 | forbidden | API key lacks the trademarks:read scope |
| 429 | rate_limited | Rate limit exceeded |
Related Endpoints
- Get Trademark: single trademark lookup
- List Trademarks: filtered listing with pagination
⌘I