uspto-database by davila7/claude-code-templates
npx skills add https://github.com/davila7/claude-code-templates --skill uspto-databaseUSPTO 为专利和商标数据提供专门的 API。可通过关键词/发明人/受让人搜索专利,通过 PEDS 检索审查历史,跟踪转让,分析引证和审查意见,通过 TSDR 访问商标数据,用于知识产权分析和现有技术检索。
此技能应在以下情况下使用:
USPTO 为不同的数据需求提供多个专门的 API:
PatentSearch API - 基于 ElasticSearch 的现代专利搜索(已于 2025 年 5 月取代旧的 PatentsView)
https://search.patentsview.org/api/v1/广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
PEDS(专利审查数据系统) - 专利审查历史
uspto-opendata-python Python 库TSDR(商标状态和文件检索) - 商标数据
https://tsdrapi.uspto.gov/ts/cd/所有 USPTO API 都需要 API 密钥。请在此处注册:https://account.uspto.gov/api-manager/
将 API 密钥设置为环境变量:
export USPTO_API_KEY="your_api_key_here"
此技能包含用于常见操作的 Python 脚本:
scripts/patent_search.py - 用于搜索专利的 PatentSearch API 客户端scripts/peds_client.py - 用于审查历史的 PEDS 客户端scripts/trademark_client.py - 用于商标数据的 TSDR 客户端PatentSearch API 使用带有各种操作符的 JSON 查询语言,以实现灵活的搜索。
按摘要中的关键词搜索:
from scripts.patent_search import PatentSearchClient
client = PatentSearchClient()
# 搜索机器学习专利
results = client.search_patents({
"patent_abstract": {"_text_all": ["machine", "learning"]}
})
for patent in results['patents']:
print(f"{patent['patent_number']}: {patent['patent_title']}")
按发明人搜索:
results = client.search_by_inventor("John Smith")
按受让人/公司搜索:
results = client.search_by_assignee("Google")
按日期范围搜索:
results = client.search_by_date_range("2024-01-01", "2024-12-31")
按 CPC 分类搜索:
results = client.search_by_classification("H04N") # 视频/图像技术
使用逻辑操作符组合多个条件:
results = client.advanced_search(
keywords=["artificial", "intelligence"],
assignee="Microsoft",
start_date="2023-01-01",
end_date="2024-12-31",
cpc_codes=["G06N", "G06F"] # AI 和计算分类
)
对于复杂查询,直接使用 API:
import requests
url = "https://search.patentsview.org/api/v1/patent"
headers = {
"X-Api-Key": "YOUR_API_KEY",
"Content-Type": "application/json"
}
query = {
"q": {
"_and": [
{"patent_date": {"_gte": "2024-01-01"}},
{"assignee_organization": {"_text_any": ["Google", "Alphabet"]}},
{"cpc_subclass_id": ["G06N", "H04N"]}
]
},
"f": ["patent_number", "patent_title", "patent_date", "inventor_name"],
"s": [{"patent_date": "desc"}],
"o": {"per_page": 100, "page": 1}
}
response = requests.post(url, headers=headers, json=query)
results = response.json()
{"field": "value"} 或 {"field": {"_eq": "value"}}_gt、_gte、_lt、_lte、_neq_text_all、_text_any、_text_phrase_begins、_contains_and、_or、_not最佳实践:对文本字段使用 _text_* 操作符(比 _contains 或 _begins 性能更好)
/patent - 已授权专利/publication - 预授权公开/inventor - 发明人信息/assignee - 受让人信息/cpc_subclass、/cpc_at_issue - CPC 分类/uspc - 美国专利分类/ipc - 国际专利分类/claims、/brief_summary_text、/detail_description_text - 文本数据(测试版)有关完整的 PatentSearch API 文档,请参阅 references/patentsearch_api.md,包括:
PEDS 提供全面的审查历史,包括交易事件、状态变更和审查时间线。
uv pip install uspto-opendata-python
获取申请数据:
from scripts.peds_client import PEDSHelper
helper = PEDSHelper()
# 按申请号
app_data = helper.get_application("16123456")
print(f"标题:{app_data['title']}")
print(f"状态:{app_data['app_status']}")
# 按专利号
patent_data = helper.get_patent("11234567")
获取交易历史:
transactions = helper.get_transaction_history("16123456")
for trans in transactions:
print(f"{trans['date']}: {trans['code']} - {trans['description']}")
获取审查意见:
office_actions = helper.get_office_actions("16123456")
for oa in office_actions:
if oa['code'] == 'CTNF':
print(f"非最终驳回:{oa['date']}")
elif oa['code'] == 'CTFR':
print(f"最终驳回:{oa['date']}")
elif oa['code'] == 'NOA':
print(f"授权通知:{oa['date']}")
获取状态摘要:
summary = helper.get_status_summary("16123456")
print(f"当前状态:{summary['current_status']}")
print(f"申请日期:{summary['filing_date']}")
print(f"待审期:{summary['pendency_days']} 天")
if summary['is_patented']:
print(f"专利号:{summary['patent_number']}")
print(f"授权日期:{summary['issue_date']}")
分析审查模式:
analysis = helper.analyze_prosecution("16123456")
print(f"审查意见总数:{analysis['total_office_actions']}")
print(f"非最终驳回:{analysis['non_final_rejections']}")
print(f"最终驳回:{analysis['final_rejections']}")
print(f"授权:{analysis['allowance']}")
print(f"已提交答复:{analysis['responses']}")
有关完整的 PEDS 文档,请参阅 references/peds_api.md,包括:
访问商标状态、所有权和审查历史。
按序列号获取商标:
from scripts.trademark_client import TrademarkClient
client = TrademarkClient()
# 按序列号
tm_data = client.get_trademark_by_serial("87654321")
# 按注册号
tm_data = client.get_trademark_by_registration("5678901")
获取商标状态:
status = client.get_trademark_status("87654321")
print(f"商标:{status['mark_text']}")
print(f"状态:{status['status']}")
print(f"申请日期:{status['filing_date']}")
if status['is_registered']:
print(f"注册号:{status['registration_number']}")
print(f"注册日期:{status['registration_date']}")
检查商标健康状况:
health = client.check_trademark_health("87654321")
print(f"商标:{health['mark']}")
print(f"状态:{health['status']}")
for alert in health['alerts']:
print(alert)
if health['needs_attention']:
print("⚠️ 此商标需要注意!")
监控多个商标:
def monitor_portfolio(serial_numbers, api_key):
"""监控商标组合健康状况。"""
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
有关完整的商标 API 文档,请参阅 references/trademark_api.md,包括:
专利和商标都有用于跟踪所有权变更的转让搜索 API。
基础 URL:https://assignment-api.uspto.gov/patent/v1.4/
按专利号搜索:
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 # 返回 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" 类型:{conveyance}\n")
按公司名称搜索:
def find_company_patents(company_name, api_key):
url = "https://assignment-api.uspto.gov/patent/v1.4/assignment/search"
headers = {"X-Api-Key": api_key}
data = {"criteria": {"assigneeName": company_name}}
response = requests.post(url, headers=headers, json=data)
return response.text
多个专门的 API 提供额外的专利数据。
使用申请号检索审查意见全文。与 PEDS 集成以识别存在哪些审查意见,然后检索全文。
分析专利引证:
访问联邦地区法院专利诉讼记录:
专利审判和上诉委员会程序:
有关以下内容的全面文档,请参阅 references/additional_apis.md:
结合多个 API 进行完整的专利情报分析:
def comprehensive_patent_analysis(patent_number, api_key):
"""
使用多个 USPTO API 进行完整的专利分析。
"""
from scripts.patent_search import PatentSearchClient
from scripts.peds_client import PEDSHelper
results = {}
# 1. 获取专利详情
patent_client = PatentSearchClient(api_key)
patent_data = patent_client.get_patent(patent_number)
results['patent'] = patent_data
# 2. 获取审查历史
peds = PEDSHelper()
results['prosecution'] = peds.analyze_prosecution(patent_number)
results['status'] = peds.get_status_summary(patent_number)
# 3. 获取转让历史
import requests
assign_url = f"https://assignment-api.uspto.gov/patent/v1.4/assignment/patent/{patent_number}"
assign_resp = requests.get(assign_url, headers={"X-Api-Key": api_key})
results['assignments'] = assign_resp.text if assign_resp.status_code == 200 else None
# 4. 分析结果
print(f"\n=== 专利 {patent_number} 分析 ===\n")
print(f"标题:{patent_data['patent_title']}")
print(f"受让人:{', '.join(patent_data.get('assignee_organization', []))}")
print(f"授权日期:{patent_data['patent_date']}")
print(f"\n审查:")
print(f" 审查意见:{results['prosecution']['total_office_actions']}")
print(f" 驳回:{results['prosecution']['non_final_rejections']} 非最终,{results['prosecution']['final_rejections']} 最终")
print(f" 待审期:{results['prosecution']['pendency_days']} 天")
# 分析引证
if 'cited_patent_number' in patent_data:
print(f"\n引证:")
print(f" 引用:{len(patent_data['cited_patent_number'])} 项专利")
if 'citedby_patent_number' in patent_data:
print(f" 被引用:{len(patent_data['citedby_patent_number'])} 项专利")
return results
API 密钥管理
速率限制
查询优化
_text_* 操作符(性能更好)数据处理
组合 API
references/patentsearch_api.md - 完整的 PatentSearch API 参考references/peds_api.md - PEDS API 和库文档references/trademark_api.md - 商标 API(TSDR 和转让)references/additional_apis.md - 引证、审查意见、诉讼、PTABscripts/patent_search.py - PatentSearch API 客户端scripts/peds_client.py - PEDS 审查数据客户端scripts/trademark_client.py - 商标搜索客户端每周安装数
158
仓库
GitHub 星标数
23.4K
首次出现
2026 年 1 月 21 日
安全审计
安装于
opencode131
claude-code131
gemini-cli124
cursor123
codex114
github-copilot109
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.
This skill should be used when:
The USPTO provides multiple specialized APIs for different data needs:
PatentSearch API - Modern ElasticSearch-based patent search (replaced legacy PatentsView in May 2025)
https://search.patentsview.org/api/v1/PEDS (Patent Examination Data System) - Patent examination history
uspto-opendata-python Python libraryTSDR (Trademark Status & Document Retrieval) - Trademark data
https://tsdrapi.uspto.gov/ts/cd/All USPTO APIs require an API key. Register at: https://account.uspto.gov/api-manager/
Set the API key as an environment variable:
export USPTO_API_KEY="your_api_key_here"
This skill includes Python scripts for common operations:
scripts/patent_search.py - PatentSearch API client for searching patentsscripts/peds_client.py - PEDS client for examination historyscripts/trademark_client.py - TSDR client for trademark dataThe PatentSearch API uses a JSON query language with various operators for flexible searching.
Search by keywords in abstract:
from scripts.patent_search import PatentSearchClient
client = PatentSearchClient()
# Search for machine learning patents
results = client.search_patents({
"patent_abstract": {"_text_all": ["machine", "learning"]}
})
for patent in results['patents']:
print(f"{patent['patent_number']}: {patent['patent_title']}")
Search by inventor:
results = client.search_by_inventor("John Smith")
Search by assignee/company:
results = client.search_by_assignee("Google")
Search by date range:
results = client.search_by_date_range("2024-01-01", "2024-12-31")
Search by CPC classification:
results = client.search_by_classification("H04N") # Video/image tech
Combine multiple criteria with logical operators:
results = client.advanced_search(
keywords=["artificial", "intelligence"],
assignee="Microsoft",
start_date="2023-01-01",
end_date="2024-12-31",
cpc_codes=["G06N", "G06F"] # AI and computing classifications
)
For complex queries, use the API directly:
import requests
url = "https://search.patentsview.org/api/v1/patent"
headers = {
"X-Api-Key": "YOUR_API_KEY",
"Content-Type": "application/json"
}
query = {
"q": {
"_and": [
{"patent_date": {"_gte": "2024-01-01"}},
{"assignee_organization": {"_text_any": ["Google", "Alphabet"]}},
{"cpc_subclass_id": ["G06N", "H04N"]}
]
},
"f": ["patent_number", "patent_title", "patent_date", "inventor_name"],
"s": [{"patent_date": "desc"}],
"o": {"per_page": 100, "page": 1}
}
response = requests.post(url, headers=headers, json=query)
results = response.json()
{"field": "value"} or {"field": {"_eq": "value"}}_gt, _gte, _lt, _lte, _neq_text_all, _text_any, _text_phraseBest Practice : Use _text_* operators for text fields (more performant than _contains or _begins)
/patent - Granted patents/publication - Pregrant publications/inventor - Inventor information/assignee - Assignee information/cpc_subclass, /cpc_at_issue - CPC classifications/uspc - US Patent Classification/ipc - International Patent Classification/claims, /brief_summary_text, - Text data (beta)See references/patentsearch_api.md for complete PatentSearch API documentation including:
PEDS provides comprehensive prosecution history including transaction events, status changes, and examination timeline.
uv pip install uspto-opendata-python
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']}")
Get status summary:
summary = helper.get_status_summary("16123456")
print(f"Current status: {summary['current_status']}")
print(f"Filing date: {summary['filing_date']}")
print(f"Pendency: {summary['pendency_days']} days")
if summary['is_patented']:
print(f"Patent number: {summary['patent_number']}")
print(f"Issue date: {summary['issue_date']}")
Analyze prosecution patterns:
analysis = helper.analyze_prosecution("16123456")
print(f"Total office actions: {analysis['total_office_actions']}")
print(f"Non-final rejections: {analysis['non_final_rejections']}")
print(f"Final rejections: {analysis['final_rejections']}")
print(f"Allowed: {analysis['allowance']}")
print(f"Responses filed: {analysis['responses']}")
See references/peds_api.md for complete PEDS documentation including:
Access trademark status, ownership, and prosecution history.
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!")
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
See references/trademark_api.md for complete trademark API documentation including:
Both patents and trademarks have Assignment Search APIs for tracking ownership changes.
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")
Search by company name:
def find_company_patents(company_name, api_key):
url = "https://assignment-api.uspto.gov/patent/v1.4/assignment/search"
headers = {"X-Api-Key": api_key}
data = {"criteria": {"assigneeName": company_name}}
response = requests.post(url, headers=headers, json=data)
return response.text
Multiple specialized APIs provide additional patent data.
Retrieve full text of office actions using application number. Integrate with PEDS to identify which office actions exist, then retrieve full text.
Analyze patent citations:
Access federal district court patent litigation records:
Patent Trial and Appeal Board proceedings:
See references/additional_apis.md for comprehensive documentation on:
Combine multiple APIs for complete patent intelligence:
def comprehensive_patent_analysis(patent_number, api_key):
"""
Full patent analysis using multiple USPTO APIs.
"""
from scripts.patent_search import PatentSearchClient
from scripts.peds_client import PEDSHelper
results = {}
# 1. Get patent details
patent_client = PatentSearchClient(api_key)
patent_data = patent_client.get_patent(patent_number)
results['patent'] = patent_data
# 2. Get examination history
peds = PEDSHelper()
results['prosecution'] = peds.analyze_prosecution(patent_number)
results['status'] = peds.get_status_summary(patent_number)
# 3. Get assignment history
import requests
assign_url = f"https://assignment-api.uspto.gov/patent/v1.4/assignment/patent/{patent_number}"
assign_resp = requests.get(assign_url, headers={"X-Api-Key": api_key})
results['assignments'] = assign_resp.text if assign_resp.status_code == 200 else None
# 4. Analyze results
print(f"\n=== Patent {patent_number} Analysis ===\n")
print(f"Title: {patent_data['patent_title']}")
print(f"Assignee: {', '.join(patent_data.get('assignee_organization', []))}")
print(f"Issue Date: {patent_data['patent_date']}")
print(f"\nProsecution:")
print(f" Office Actions: {results['prosecution']['total_office_actions']}")
print(f" Rejections: {results['prosecution']['non_final_rejections']} non-final, {results['prosecution']['final_rejections']} final")
print(f" Pendency: {results['prosecution']['pendency_days']} days")
# Analyze citations
if 'cited_patent_number' in patent_data:
print(f"\nCitations:")
print(f" Cites: {len(patent_data['cited_patent_number'])} patents")
if 'citedby_patent_number' in patent_data:
print(f" Cited by: {len(patent_data['citedby_patent_number'])} patents")
return results
API Key Management
Rate Limiting
Query Optimization
_text_* operators for text fields (more performant)Data Handling
Combining APIs
references/patentsearch_api.md - Complete PatentSearch API referencereferences/peds_api.md - PEDS API and library documentationreferences/trademark_api.md - Trademark APIs (TSDR and Assignment)references/additional_apis.md - Citations, Office Actions, Litigation, PTABscripts/patent_search.py - PatentSearch API clientscripts/peds_client.py - PEDS examination data clientscripts/trademark_client.py - Trademark search clientWeekly Installs
158
Repository
GitHub Stars
23.4K
First Seen
Jan 21, 2026
Security Audits
Gen Agent Trust HubPassSocketPassSnykWarn
Installed on
opencode131
claude-code131
gemini-cli124
cursor123
codex114
github-copilot109
DOCX文件创建、编辑与分析完整指南 - 使用docx-js、Pandoc和Python脚本
48,500 周安装
_begins_contains_and, _or, _not/detail_description_text