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}")