PTAB Interferences Client
clients.ptab_interferences - Client for USPTO PTAB Interferences API.
This module provides a client for interacting with the USPTO PTAB (Patent Trial and Appeal Board) Interferences API. It allows you to search for patent interference decisions.
- class pyUSPTO.clients.ptab_interferences.PTABInterferencesClient(api_key=None, base_url=None, config=None)[source]
Bases:
BaseUSPTOClient[PTABInterferenceResponse]Client for interacting with the USPTO PTAB Interferences API.
This client provides methods to search for patent interference decisions from the Patent Trial and Appeal Board.
Interference proceedings are used to determine priority of invention when two or more parties claim the same patentable invention.
- ENDPOINTS = {'search_decisions': 'api/v1/patent/interferences/decisions/search'}
- download_interference_archive(interference_meta_data, destination=None, file_name=None, overwrite=False)[source]
Download interference archive (ZIP/TAR) without extraction.
- Parameters:
- Return type:
- Returns:
Path to downloaded archive file
- Raises:
ValueError – If interference_meta_data has no file_download_uri
- download_interference_document(document_data, destination=None, file_name=None, overwrite=False)[source]
Download individual interference document (auto-extracts if needed).
- Parameters:
- Return type:
- Returns:
Path to downloaded file
- Raises:
ValueError – If document_data has no file_download_uri
- download_interference_documents(interference_meta_data, destination=None, overwrite=False)[source]
Download and extract all interference documents.
- Parameters:
interference_meta_data (
InterferenceMetaData) – InterferenceMetaData with file_download_urioverwrite (
bool) – Overwrite existing files
- Return type:
- Returns:
Path to extraction directory
- Raises:
ValueError – If interference_meta_data has no file_download_uri
- paginate_decisions(post_body=None, **kwargs)[source]
Provide an iterator to paginate through interference decision search results.
This method simplifies fetching all interference decisions matching a search query by automatically handling pagination. It internally calls the search_decisions method, batching results and yielding them one by one.
Supports both GET and POST requests. For POST requests, provide the search criteria in post_body. For GET requests, use keyword arguments.
The offset parameter is managed by the pagination logic and should not be provided by the user. The limit parameter can be customized.
- Parameters:
- Returns:
- An iterator yielding PTABInterferenceDecision
objects, allowing iteration over all matching decisions across multiple pages of results.
- Return type:
Iterator[PTABInterferenceDecision]
Examples
# GET-based pagination through all decisions >>> for decision in client.paginate_decisions(): … print(f”{decision.interference_meta_data.interference_number}: ” … f”{decision.document_data.interference_outcome_category}”)
# GET-based pagination with date range and custom limit >>> for decision in client.paginate_decisions( … decision_date_from_q=”2020-01-01”, … decision_date_to_q=”2023-12-31”, … limit=50 … ): … process_decision(decision)
# POST-based pagination >>> for decision in client.paginate_decisions( … post_body={“q”: “interferenceOutcomeCategory:Priority to Senior Party”} … ): … process_decision(decision)
- search_decisions(query=None, sort=None, offset=0, limit=25, facets=None, fields=None, filters=None, range_filters=None, post_body=None, interference_number_q=None, senior_party_application_number_q=None, junior_party_application_number_q=None, senior_party_name_q=None, junior_party_name_q=None, real_party_in_interest_q=None, interference_outcome_category_q=None, decision_type_category_q=None, decision_date_from_q=None, decision_date_to_q=None, additional_query_params=None)[source]
Search for PTAB interference decisions.
This method can perform either a GET request using query parameters or a POST request if post_body is specified. When using GET, you can provide either a direct query string or use convenience parameters that will be automatically combined into a query.
- Parameters:
query (
Optional[str]) – Direct query string in USPTO search syntax.offset (
int|None) – Number of records to skip (pagination).range_filters (
Optional[str]) – Range filter configuration string.post_body (
Optional[dict[str,Any]]) – Optional POST body for complex queries.interference_number_q (
Optional[str]) – Filter by interference number.senior_party_application_number_q (
Optional[str]) – Filter by senior party application number.junior_party_application_number_q (
Optional[str]) – Filter by junior party application number.senior_party_name_q (
Optional[str]) – Filter by senior party name.junior_party_name_q (
Optional[str]) – Filter by junior party name.real_party_in_interest_q (
Optional[str]) – Filter by Real Party in Interest.interference_outcome_category_q (
Optional[str]) – Filter by interference outcome category.decision_type_category_q (
Optional[str]) – Filter by decision type category.decision_date_from_q (
Optional[str]) – Filter decisions from this date (YYYY-MM-DD).decision_date_to_q (
Optional[str]) – Filter decisions to this date (YYYY-MM-DD).additional_query_params (
Optional[dict[str,Any]]) – Additional custom query parameters.
- Returns:
Response containing matching interference decisions.
- Return type:
Examples
# Search with direct query >>> response = client.search_decisions(query=”interferenceNumber:106123”)
# Search with convenience parameters >>> response = client.search_decisions( … interference_outcome_category_q=”Priority to Senior Party”, … decision_date_from_q=”2020-01-01”, … limit=50 … )
# Search with POST body >>> response = client.search_decisions( … post_body={“q”: “decisionTypeCategory:Final Decision”, “limit”: 100} … )