uspto-database について
uspto-databaseは、USPTOの特許・商標データを扱う研究者や知財担当者向けのスキルです。Pythonの補助スクリプトと手順を備え、検索、審査履歴、権利移転、引用、訴訟の分析を支援します。
主な機能
- 01テキストや属性による特許検索
- 02PEDSの審査履歴取得
- 03商標の状態と履歴の照会
- 04権利移転記録の追跡
- 05引用・オフィスアクション・訴訟データ
活用シーン
- 01発明者・権利者・分類から特許を検索
- 02出願イベントやオフィスアクションを確認
- 03商標の状態と所有者を確認
- 04特許引用や訴訟を分析
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ leonchaox/ qinyan-academic-skills --skill uspto-databaseインストール後、Claude Code で/uspto-databaseを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/additional_apis.mdpatentsearch_api.mdpeds_api.mdtrademark_api.mdscripts/patent_search.pypeds_client.pytrademark_client.py詳細
USPTO データベース
概要
USPTO は、特許および商標データ向けの専門 API を提供しています。キーワード/発明者/譲受人で特許を検索したり、PEDS 経由で審査履歴を取得したり、権利の移転を追跡したり、引用やオフィスアクションを分析したり、商標について TSDR にアクセスしたりできます。知的財産の分析や先行技術の調査に役立ちます。
このスキルを使用する場面
次のような場合に、このスキルを使用してください。
- 特許検索:キーワード、発明者、譲受人、分類、または日付で特許を検索する場合
- 特許の詳細:請求項、要約、引用を含む特許データ全体を取得する場合
- 商標検索:シリアル番号または登録番号で商標を検索する場合
- 商標のステータス:商標のステータス、所有者、出願・審査履歴を確認する場合
- 審査履歴:PEDS(Patent Examination Data System)から特許の出願・審査データにアクセスする場合
- オフィスアクション:オフィスアクションの本文、引用、拒絶理由を取得する場合
- 権利の移転:特許/商標の所有権移転を追跡する場合
- 引用:特許の引用(前方および後方)を分析する場合
- 訴訟:特許訴訟の記録にアクセスする場合
- ポートフォリオ分析:企業や発明者の特許/商標ポートフォリオを分析する場合
USPTO API エコシステム
USPTO は、さまざまなデータニーズに対応する複数の専門 API を提供しています。
コア API
-
PatentSearch API - ElasticSearch ベースの最新の特許検索 API(2025 年 5 月に従来の PatentsView に置き換わりました)
- キーワード、発明者、譲受人、分類、日付で特許を検索
- 2025 年 6 月 30 日までの特許データにアクセス
- レート制限:毎分 45 リクエスト
- ベース URL:
https://search.patentsview.org/api/v1/
-
PEDS (Patent Examination Data System) - 特許の審査履歴
- 1981 年から現在までの出願ステータスと取引履歴
- オフィスアクションの日付と審査イベント
uspto-opendata-pythonPython ライブラリを使用- 置き換え対象:PAIR Bulk Data (PBD) - 提供終了
-
TSDR (Trademark Status & Document Retrieval) - 商標データ
- 商標のステータス、所有者、出願・審査履歴
- シリアル番号または登録番号で検索
- ベース URL:
https://tsdrapi.uspto.gov/ts/cd/
追加 API
- Patent Assignment Search - 所有権の記録と移転
- Trademark Assignment Search - 商標の所有権変更
- Enriched Citation API - 特許引用の分析
- Office Action Text Retrieval - オフィスアクションの全文
- Office Action Citations - オフィスアクションからの引用
- Office Action Rejection - 拒絶理由とその種類
- PTAB API - Patent Trial and Appeal Board の手続き
- Patent Litigation Cases - 連邦地方裁判所の訴訟データ
- Cancer Moonshot Data Set - がん関連特許
クイックスタート
API キーの登録
USPTO API の利用には API キーが必要です。次のページで登録してください。 https://account.uspto.gov/api-manager/
PatentSearch API の API キーは PatentsView が提供しています。次のページで登録してください。 https://patentsview.org/api-v01-information-page
API キーを環境変数として設定します。
export USPTO_API_KEY="your_api_key_here"
export PATENTSVIEW_API_KEY="you_api_key_here"
ヘルパースクリプト
このスキルには、一般的な操作を行うための Python スクリプトが含まれています。
scripts/patent_search.py- 特許検索用の PatentSearch API クライアントscripts/peds_client.py- 審査履歴用の PEDS クライアントscripts/trademark_client.py- 商標データ用の TSDR クライアント
タスク 1:特許の検索
PatentSearch API の使用
PatentSearch API は、柔軟な検索に対応するさまざまな演算子を備えた JSON クエリ言語を使用します。
基本的な特許検索の例
要約内のキーワードで検索:
from scripts.patent_search import PatentSearchClient
client = PatentSearchClient()
# Search for machine learning patents
results = client.search_patents({
"_text_all": {"patent_abstract": "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") # Video/image tech
高度な特許検索
論理演算子を使って複数の条件を組み合わせます。
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
)
API を直接使用する
複雑なクエリの場合は、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 を参照してください。以下の内容が含まれます。
- 利用可能なすべてのエンドポイント
- フィールドの完全なリファレンス
- クエリ構文と例
- レスポンス形式
- レート制限とベストプラクティス
タスク 2: 特許審査データの取得
PEDS(Patent Examination Data System)の利用
PEDS は、手続の取引イベント、ステータス変更、審査のタイムラインを含む、包括的な審査経過情報を提供します。
インストール
uv pip install uspto-opendata-python
PEDS の基本的な使い方
出願データの取得:
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")
取引履歴の取得:
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"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']}")
ステータス概要の取得:
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']}")
審査経過の分析
審査経過のパターンを分析します:
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']}")
一般的な取引コード
- CTNF - 非最終拒絶理由通知の発送
- CTFR - 最終拒絶理由通知の発送
- NOA - 許可通知の発送
- WRIT - 応答の提出
- ISS.FEE - 登録料の納付
- ABND - 出願の放棄
- AOPF - 拒絶理由通知の発送
リファレンスドキュメント
PEDS の完全なドキュメントは references/peds_api.md を参照してください。以下の内容が含まれます。
- 利用可能なすべてのデータフィールド
- 取引コードのリファレンス
- Python ライブラリの使い方
- ポートフォリオ分析の例
タスク 3: 商標の検索と監視
TSDR(Trademark Status & Document Retrieval)の利用
商標のステータス、権利者、審査経過にアクセスします。
商標の基本的な使い方
シリアル番号で商標を取得:
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")
商標のステータスを取得:
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']}")
商標の状態を確認:
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!")
商標ポートフォリオの監視
複数の商標を監視します:
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
一般的な商標ステータス
- REGISTERED - 有効な登録商標
- PENDING - 審査中
- PUBLISHED FOR OPPOSITION - 異議申立期間中
- ABANDONED - 出願の放棄
- CANCELLED - 登録の取消し
- SUSPENDED - 審査の停止
- REGISTERED AND RENEWED - 更新済みの登録
リファレンスドキュメント
商標 API の完全なドキュメントは references/trademark_api.md を参照してください。以下の内容が含まれます。
- TSDR API のリファレンス
- Trademark Assignment Search API
- すべてのステータスコード
- 審査経過へのアクセス
- 権利者の追跡
タスク 4: 譲渡と権利者の追跡
特許および商標の譲渡
特許と商標の両方に、権利者の変更を追跡するための Assignment Search API があります。
特許譲渡 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 # 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")
企業名で検索:
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
一般的な譲渡の種類
- ASSIGNMENT OF ASSIGNORS INTEREST - 権利の譲渡
- SECURITY AGREEMENT - 担保権・担保契約
- MERGER - 企業合併
- CHANGE OF NAME - 名称変更
- ASSIGNMENT OF PARTIAL INTEREST - 一部持分の譲渡
タスク 5: その他の USPTO データへのアクセス
拒絶理由通知、引用文献、訴訟
複数の専門 API が追加の特許データを提供します。
拒絶理由通知の本文取得
出願番号を使用して拒絶理由通知の全文を取得します。PEDS と連携して存在する拒絶理由通知を特定し、その後全文を取得してください。
Enriched Citation API
特許の引用を分析します:
- 前方引用(この特許を引用している特許)
- 後方引用(引用された先行技術)
- 審査官による引用と出願人による引用の比較
- 引用の文脈
Patent Litigation Cases API
連邦地方裁判所の特許訴訟記録にアクセスします:
- 74,623件以上の訴訟記録
- 主張された特許
- 当事者と管轄裁判所
- 事件の結果
PTAB API
特許審判部(PTAB)の手続き:
- 当事者系レビュー(IPR)
- 付与後レビュー(PGR)
- 審決
リファレンスドキュメント
以下に関する包括的なドキュメントについては、references/additional_apis.md を参照してください:
- Enriched Citation API
- Office Action APIs(Text、Citations、Rejections)
- Patent Litigation Cases API
- PTAB API
- Cancer Moonshot Data Set
- OCE Status/Event Codes
完全な分析の例
包括的な特許分析
複数の API を組み合わせて、完全な特許インテリジェンスを得ます:
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 キーの管理
- API キーは環境変数に保存する
- キーをバージョン管理にコミットしない
- すべての USPTO API で同じキーを使用する
-
レート制限
- PatentSearch: 45 リクエスト/分
- レート制限エラーには指数バックオフを実装する
- 可能な場合はレスポンスをキャッシュする
-
クエリの最適化
- テキストフィールドには
_text_*演算子を使用する(より高性能) - 必要なフィールドのみをリクエストしてレスポンスサイズを減らす
- 日付範囲を使用して検索を絞り込む
- テキストフィールドには
-
データの取り扱い
- すべての特許・商標でフィールドが埋まっているわけではない
- 欠損データを適切に処理する
- 日付を一貫した形式で解析する
-
API の組み合わせ
- 探索には PatentSearch を使用する
- 審査経過の詳細には PEDS を使用する
- 所有権の追跡には Assignment API を使用する
- データを組み合わせて包括的な分析を行う
重要な注意事項
- レガシー API の終了: PatentsView のレガシー API は 2025 年 5 月 1 日に提供終了しました。PatentSearch API を使用してください
- PAIR バルクデータの提供終了: 代わりに PEDS を使用してください
- データ範囲: PatentSearch のデータは 2025 年 6 月 30 日まで、PEDS は 1981 年から現在までです
- テキストエンドポイント: クレームと明細書のエンドポイントはベータ版であり、バックフィルは継続中です
- レート制限: サービスの中断を避けるため、レート制限を遵守してください
リソース
API ドキュメント
- PatentSearch API: https://search.patentsview.org/docs/
- USPTO Developer Portal: https://developer.uspto.gov/
- USPTO Open Data Portal: https://data.uspto.gov/
- API Key Registration: https://account.uspto.gov/api-manager/
Python ライブラリ
- uspto-opendata-python: https://pypi.org/project/uspto-opendata-python/
- USPTO Docs: https://docs.ip-tools.org/uspto-opendata-python/
リファレンスファイル
references/patentsearch_api.md- PatentSearch API の完全なリファレンスreferences/peds_api.md- PEDS API およびライブラリのドキュメントreferences/trademark_api.md- 商標 API(TSDR および Assignment)references/additional_apis.md- 引用、Office Action、訴訟、PTAB
スクリプト
scripts/patent_search.py- PatentSearch API クライアントscripts/peds_client.py- PEDS 審査データクライアントscripts/trademark_client.py- 商標検索クライアント