A Modern Python client for accessing United Stated Patent and Trademark Office (USPTO) Open Data Portal (ODP) APIs.
Project description
pyUSPTO
A Python client library for interacting with the United Stated Patent and Trademark Office (USPTO) Open Data Portal APIs.
This package provides clients for interacting with the USPTO Bulk Data API, Patent Data API, Final Petition Decisions API, and PTAB (Patent Trial and Appeal Board) APIs.
[!IMPORTANT] The USPTO is in the process of moving their API. This package is only concerned with the new API. The old API will be retired at the end of 2025.
Quick Start
Requirements: Python ≥3.10
pip install pyUSPTO
[!IMPORTANT] You must have an API key for the USPTO Open Data Portal API.
from pyUSPTO import PatentDataClient
# Initialize with your API key
client = PatentDataClient(api_key="your_api_key_here")
# Search for patent applications
results = client.search_applications(inventor_name_q="Smith", limit=10)
print(f"Found {results.count} applications")
Configuration
All clients can be configured using one of three methods:
Method 1: Direct API Key Initialization
[!NOTE] This method is convenient for quick scripts but not recommended. Consider using environment variables instead.
from pyUSPTO import (
BulkDataClient,
PatentDataClient,
FinalPetitionDecisionsClient,
PTABTrialsClient,
PTABAppealsClient,
PTABInterferencesClient
)
patent_client = PatentDataClient(api_key="your_api_key_here")
bulk_client = BulkDataClient(api_key="your_api_key_here")
petition_client = FinalPetitionDecisionsClient(api_key="your_api_key_here")
trials_client = PTABTrialsClient(api_key="your_api_key_here")
appeals_client = PTABAppealsClient(api_key="your_api_key_here")
interferences_client = PTABInterferencesClient(api_key="your_api_key_here")
Method 2: Using USPTOConfig
from pyUSPTO import (
BulkDataClient,
PatentDataClient,
FinalPetitionDecisionsClient,
PTABTrialsClient,
PTABAppealsClient,
PTABInterferencesClient
)
from pyUSPTO.config import USPTOConfig
config = USPTOConfig(api_key="your_api_key_here")
patent_client = PatentDataClient(config=config)
bulk_client = BulkDataClient(config=config)
petition_client = FinalPetitionDecisionsClient(config=config)
trials_client = PTABTrialsClient(config=config)
appeals_client = PTABAppealsClient(config=config)
interferences_client = PTABInterferencesClient(config=config)
Method 3: Environment Variables (Recommended)
Set the environment variable in your shell:
export USPTO_API_KEY="your_api_key_here"
Then use it in your Python code:
from pyUSPTO import (
BulkDataClient,
PatentDataClient,
FinalPetitionDecisionsClient,
PTABTrialsClient,
PTABAppealsClient,
PTABInterferencesClient
)
from pyUSPTO.config import USPTOConfig
# Load configuration from environment
config = USPTOConfig.from_env()
patent_client = PatentDataClient(config=config)
bulk_client = BulkDataClient(config=config)
petition_client = FinalPetitionDecisionsClient(config=config)
trials_client = PTABTrialsClient(config=config)
appeals_client = PTABAppealsClient(config=config)
interferences_client = PTABInterferencesClient(config=config)
API Usage Examples
[!TIP] For comprehensive examples with detailed explanations, see the
examples/directory.
Patent Data API
from pyUSPTO import PatentDataClient
client = PatentDataClient(api_key="your_api_key_here")
# Search for applications by inventor name
response = client.search_applications(inventor_name_q="Smith", limit=2)
print(f"Found {response.count} applications with 'Smith' as inventor (showing up to 2).")
# Get a specific application
app = client.get_application_by_number("18045436")
if app.application_meta_data:
print(f"Title: {app.application_meta_data.invention_title}")
See examples/patent_data_example.py for detailed examples including downloading documents and publications.
Final Petition Decisions API
from pyUSPTO import FinalPetitionDecisionsClient
client = FinalPetitionDecisionsClient(api_key="your_api_key_here")
# Search for petition decisions
response = client.search_decisions(
decision_date_from_q="2023-01-01", decision_date_to_q="2023-12-31", limit=5
)
print(f"Found {response.count} decisions from 2023.")
# Get a specific decision by ID from search results
response = client.search_decisions(limit=1)
if response.count > 0:
decision_id = response.petition_decision_data_bag[0].petition_decision_record_identifier
decision = client.get_decision_by_id(decision_id)
print(f"Decision Type: {decision.decision_type_code}")
See examples/petition_decisions_example.py for detailed examples including downloading decision documents.
PTAB Trials API
from pyUSPTO import PTABTrialsClient
client = PTABTrialsClient(api_key="your_api_key_here")
# Search for IPR proceedings
response = client.search_proceedings(
trial_type_code_q="IPR",
petition_filing_date_from_q="2023-01-01",
petition_filing_date_to_q="2023-12-31",
limit=5,
)
print(f"Found {response.count} IPR proceedings filed in 2023")
# Paginate through results
for proceeding in client.paginate_proceedings(
trial_type_code_q="IPR",
petition_filing_date_from_q="2024-01-01",
limit=5,
):
print(f"{proceeding.trial_number}")
See examples/ptab_trials_example.py for detailed examples including searching documents and decisions.
PTAB Appeals API
from pyUSPTO import PTABAppealsClient
client = PTABAppealsClient(api_key="your_api_key_here")
# Search for appeal decisions
response = client.search_decisions(
technology_center_number_q="3600",
decision_date_from_q="2023-01-01",
decision_date_to_q="2023-12-31",
limit=5,
)
print(f"Found {response.count} appeal decisions from TC 3600 in 2023")
See examples/ptab_appeals_example.py for detailed examples including searching by decision type and application number.
PTAB Interferences API
from pyUSPTO import PTABInterferencesClient
client = PTABInterferencesClient(api_key="your_api_key_here")
# Search for interference decisions
response = client.search_decisions(
decision_date_from_q="2023-01-01",
limit=5,
)
print(f"Found {response.count} interference decisions since 2023")
See examples/ptab_interferences_example.py for detailed examples including searching by party name and outcome.
Documentation
Full documentation may be found on Read the Docs.
Data Models
The library uses Python dataclasses to represent API responses. All data models include type annotations for attributes and methods, making them fully compatible with static type checkers.
Bulk Data API
BulkDataResponse: Top-level response from the APIBulkDataProduct: Information about a specific productProductFileBag: Container for file data elementsFileData: Information about an individual file
Patent Data API
PatentDataResponse: Top-level response from the APIPatentFileWrapper: Information about a patent applicationApplicationMetaData: Metadata about a patent applicationAddress: Represents an address in the patent dataPerson,Applicant,Inventor,Attorney: Person-related data classesAssignment,Assignor,Assignee: Assignment-related data classesContinuity,ParentContinuity,ChildContinuity: Continuity-related data classesPatentTermAdjustmentData: Patent term adjustment information- And many more specialized classes for different aspects of patent data
Final Petition Decisions API
PetitionDecisionResponse: Top-level response from the APIPetitionDecision: Complete information about a petition decisionPetitionDecisionDocument: Document associated with a petition decisionDocumentDownloadOption: Download options for petition documentsDecisionTypeCode: Enum for petition decision typesDocumentDirectionCategory: Enum for document direction categories
PTAB Trials API
PTABTrialProceedingResponse: Top-level response from the APIPTABTrialProceeding: Information about a PTAB trial proceeding (IPR, PGR, CBM, DER)PTABTrialDocument: Document associated with a trial proceedingPTABTrialDecision: Decision information for a trial proceedingRegularPetitionerData,RespondentData,DerivationPetitionerData: Party data for different trial typesPTABTrialMetaData: Trial metadata and status information
PTAB Appeals API
PTABAppealResponse: Top-level response from the APIPTABAppealDecision: Ex parte appeal decision informationAppellantData: Appellant information and application detailsPTABAppealMetaData: Appeal metadata and filing informationPTABAppealDocumentData: Document and decision details
PTAB Interferences API
PTABInterferenceResponse: Top-level response from the APIPTABInterferenceDecision: Interference proceeding decision informationSeniorPartyData,JuniorPartyData,AdditionalPartyData: Party data classesPTABInterferenceMetaData: Interference metadata and status informationPTABInterferenceDocumentData: Document and outcome details
Advanced Topics
For advanced configuration including HTTP settings, environment variables reference, debugging with raw data preservation, and warning control, see ADVANCED.md.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Contributing
We welcome contributions! Please see CONTRIBUTING.md for guidelines on how to contribute to this project.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pyuspto-0.3.4.tar.gz.
File metadata
- Download URL: pyuspto-0.3.4.tar.gz
- Upload date:
- Size: 200.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bfa91c183f105efa52031803aec4f3169404d7d81fff29e7fbf75a8c4fa08c98
|
|
| MD5 |
d4285fb32cb556c58afdee7ba281f6ff
|
|
| BLAKE2b-256 |
bb66414b23d38aee8fed9bfa50503c696fd75b075038aee272f862d2b5fec116
|
Provenance
The following attestation bundles were made for pyuspto-0.3.4.tar.gz:
Publisher:
publish-to-test-pypi.yml on DunlapCoddingPC/pyUSPTO
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pyuspto-0.3.4.tar.gz -
Subject digest:
bfa91c183f105efa52031803aec4f3169404d7d81fff29e7fbf75a8c4fa08c98 - Sigstore transparency entry: 813990031
- Sigstore integration time:
-
Permalink:
DunlapCoddingPC/pyUSPTO@716c9085ade60d7e836e146c277e3b1736fa4848 -
Branch / Tag:
refs/tags/v0.3.4 - Owner: https://github.com/DunlapCoddingPC
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-to-test-pypi.yml@716c9085ade60d7e836e146c277e3b1736fa4848 -
Trigger Event:
push
-
Statement type:
File details
Details for the file pyuspto-0.3.4-py3-none-any.whl.
File metadata
- Download URL: pyuspto-0.3.4-py3-none-any.whl
- Upload date:
- Size: 86.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c4a3ce83c5122d302bc9acde563517daa6c5ff9e3d5f21cebfc3cd88bcfd9b84
|
|
| MD5 |
575601f2ac3a58887a76c89f7c4be01f
|
|
| BLAKE2b-256 |
8584cfb5ed72ec3495ba83fb95c55dfeee685d298897dfc599c023272c3097fc
|
Provenance
The following attestation bundles were made for pyuspto-0.3.4-py3-none-any.whl:
Publisher:
publish-to-test-pypi.yml on DunlapCoddingPC/pyUSPTO
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pyuspto-0.3.4-py3-none-any.whl -
Subject digest:
c4a3ce83c5122d302bc9acde563517daa6c5ff9e3d5f21cebfc3cd88bcfd9b84 - Sigstore transparency entry: 813990033
- Sigstore integration time:
-
Permalink:
DunlapCoddingPC/pyUSPTO@716c9085ade60d7e836e146c277e3b1736fa4848 -
Branch / Tag:
refs/tags/v0.3.4 - Owner: https://github.com/DunlapCoddingPC
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-to-test-pypi.yml@716c9085ade60d7e836e146c277e3b1736fa4848 -
Trigger Event:
push
-
Statement type: