USPTO Trademark Assignments¶
Access trademark ownership-transfer history via the USPTO Assignment Center. No API key required.
Quick Start¶
from patent_client_agents.uspto_trademark_assignments import TrademarkAssignmentClient
async with TrademarkAssignmentClient() as client:
# By assignee company
records = await client.search_by_assignee("Apple Inc")
for r in records:
print(f"{r.reel_frame}: {r.assignors} -> {r.assignees}")
# By assignor (party transferring rights)
records = await client.search_by_assignor("Samsung", limit=50)
# By specific serial number
history = await client.search_by_serial("97123456")
# By registration number
history = await client.search_by_registration("5123456")
# Direct recordation lookup
record = await client.search_by_reel_frame("9006/0093")
Configuration¶
No credentials required. Rate limit is unpublished — the client's
hishel cache + default_retryer handle transient throttling.
Client¶
TrademarkAssignmentClient inherits from mcp_data_core.BaseAsyncClient.
Functions¶
| Function | Description |
|---|---|
search(criteria, start_row=1, limit=100) |
General search; takes [{property, searchBy}, ...] criterion list |
search_by_assignee(name) |
Company/person acquiring rights |
search_by_assignor(name) |
Company/person transferring rights |
search_by_serial(serial_number) |
Chain of title for a serial |
search_by_registration(registration_number) |
Chain of title for a registration |
search_by_reel_frame(reel_frame) |
Direct recordation lookup (e.g. 9006/0093) |
search_all(by, query) |
Paginated full-result iterator |
Result shape¶
class TrademarkAssignmentRecord(BaseModel):
reel_number: int
frame_number: str
reel_frame: str # computed "<reel>/<frame>"
assignor_execution_date: str | None
correspondent_name: str | None
domestic_representative: str | None
assignors: list[Assignor] # name + execution_date
assignees: list[str]
number_of_properties: int
properties: list[TrademarkProperty] # serial/registration, mark, dates
Usage patterns¶
from patent_client_agents.uspto_trademark_assignments import TrademarkAssignmentClient
async with TrademarkAssignmentClient() as client:
# Paginate for large result sets
all_records = await client.search_all(by="assignee", query="Apple Inc")
print(f"found {len(all_records)} assignments")
Error handling¶
Inherits typed exceptions from mcp_data_core:
NotFoundError, ApiError. No auth errors (public endpoint).