q always ranks, similarity picks how, text filters decide which marks qualify, and exclusions leave marks out. This guide maps every old parameter to its replacement.
The old parameters keep working until December 28, 2026. Until then, each response that used one lists it in search_meta.deprecations, with its replacement and the sunset date. From December 28 they return 400 with unknown_parameter, naming the replacement.
This applies to GET and POST /v1/trademarks, the owner, attorney, firm and entity /trademarks lists, similarity watches, the MCP search_trademarks tool and TypeScript SDK 0.17.0.
What changes without a code change
Some changes reach every integration on the release date:- Default recall is wider.
qwithoutsimilarityrunsidentical,fuzzy,embeddedandlookalike. The old default wasexact,fuzzy. You now also get marks with a different first letter (LIMBER fortimber), look-alike characters (TIMB3R) and prefix phrases. Abbreviation matching and owner-name matching are gone; search owners with Search Owners.search_meta.ranking_versionreadsv12. - Cursors restart. Cursors issued before the release return
400 cursor_invalid. Start again from the first page. - Scores survive
sort. Withq,relevance_scoreandmatchare on every hit under anysort. They used to benull. - Timeouts fail instead of returning a partial page. A search that hits its time limit or loses a shard returns a retryable
503. Setallow_partial=trueto get the rows found so far withsearch_meta.complete: false. Thepartial_resultswarning is gone. - No quiet downgrades. A query too expensive to run returns
400withcode: too_complex. It used to be retried with fewer strategies and astrategies_reducedwarning. mark_text_not_containsignores punctuation and spacing, like the other text filters, and takes repeated keys for several values.- Skip warnings name a channel. A channel that can’t run on a
qadds<channel>_skipped, such asphonetic_skipped, with the channel inchannel.
Parameter map
Translated requests never return fewer marks than before. That is why a translated
strategies set can turn on more channels than its name suggests: the old strategies ran more matching than their names said. To get exactly the channels you want, send similarity yourself.
Response fields
match_explanation, matched_terms, search_meta.strategies_used and search_meta.match keep being filled from the new data until December 28, 2026, so existing parsers keep working. Switch to match before then. The fine-grained labels that strategies_matched used to show are in match.details.lanes with include=match_details.
Before and after
Choose the matching
Starts with, ends with, contains
match replaced q with a text test. The text filters are separate parameters, so they combine with a ranked q of a different value.
q used to list the newest filings first. It now lists in text order: marks equal to the value, then marks starting with it, then shorter marks, then newer filings. Add sort=-filing_date to keep the old order.
A list of exact spellings
POST bodies
strategies: ["exact", "phonetic"] translates to identical, lookalike and phonetic. Drop lookalike if you don’t want look-alike characters.
Reading why a mark matched
TypeScript SDK
SDK 0.17.0 removes the old keys from the types. The API still accepts them from older SDKs until December 28, 2026.Presets.knockout is identical,fuzzy,embedded, a fast first screen. Presets.clearance adds phonetic and lookalike. Both spread into list() or search(). list() sends text filters and exclusions as repeated keys and switches to POST when the URL would pass 2 KB.
Watches
Existing watches keep alerting exactly as before. Their matching changes only when you update the query with the new keys. Sending the stored query back unchanged changes nothing. To use the new matching, sendversion: "v3", or similarity or min_tier:
strategies or min_match_tier is kept as a legacy watch until you re-save it with the new keys: it is stored as sent and keeps its legacy lane set and tier gate, so it alerts exactly as before. The create, update, bulk and preview responses list each old key in deprecations, with its replacement and the 2026-12-28 sunset. Sending an old key with a new one (similarity, min_tier or version: "v3") returns 400 (conflicting_params). Watches don’t take text filters or exclusions yet.
Alerts gain match.tier, the same label a search hit carries. match.score is still the engine score for the watch query, not the 0 to 100 relevance_score. See Watches.
Checklist
- Search your code for
strategies,match,ranking_profile,queryin POST bodies, and list values inq. Replace each one using the map above. - Read
matchinstead ofmatch_explanationandmatched_terms. - Handle
503on searches, or sendallow_partial=trueand checksearch_meta.complete. - Restart any pagination walk that stored a cursor from before September 29, 2026.
- Watch your responses for
search_meta.deprecations. An empty list means the request is fully migrated. - Upgrade to SDK 0.17.0.