PTAB Trials Example

  1"""Example usage of pyUSPTO for PTAB trial proceedings.
  2
  3Demonstrates the PTABTrialsClient for searching proceedings, documents,
  4and decisions across IPR, PGR, CBM, and DER trial types.
  5"""
  6
  7import os
  8
  9from pyUSPTO import PTABTrialsClient, USPTOConfig
 10
 11# --- Client Initialization ---
 12api_key = os.environ.get("USPTO_API_KEY", "YOUR_API_KEY_HERE")
 13if api_key == "YOUR_API_KEY_HERE":
 14    raise ValueError(
 15        "API key is not set. Set the USPTO_API_KEY environment variable."
 16    )
 17config = USPTOConfig(api_key=api_key)
 18client = PTABTrialsClient(config=config)
 19
 20print("-" * 40)
 21print("Example 1: Search trial proceedings")
 22print("-" * 40)
 23
 24# Search for IPR proceedings filed in 2023
 25response = client.search_proceedings(
 26    trial_type_code_q="IPR",
 27    petition_filing_date_from_q="2023-01-01",
 28    petition_filing_date_to_q="2023-12-31",
 29    limit=5,
 30)
 31
 32print(f"\nFound {response.count} IPR proceedings filed in 2023")
 33print(f"Displaying first {len(response.patent_trial_proceeding_data_bag)} results:")
 34
 35for proceeding in response.patent_trial_proceeding_data_bag:
 36    print(f"\n  Trial Number: {proceeding.trial_number}")
 37
 38    if proceeding.trial_meta_data:
 39        meta = proceeding.trial_meta_data
 40        print(f"  Trial Type: {meta.trial_type_code}")
 41        print(f"  Status: {meta.trial_status_category}")
 42        print(f"  Filing Date: {meta.petition_filing_date}")
 43
 44    if proceeding.patent_owner_data:
 45        print(f"  Patent Owner: {proceeding.patent_owner_data.patent_owner_name}")
 46        print(f"  Patent Number: {proceeding.patent_owner_data.patent_number}")
 47
 48    if proceeding.regular_petitioner_data:
 49        print(
 50            f"  Petitioner: {proceeding.regular_petitioner_data.real_party_in_interest_name}"
 51        )
 52
 53print("-" * 40)
 54print("Example 2: Search trial documents")
 55print("-" * 40)
 56
 57response = client.search_documents(
 58    trial_number_q="IPR2025-01319",
 59    limit=10,
 60)
 61
 62print(f"\nFound {response.count} documents")
 63print(f"Displaying first {len(response.patent_trial_document_data_bag)} results:")
 64
 65for item in response.patent_trial_document_data_bag:
 66    print(f"\n  Trial Number: {item.trial_number}")
 67
 68    if item.document_data:
 69        doc = item.document_data
 70        print(f"  Document Type: {doc.document_type_description_text}")
 71        print(f"  Filing Date: {doc.document_filing_date}")
 72
 73        if doc.file_download_uri:
 74            print(f"  Download URL: {doc.file_download_uri}")
 75
 76print("-" * 40)
 77print("Example 3: Search trial decisions")
 78print("-" * 40)
 79
 80response = client.search_decisions(
 81    trial_type_code_q="IPR",
 82    decision_type_category_q="Decision",
 83    patent_owner_name_q="*",
 84    trial_status_category_q="Terminated",
 85    decision_date_from_q="2023-01-01",
 86    limit=5,
 87)
 88
 89print(f"\nFound {response.count} Decisions in IPR proceedings")
 90print(f"Displaying first {len(response.patent_trial_document_data_bag)} results:")
 91
 92for item in response.patent_trial_document_data_bag:
 93    print(f"\n  Trial Number: {item.trial_number}")
 94
 95    if item.trial_meta_data:
 96        print(f"  Trial Type: {item.trial_meta_data.trial_type_code}")
 97        print(f"  Status: {item.trial_meta_data.trial_status_category}")
 98
 99    if item.decision_data:
100        decision = item.decision_data
101        print(f"  Decision Type: {decision.decision_type_category}")
102        print(f"  Decision Date: {decision.decision_issue_date}")
103
104print("-" * 40)
105print("Example 4: Paginate through proceedings")
106print("-" * 40)
107
108max_items = 10
109count = 0
110for proceeding in client.paginate_proceedings(
111    trial_type_code_q="IPR",
112    petition_filing_date_from_q="2024-01-01",
113    limit=5,
114):
115    count += 1
116    print(f"  {count}. {proceeding.trial_number}")
117
118    if count >= max_items:
119        print(f"  ... (stopping at {max_items} items)")
120        break
121
122print(f"Retrieved {count} proceedings via pagination")
123
124print("-" * 40)
125print("Example 5: Advanced search with sort and fields")
126print("-" * 40)
127
128response = client.search_proceedings(
129    trial_type_code_q="PGR",
130    trial_status_category_q="Terminated",
131    sort="trialMetaData.petitionFilingDate desc",
132    fields="trialNumber,lastModifiedDateTime",
133    limit=3,
134)
135
136print(f"\nFound {response.count} Terminated PGR proceedings")
137print(f"Displaying first {len(response.patent_trial_proceeding_data_bag)} results:")
138
139for proceeding in response.patent_trial_proceeding_data_bag:
140    print(f"\n  Trial Number: {proceeding.trial_number}")
141    print(f"  Last Modified: {proceeding.last_modified_date_time}")