Skip to main content
POST
Batch Retrieve
Credits: 1 per record.

Overview

Fetch up to 100 trademarks in a single request. This is significantly more efficient than making individual GET /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_*), or
  • identifiers: an array of office-native identifiers (application number + office code, registration number + office code, or IR number).
You must supply exactly one of ids or identifiers. Every submitted item is answered exactly once, in input order: items that resolve are in data, items that do not match any trademark are in not_found. An item submitted twice appears twice. Batch is billed as read, 1 credit per submitted identifier, including the ones that come back in not_found. The reservation is taken before the lookup runs, so a batch of 100 needs 100 credits of balance; see Get Credit Pricing.

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_code (uppercase ST.3 office code, e.g. US; legacy lowercase like uspto accepted as an alias)
  • registration_number + office_code (for an international registration, the IR number without any WO prefix)
  • ir_number (no office; Madrid IRs are global)
Numbers are matched as sent first. One that finds nothing is tried again with spaces, commas, periods, slashes and hyphens removed, and a leading WO removed from an ir_number, when what is left is a number: 73/273,292, 1,201,370 and WO1874500 find 73273292, 1201370 and IR 1874500. A record stored with the separators always wins over the cleaned-up form. The response does not flag which form answered: each row in data carries the record’s own application_number, registration_number and ir_number, so compare those with what you sent when the difference matters.
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[]
Trademark detail-tier objects, one per submitted id or identifier that matched, in input order. An item submitted twice appears twice.
(string | object)[]
Inputs that could not be resolved, echoed verbatim in input order (malformed ids included). 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. Every submitted item is in exactly one of data or not_found.
boolean
Always false. Batch is not paginated.
object
Always { "cursor": null }.
string
Unique request identifier for support and debugging.

Code Examples

When to Use Batch vs. Individual Lookups

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.