6.4 KiB
Patent Examination Data System (PEDS) API Reference
Overview
The Patent Examination Data System (PEDS) provides access to USPTO patent application and filing status records. It contains bibliographic data, published document information, and patent term extension data.
Data Coverage: 1981 to present (some data back to 1935)
Base URL: Access through USPTO Open Data Portal
What PEDS Provides
PEDS gives comprehensive transaction history and status information for patent applications:
- Bibliographic data - Application numbers, filing dates, titles, inventors, assignees
- Published documents - Publication numbers and dates
- Transaction history - All examination events with dates, codes, and descriptions
- Patent term adjustments - PTA/PTE information
- Application status - Current status and status codes
- File wrapper access - Links to prosecution documents
Key Features
- Transaction Activity - Complete examination timeline with transaction dates, codes, and descriptions
- Status Information - Current application status and status codes
- Bibliographic Updates - Changes to inventors, assignees, titles over time
- Family Data - Related applications and continuity data
- Office Action Tracking - Mail dates and office action information
Python Library: uspto-opendata-python
The recommended way to access PEDS is through the uspto-opendata-python library.
Installation
pip install uspto-opendata-python
Basic Usage
from uspto.peds import PE DSClient
# Initialize client
client = PEDSClient()
# Search by application number
app_number = "16123456"
result = client.get_application(app_number)
# Access application data
print(f"Title: {result['title']}")
print(f"Filing Date: {result['filing_date']}")
print(f"Status: {result['status']}")
# Get transaction history
transactions = result['transactions']
for trans in transactions:
print(f"{trans['date']}: {trans['code']} - {trans['description']}")
Search Methods
# By application number
client.get_application("16123456")
# By patent number
client.get_patent("11234567")
# By customer number (assignee)
client.search_by_customer_number("12345")
# Bulk retrieval
app_numbers = ["16123456", "16123457", "16123458"]
results = client.bulk_retrieve(app_numbers)
Data Fields
Bibliographic Fields
application_number- Application numberfiling_date- Filing datepatent_number- Patent number (if granted)patent_issue_date- Issue date (if granted)title- Application/patent titleinventors- List of inventorsassignees- List of assigneesapp_type- Application type (utility, design, plant, reissue)app_status- Current application statusapp_status_date- Status date
Transaction Fields
transaction_date- Date of transactiontransaction_code- USPTO event codetransaction_description- Description of eventmail_date- Mail room date (for office actions)
Patent Term Data
pta_pte_summary- Patent term adjustment/extension summarypta_pte_history- History of term calculations
Status Codes
Common application status codes:
- Patented Case - Patent has been granted
- Abandoned - Application is abandoned
- Pending - Application is under examination
- Allowed - Application has been allowed, awaiting issue
- Final Rejection - Final rejection issued
- Non-Final Rejection - Non-final rejection issued
- Response Filed - Applicant response filed
Transaction Codes
Common transaction codes include:
- CTNF - Non-final rejection mailed
- CTFR - Final rejection mailed
- AOPF - Office action mailed
- WRIT - Response filed
- NOA - Notice of allowance mailed
- ISS.FEE - Issue fee payment
- ABND - Application abandoned
Full code list available in OCE Patent Examination Status/Event Codes API.
Use Cases
1. Track Application Progress
Monitor pending applications for office actions and status changes.
# Get current status
app = client.get_application("16123456")
print(f"Current status: {app['app_status']}")
print(f"Status date: {app['app_status_date']}")
# Check for recent office actions
recent_oas = [t for t in app['transactions']
if t['code'] in ['CTNF', 'CTFR', 'AOPF']
and t['date'] > '2024-01-01']
2. Portfolio Analysis
Analyze prosecution history across a portfolio.
# Get all applications for an assignee
apps = client.search_by_customer_number("12345")
# Calculate average pendency
pendencies = []
for app in apps:
if app['patent_issue_date']:
filing = datetime.strptime(app['filing_date'], '%Y-%m-%d')
issue = datetime.strptime(app['patent_issue_date'], '%Y-%m-%d')
pendencies.append((issue - filing).days)
avg_pendency = sum(pendencies) / len(pendencies)
print(f"Average pendency: {avg_pendency} days")
3. Examine Rejection Patterns
Analyze types of rejections received.
# Count rejection types
rejections = {}
for trans in app['transactions']:
if 'rejection' in trans['description'].lower():
code = trans['code']
rejections[code] = rejections.get(code, 0) + 1
Integration with Other APIs
PEDS data can be combined with other USPTO APIs:
- Office Action Text API - Retrieve full text of office actions using application number
- Patent Assignment Search - Find ownership changes
- PTAB API - Check for appeal proceedings
Important Notes
- PAIR Bulk Data (PBD) is decommissioned - Use PEDS instead
- Data updates - PEDS is updated regularly but may have 1-2 day lag
- Application numbers - Use standardized format (no slashes or spaces)
- Continuity data - Parent/child applications tracked in transaction history
Best Practices
- Batch requests - Use bulk retrieval for multiple applications
- Cache data - Avoid redundant API calls for same application
- Monitor updates - Check for transaction updates regularly
- Handle missing data - Not all fields populated for all applications
- Parse transaction codes - Use code descriptions for user-friendly display
Resources
- Library Documentation: https://docs.ip-tools.org/uspto-opendata-python/
- PyPI Package: https://pypi.org/project/uspto-opendata-python/
- GitHub Repository: https://github.com/ip-tools/uspto-opendata-python
- USPTO PEDS Portal: https://ped.uspto.gov/