curl --request GET \
--url https://api.pav.bio/v1/patents \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.pav.bio/v1/patents"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.pav.bio/v1/patents', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.pav.bio/v1/patents",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.pav.bio/v1/patents"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.pav.bio/v1/patents")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.pav.bio/v1/patents")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"family_id": "62662313",
"member_count": 2,
"granted_count": 1,
"pending_count": 0,
"has_live_member": true,
"owner_is_split": true,
"representative_title": "GLUCAGON LIKE PEPTIDE 1 (GLP-1) FUSION PEPTIDE ... CONJUGATES AND USES THEREOF",
"earliest_filing_date": "2023-12-25",
"earliest_priority_date": "2023-12-25",
"latest_grant_date": "2023-12-25",
"latest_status_date": "2023-12-25",
"owner_names": [
"<string>"
],
"companies": [
{
"company_id": 137,
"short_name": "johnson_and_johnson",
"name": "Johnson & Johnson"
}
],
"members": [
{
"application_number": "17076912",
"role": "<string>",
"is_dead": true,
"patent_number": "<string>",
"publication_number": "<string>",
"title": "<string>",
"application_type": "<string>",
"filing_date": "2023-12-25",
"grant_date": "2023-12-25",
"status_description": "<string>",
"status_date": "2023-12-25",
"cpc_codes": [
"<string>"
]
}
]
}
],
"pagination": {
"limit": 100,
"offset": 0,
"total": 590355
}
}{
"error": {
"code": "not_found",
"message": "program 999999 not found",
"request_id": "3f2b9c1d8a7e4f6b9c0d1e2f3a4b5c6d"
}
}{
"error": {
"code": "not_found",
"message": "program 999999 not found",
"request_id": "3f2b9c1d8a7e4f6b9c0d1e2f3a4b5c6d"
}
}{
"error": {
"code": "not_found",
"message": "program 999999 not found",
"request_id": "3f2b9c1d8a7e4f6b9c0d1e2f3a4b5c6d"
}
}{
"error": {
"code": "not_found",
"message": "program 999999 not found",
"request_id": "3f2b9c1d8a7e4f6b9c0d1e2f3a4b5c6d"
}
}List and search patent families
US patent families from USPTO data, one row per family (a root application with its continuations, divisionals and provisionals). Every filter is optional and filters combine with AND.
company_id matches families whose live members are owned by that company, as recorded in USPTO assignments. About a quarter of families map to a company, so no rows for a company does not mean it holds no patents. A lapsed family has no live owners, so company_id with state=lapsed returns nothing.
curl --request GET \
--url https://api.pav.bio/v1/patents \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.pav.bio/v1/patents"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.pav.bio/v1/patents', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.pav.bio/v1/patents",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.pav.bio/v1/patents"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.pav.bio/v1/patents")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.pav.bio/v1/patents")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"family_id": "62662313",
"member_count": 2,
"granted_count": 1,
"pending_count": 0,
"has_live_member": true,
"owner_is_split": true,
"representative_title": "GLUCAGON LIKE PEPTIDE 1 (GLP-1) FUSION PEPTIDE ... CONJUGATES AND USES THEREOF",
"earliest_filing_date": "2023-12-25",
"earliest_priority_date": "2023-12-25",
"latest_grant_date": "2023-12-25",
"latest_status_date": "2023-12-25",
"owner_names": [
"<string>"
],
"companies": [
{
"company_id": 137,
"short_name": "johnson_and_johnson",
"name": "Johnson & Johnson"
}
],
"members": [
{
"application_number": "17076912",
"role": "<string>",
"is_dead": true,
"patent_number": "<string>",
"publication_number": "<string>",
"title": "<string>",
"application_type": "<string>",
"filing_date": "2023-12-25",
"grant_date": "2023-12-25",
"status_description": "<string>",
"status_date": "2023-12-25",
"cpc_codes": [
"<string>"
]
}
]
}
],
"pagination": {
"limit": 100,
"offset": 0,
"total": 590355
}
}{
"error": {
"code": "not_found",
"message": "program 999999 not found",
"request_id": "3f2b9c1d8a7e4f6b9c0d1e2f3a4b5c6d"
}
}{
"error": {
"code": "not_found",
"message": "program 999999 not found",
"request_id": "3f2b9c1d8a7e4f6b9c0d1e2f3a4b5c6d"
}
}{
"error": {
"code": "not_found",
"message": "program 999999 not found",
"request_id": "3f2b9c1d8a7e4f6b9c0d1e2f3a4b5c6d"
}
}{
"error": {
"code": "not_found",
"message": "program 999999 not found",
"request_id": "3f2b9c1d8a7e4f6b9c0d1e2f3a4b5c6d"
}
}Authorizations
Use a personal or organization Pav API key from Pav developer settings. Send it as Authorization: Bearer <api_key>.
Query Parameters
Substring of the title, an owner name, or a member's patent number.
"GLP-1"
Families owned by any of these Pav company ids. Repeatable.
CPC classification prefix on any member, e.g. A61K or C07K.
16"A61K"
live (a member pending or in force) or lapsed (none).
live, lapsed true: at least one granted patent; false: none granted.
Earliest priority date on or after (inclusive).
Earliest priority date on or before (inclusive).
Include up to 30 member applications per family.
latest_status_date (default), earliest_priority_date, or member_count; newest or largest first.
latest_status_date, earliest_priority_date, member_count Rows per page (1-100).
1 <= x <= 100Zero-based row offset for paging.
0 <= x <= 10000Compute the exact total match count.