Access USPTO APIs for patent/trademark searches, examination history (PEDS), assignments, citations, office actions, TSDR, for IP analysis and prior art searches.
USPTO provides specialized APIs for patent and trademark data. Search patents by keywords/inventors/assignees, retrieve examination history via PEDS, track assignments, analyze citations and office actions, access TSDR for trademarks, for IP analysis and prior art searches.
When to Use This Skill
This skill should be used when:
Patent Search: Finding patents by keywords, inventors, assignees, classifications, or dates
Patent Details: Retrieving full patent data including claims, abstracts, citations
Trademark Search: Looking up trademarks by serial or registration number
Trademark Status: Checking trademark status, ownership, and prosecution history
Examination History: Accessing patent prosecution data from PEDS (Patent Examination Data System)
Office Actions: Retrieving office action text, citations, and rejections
/claims, /brief_summary_text, /detail_description_text - Text data (beta)
Reference Documentation
See references/patentsearch_api.md for complete PatentSearch API documentation including:
All available endpoints
Complete field reference
Query syntax and examples
Response formats
Rate limits and best practices
Task 2: Retrieving Patent Examination Data
Using PEDS (Patent Examination Data System)
PEDS provides comprehensive prosecution history including transaction events, status changes, and examination timeline.
Installation
uv pip install uspto-opendata-python
Basic PEDS Usage
Get application data:
from scripts.peds_client import PEDSHelper
helper = PEDSHelper()
# By application number
app_data = helper.get_application("16123456")
print(f"Title: {app_data['title']}")
print(f"Status: {app_data['app_status']}")
# By patent number
patent_data = helper.get_patent("11234567")
Get transaction history:
transactions = helper.get_transaction_history("16123456")
for trans in transactions:
print(f"{trans['date']}: {trans['code']} - {trans['description']}")
Get office actions:
office_actions = helper.get_office_actions("16123456")
for oa in office_actions:
if oa['code'] == 'CTNF':
print(f"Non-final rejection: {oa['date']}")
elif oa['code'] == 'CTFR':
print(f"Final rejection: {oa['date']}")
elif oa['code'] == 'NOA':
print(f"Notice of allowance: {oa['date']}")
See references/peds_api.md for complete PEDS documentation including:
All available data fields
Transaction code reference
Python library usage
Portfolio analysis examples
Task 3: Searching and Monitoring Trademarks
Using TSDR (Trademark Status & Document Retrieval)
Access trademark status, ownership, and prosecution history.
Basic Trademark Usage
Get trademark by serial number:
from scripts.trademark_client import TrademarkClient
client = TrademarkClient()
# By serial number
tm_data = client.get_trademark_by_serial("87654321")
# By registration number
tm_data = client.get_trademark_by_registration("5678901")
Get trademark status:
status = client.get_trademark_status("87654321")
print(f"Mark: {status['mark_text']}")
print(f"Status: {status['status']}")
print(f"Filing date: {status['filing_date']}")
if status['is_registered']:
print(f"Registration #: {status['registration_number']}")
print(f"Registration date: {status['registration_date']}")
Check trademark health:
health = client.check_trademark_health("87654321")
print(f"Mark: {health['mark']}")
print(f"Status: {health['status']}")
for alert in health['alerts']:
print(alert)
if health['needs_attention']:
print("⚠️ This mark needs attention!")
Trademark Portfolio Monitoring
Monitor multiple trademarks:
def monitor_portfolio(serial_numbers, api_key):
"""Monitor trademark portfolio health."""
client = TrademarkClient(api_key)
results = {
'active': [],
'pending': [],
'problems': []
}
for sn in serial_numbers:
health = client.check_trademark_health(sn)
if 'REGISTERED' in health['status']:
results['active'].append(health)
elif 'PENDING' in health['status'] or 'PUBLISHED' in health['status']:
results['pending'].append(health)
elif health['needs_attention']:
results['problems'].append(health)
return results
Common Trademark Statuses
REGISTERED - Active registered mark
PENDING - Under examination
PUBLISHED FOR OPPOSITION - In opposition period
ABANDONED - Application abandoned
CANCELLED - Registration cancelled
SUSPENDED - Examination suspended
REGISTERED AND RENEWED - Registration renewed
Reference Documentation
See references/trademark_api.md for complete trademark API documentation including:
TSDR API reference
Trademark Assignment Search API
All status codes
Prosecution history access
Ownership tracking
Task 4: Tracking Assignments and Ownership
Patent and Trademark Assignments
Both patents and trademarks have Assignment Search APIs for tracking ownership changes.
Patent Assignment API
Base URL: https://assignment-api.uspto.gov/patent/v1.4/
Search by patent number:
import requests
import xml.etree.ElementTree as ET
def get_patent_assignments(patent_number, api_key):
url = f"https://assignment-api.uspto.gov/patent/v1.4/assignment/patent/{patent_number}"
headers = {"X-Api-Key": api_key}
response = requests.get(url, headers=headers)
if response.status_code == 200:
return response.text # Returns XML
assignments_xml = get_patent_assignments("11234567", api_key)
root = ET.fromstring(assignments_xml)
for assignment in root.findall('.//assignment'):
recorded_date = assignment.find('recordedDate').text
assignor = assignment.find('.//assignor/name').text
assignee = assignment.find('.//assignee/name').text
conveyance = assignment.find('conveyanceText').text
print(f"{recorded_date}: {assignor} → {assignee}")
print(f" Type: {conveyance}\n")