Skip to content

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).