pangolinfo-ip
Pangolinfo IP Compliance API — WIPO design patent search and PACER US patent litigation lookup.
Built and maintained by PANGOLIN INFO TECH PTE. LTD.
Installation
pip install pangolinfo-ip
Quick start
from pangolinfo_ip import IPClient
client = IPClient(token="your_bearer_token")
# WIPO design patent search
result = client.wipo_search(irn="DM123456", ds="US", source="USID")
print(result["total"], len(result["hits"]))
# PACER US patent litigation lookup
result = client.pacer_search(patent_number="D1234567")
print(result["total"], len(result["hits"]))
Authentication
All requests require a Bearer token. Get a free API key at tool.pangolinfo.com.
client = IPClient(token="your_bearer_token")
Methods
client.wipo_search(irn, ds, source, **kwargs)
Search the WIPO design patent database.
Required parameters:
| Parameter | Type | Description |
|---|---|---|
irn |
str |
International registration number |
ds |
str |
Specify country |
source |
str |
Data source — USID / CNID / JPID / EMID / HAGUE etc. |
Optional keyword arguments:
| Parameter | Type | Description |
|---|---|---|
ed |
str |
Expiration date |
from_ |
int |
Page start position |
hol |
str |
Right holder |
id |
str |
Unique identifier |
id_search |
str |
ID variant (sent as idSearch) |
lcs |
str |
Design classification (Locarno, e.g. "30-01") |
prod |
str |
Product description keyword |
rd |
str |
Registration date |
num |
int |
Items per page |
status |
str |
Legal status — ACT / PEND / DEL |
enable_litigation |
bool |
Smart Risk Control Mode. When True, chains WIPO results to PACER US litigation lookup. Default False. |
Response (returned directly, unwrapped):
{
"total": 42,
"hits": [
{
"ID": "...",
"IRN": "...",
"SOURCE": "USID",
"STATUS": "ACT",
"RD": "...",
"HOL": "...",
"PROD": "...",
"LCS": "30-01",
"DS": "US",
"DC": "...",
"DOC": "...",
"IMG": "...",
"IMG_DATA": "...",
"DETAIL_URL": "...",
"DETAIL_DATA": {}
}
]
}
When enable_litigation=True, each hit additionally contains
litigationStatus, caseTotal, and cases[].
Example — with litigation risk control:
result = client.wipo_search(
irn="DM123456",
ds="US",
source="USID",
enable_litigation=True,
)
for hit in result["hits"]:
print(hit["IRN"], hit.get("litigationStatus"), hit.get("caseTotal"))
client.pacer_search(...)
Search PACER US patent litigation records.
At least one of patent_number, company_name, or case_number is required.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
patent_number |
str |
one of three | Patent number (exact match) |
company_name |
str |
one of three | Plaintiff/Defendant company name (prefix match) |
case_number |
str |
one of three | Court case number, e.g. "3:90-cv-00003" |
from_ |
int |
optional | Case pagination offset (default 0) |
size |
int |
optional | Cases per page (default 10) |
entry_size |
int |
optional | Timeline records per case (default 50) |
Response (data field is returned):
{
"total": 3,
"hits": [
{
"docketId": "...",
"docketNumber": "3:90-cv-00003",
"caseId": "...",
"caseName": "Acme v. Beta",
"court": "N.D. Cal.",
"courtId": "...",
"assignedTo": "...",
"suitNature": "...",
"jurisdiction": "...",
"status": "...",
"dateFiled": "...",
"dateTerminated": "...",
"parties": [],
"patentNumbers": ["D1234567"],
"entryTotal": 12,
"entries": []
}
]
}
Example:
# By patent number
result = client.pacer_search(patent_number="D1234567")
# By company name with pagination
result = client.pacer_search(
company_name="Acme",
from_=0,
size=20,
entry_size=100,
)
# By case number
result = client.pacer_search(case_number="3:90-cv-00003")
Parameter name conversion
Python snake_case parameters are converted to the API's expected names automatically:
| Python | API |
|---|---|
patent_number |
patentNumber |
company_name |
companyName |
case_number |
caseNumber |
from_ |
from |
entry_size |
entrySize |
enable_litigation |
enable_litigation (unchanged) |
Error handling
from pangolinfo_ip import IPClient
from pangolinfo_ip.exceptions import AuthenticationError, APIError, TimeoutError
try:
with IPClient(token="...") as client:
result = client.wipo_search(irn="DM123456", ds="US", source="USID")
except AuthenticationError:
print("Invalid token")
except APIError as e:
print(f"API error (code={e.code}): {e}")
except TimeoutError:
print("Request timed out")
Context manager
IPClient supports the context manager protocol, ensuring the underlying HTTP
connection is closed:
with IPClient(token="...") as client:
result = client.pacer_search(patent_number="D1234567")
Links
- Documentation: docs.pangolinfo.com
- Get a free API key: tool.pangolinfo.com
- Source code: github.com/Pangolin-spg/pangolinfo-ip
License
MIT — © PANGOLIN INFO TECH PTE. LTD.
Metadata
Release files for pangolinfo-ip 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| pangolinfo_ip-0.2.0.tar.gz | 6.3 kB | Without provenance | Details for pangolinfo_ip-0.2.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| pangolinfo_ip-0.2.0-py3-none-any.whl | Python 3 | none | any | Details for pangolinfo_ip-0.2.0-py3-none-any.whl |
Total release size: 14.1 kB
Release files / pangolinfo_ip-0.2.0.tar.gz
| Download URL | pangolinfo_ip-0.2.0.tar.gz |
|---|---|
| Size | 6.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3fa7829d09b9e7790f1eec31eaa313ed21dc7a4c2a93086c2470660257ee7b87
|
|
BLAKE2b-256 checksum How to use checksums |
093db1f798135749b4594854bf7b9e40cc112b434842412e29e7d82ec740a2b4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.12
|
Release files / pangolinfo_ip-0.2.0-py3-none-any.whl
| Download URL | pangolinfo_ip-0.2.0-py3-none-any.whl |
|---|---|
| Size | 7.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
fa0fd43710df3f84d5176f9bd9ce4df0715bf603dd78e62ba96febe988b7e7d9
|
|
BLAKE2b-256 checksum How to use checksums |
ca13d9eabd0081011b4501dcce0da585a43bf9c2ac2ef97e49397efa999fec97
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.12
|
Security for pangolinfo-ip 0.2.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.