Skip to content

USPTO Assignments

Access patent ownership transfer history via the USPTO Assignment Center. No API key required.

Quick Start

from patent_client_agents.uspto_assignments import AssignmentCenterClient

async with AssignmentCenterClient() as client:
    # By assignee company
    records = await client.search_by_assignee("[Company Name]")
    for r in records:
        print(f"{r.reel_frame}: {r.assignor_name} -> {r.assignee_name}")

    # By specific patent
    history = await client.search_by_patent("10123456")

    # By application number
    app_records = await client.search_by_application("16123456")

Configuration

No credentials required. Rate limit is unpublished — the client's hishel cache + default_retryer handle transient throttling.

Client

AssignmentCenterClient inherits from law_tools_core.BaseAsyncClient.

Functions

Function Description
search(**kwargs) General search by any field
search_by_assignee(name) Company/person acquiring rights
search_by_assignor(name) Company/person transferring rights
search_by_patent(patent_number) Chain of title for a patent
search_by_application(application_number) Chain of title for an app
search_by_reel_frame(reel_frame) Direct record lookup (e.g. 52614/446)
search_all(**kwargs) Paginated full-result iterator

Result shape

class AssignmentRecord(BaseModel):
    reel_frame: str
    recording_date: date | None
    conveyance_type: str
    assignor_name: str
    assignee_name: str
    assignee_address: str | None
    properties: list[AssignmentProperty]  # patents/applications transferred

Usage patterns

from patent_client_agents.uspto_assignments import AssignmentCenterClient

async with AssignmentCenterClient() as client:
    # Paginate for large result sets
    all_records = await client.search_all(assignee_name="[Company Name]")
    print(f"found {len(all_records)} assignments")

Error handling

Inherits typed exceptions from law_tools_core: NotFoundError, ApiError. No auth errors (public endpoint).