Search Trademarks
Search
Search Trademarks
Search, filter, and browse trademarks across all supported offices
GET
Search Trademarks
The canonical endpoint for discovering trademarks. Pass a text query to search by brand name with relevance ranking, or use filters to browse by office, status, class, date, and more. Every request must include at least one filter or a text query (
Available sort fields:
q).
Query Parameters
Search query text (1-500 characters). When provided, results are ranked by relevance using multi-strategy matching (exact + fuzzy by default). Optional — omit for filter-only browsing.
Search strategies to apply when
q is provided, comma-separated. Any combination of exact, fuzzy, phonetic, prefix. Defaults to exact,fuzzy for fast results. Use exact,phonetic,fuzzy,prefix for comprehensive trademark clearance searches.Results per page (1-100).
Opaque pagination cursor from a previous response.
When
true, includes an accurate total count in pagination.total_count.When
true, includes highlight snippets for mark_text and owner_names fields.Filters
All filter parameters are accepted at the top level of the query string. Arrays use comma-separated values. Date ranges support_gte, _gt, _lte, and _lt suffixes.
Office codes, comma-separated (e.g.
?offices=uspto,euipo).ISO jurisdiction codes, comma-separated (e.g.
?jurisdictions=US,EU).Nice classification numbers 1-45, comma-separated (e.g.
?nice_classes=9,42).Primary status:
active, pending, inactive, unknown. Comma-separated for multiple.Status stage, comma-separated (e.g.
registered, published, examining).Mark type:
word, figurative, combined, three_dimensional.Filing route:
direct_national, madrid_designation, direct_regional.Owner ID (
own_...). Marks for that single per-office owner record.Owner name substring match.
Resolved entity ID (
ent_...). Returns marks across all member owners of the entity (every office) — the global-portfolio filter. Accepts a derived ent_<owner-uuid>. An entity resolving to more than 10,000 member owners returns 422 entity_too_large with error.reason: member_owners_too_large (member_count / member_count_limit). See Entities.Entity GROUP ID (
ent_...). Returns marks across the whole GLEIF corporate family (root + all descendants) — “all Pfizer-group marks”. Group-level, never identity. Two 422 entity_too_large reasons apply: family_graph_too_large when the GLEIF family-graph walk exceeds its node/depth bound before owners are counted (carries related_entity_limit / depth_limit), or member_owners_too_large when the resolved member union exceeds the cap (carries member_count / member_count_limit).true to return marks whose owner has a confirmed active SEC ticker match. false means no confirmed public-company match, not confirmed private.true to return marks whose owner has a confirmed GLEIF LEI match. false means no confirmed LEI match.Exact owner ticker match, uppercased server-side (e.g.
AAPL).Exact owner LEI match, uppercased server-side.
Attorney ID (
att_...).Firm ID (
firm_...).Filing date lower bound (YYYY-MM-DD).
Filing date upper bound (exclusive).
Registration date lower bound.
Registration date upper bound.
Expiry date lower bound.
Expiry date upper bound.
true to require at least one image.true to restrict to Madrid Protocol filings.Examples
Response
Trademark summary records — the slimmer list shape with the fields most useful for result cards. See Get Trademark for the full record shape returned by single-record lookups.
Whether more results are available.
Pass this as
?cursor= to get the next page.Total matches. Only present when
include_total=true. Canonical location — read this field across every list endpoint.Emitted alongside
total_count. false when the count is exact; true when the search index capped the count at 10,000 for a deep search.Query metadata:
search_id, query, strategies_used, execution_time_ms.Empty object
{} on GET requests. Populated with faceted counts on POST when options.aggregations is provided.Normalized relevance score. Present when
q is provided, null for filter-only queries or when sort is specified.Explains relevance scoring. Omitted when
sort is specified.URL to the primary trademark image. Format:
https://api.signa.so/v1/trademarks/{id}/media/{media_id}. Only present when has_media is true, null otherwise.Summary-tier owner projections for search-backed rows. Omitted on some DB-backed summary rows.
Sort
By default, results are ranked by relevance whenq is provided. For filter-only queries (no q), results are returned in index order (fast, unordered).
To explicitly sort results, use the sort parameter:
filing_date, registration_date, expiry_date, renewal_due_date, updated_at, publication_date, termination_date, office_code, jurisdiction_code.
When
sort is specified alongside q, relevance scoring is bypassed — results are ordered purely by the sort field(s) and relevance_score will be null.Errors
| Status | Type | When |
|---|---|---|
| 400 | validation_error | No filter or query supplied, invalid date range, unknown sort field |
| 401 | unauthorized | Missing or invalid API key |
| 429 | rate_limited | Rate limit exceeded (details) |
Advanced: POST with JSON body
For complex queries with aggregations or long filter lists, usePOST /v1/trademarks with a JSON body. This accepts the same filters and returns the same response shape.
POST /v1/trademarks is idempotency-exempt (it is a read-shaped
search): the Idempotency-Key header is not required, and if you send one
it is not enforced or replayed — the value’s format is still validated.
GET does not take one.POST-only features
options.aggregations— an array of field names to aggregate. Returns faceted counts for building filter UIs. Valid values:status_stage,office_code,jurisdiction_code,nice_classes,filing_year,mark_feature_type,mark_legal_category,filing_route,right_kind,scope_kind.options.aggregations_only— return only counts, skip result documents
POST example
cURL
Related
- Suggest Trademarks — typeahead autocomplete
- Get Trademark — full detail for a single mark
- Batch Get Trademarks — hydrate known IDs