> ## Documentation Index
> Fetch the complete documentation index at: https://docs.pav.bio/llms.txt
> Use this file to discover all available pages before exploring further.

# Patents

> US patent families with owners, member applications, ownership history, prosecution events and statutory term.

## Overview

A patent family is a US root application together with its continuations,
divisionals and provisionals. Each family carries its members and their
status, recorded owners (and the Pav companies they are linked to), recorded
assignments, prosecution and maintenance events, CPC classes, and a statutory
term end date.

Questions this dataset answers:

* Which live, granted US patent families does a company own?
* Which families mention a drug, and who owns them?
* When does a family's statutory term end?
* Has ownership of a family changed hands?

## Coverage

| Families                  | Live families | Source                                            | Company links                                           |
| ------------------------- | ------------- | ------------------------------------------------- | ------------------------------------------------------- |
| 122,000+ (September 2026) | 108,000+      | USPTO applications, grants and assignment records | About a quarter of families are linked to a Pav company |

<Warning>
  No rows for a company does not mean the company holds no patents. An owner name
  that is not linked to a Pav company is still listed in `owner_names`; search
  it with `q`.
</Warning>

## Key fields

| Field                                                                                       | Description                                                                            |
| ------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
| `family_id`                                                                                 | Pav family id.                                                                         |
| `representative_title`                                                                      | Title of the representative member.                                                    |
| `member_count`, `granted_count`, `pending_count`                                            | Family size and status mix.                                                            |
| `earliest_priority_date`, `earliest_filing_date`, `latest_grant_date`, `latest_status_date` | Key dates.                                                                             |
| `has_live_member`                                                                           | `true` when any member is pending or in force.                                         |
| `owner_names[]`                                                                             | Recorded owners of live members, as recorded.                                          |
| `companies[]`                                                                               | Owners linked to Pav companies.                                                        |
| `members[]`                                                                                 | Member applications (list endpoint: with `include_members=true`, up to 30 per family). |

`GET /v1/patents/{family_id}` adds `statutory_term_start` and
`statutory_term_end`, family `cpc_codes`, per-member owners, recorded
conveyances in `ownership[]`, and prosecution and maintenance `events[]`.

<Note>
  `statutory_term_end` is the earliest nonprovisional filing date plus 20 years.
  It does not include patent term adjustments or extensions. Treat it as a
  baseline for loss-of-exclusivity work, not a final expiry date.
</Note>

## Endpoints

| Endpoint                      | Use                                                  |
| ----------------------------- | ---------------------------------------------------- |
| `GET /v1/patents`             | Search and filter families.                          |
| `GET /v1/patents/{family_id}` | One family with members, ownership, events and term. |

## Filters

All filters are optional and combine with AND.

| Parameter                      | Matches                                                                                            | Example                  |
| ------------------------------ | -------------------------------------------------------------------------------------------------- | ------------------------ |
| `q`                            | Substring of the title, an owner name, or a member's patent number. No synonym expansion.          | `tirzepatide`            |
| `company_id`                   | Families whose live members a Pav company owns. Repeatable.                                        | `218`                    |
| `cpc`                          | CPC class prefix on any member.                                                                    | `C07K`                   |
| `state`                        | `live` (a member pending or in force) or `lapsed` (none).                                          | `live`                   |
| `granted`                      | `true`: at least one grant; `false`: none.                                                         | `true`                   |
| `priority_from`, `priority_to` | Earliest priority date range, inclusive.                                                           | `2020-01-01`             |
| `include_members`              | Include member applications.                                                                       | `true`                   |
| `sort`                         | `latest_status_date` (default), `earliest_priority_date`, `member_count`; newest or largest first. | `earliest_priority_date` |
| `include_total`                | Exact match count.                                                                                 | `true`                   |
| `limit`, `offset`              | Page size (1–100, default 25) and offset (up to 10,000).                                           | `limit=50`               |

A lapsed family has no live owners, so `company_id` with `state=lapsed`
returns nothing.

## A company's live granted families

<CodeGroup>
  ```bash cURL theme={null}
  curl -G https://api.pav.bio/v1/patents \
    -H "Authorization: Bearer $PAV_API_KEY" \
    --data-urlencode "company_id=218" \
    --data-urlencode "state=live" \
    --data-urlencode "granted=true" \
    --data-urlencode "include_total=true" \
    --data-urlencode "limit=3"
  ```

  ```python Python theme={null}
  import os
  import requests

  resp = requests.get(
      "https://api.pav.bio/v1/patents",
      headers={"Authorization": f"Bearer {os.environ['PAV_API_KEY']}"},
      params={"company_id": 218, "state": "live", "granted": "true", "include_total": "true", "limit": 3},
  )
  resp.raise_for_status()
  body = resp.json()
  print("total:", body["pagination"]["total"])
  for f in body["data"]:
      print(f["family_id"], "|", f["representative_title"], "|", f.get("earliest_priority_date"))
  ```

  ```javascript JavaScript theme={null}
  const params = new URLSearchParams({
    company_id: "218",
    state: "live",
    granted: "true",
    include_total: "true",
    limit: "3",
  });
  const resp = await fetch(`https://api.pav.bio/v1/patents?${params}`, {
    headers: { Authorization: `Bearer ${process.env.PAV_API_KEY}` },
  });
  const body = await resp.json();
  console.log("total:", body.pagination.total);
  for (const f of body.data) console.log(f.family_id, "|", f.representative_title, "|", f.earliest_priority_date);
  ```
</CodeGroup>

```json Example response (trimmed) theme={null}
{
  "data": [
    {
      "family_id": "63477734",
      "representative_title": "PROCESSES AND INTERMEDIATES FOR PREPARING TIRZEPATIDE",
      "member_count": 3,
      "granted_count": 1,
      "earliest_priority_date": "2022-12-29",
      "has_live_member": true,
      "companies": [{ "company_id": 218, "short_name": "eli_lilly", "name": "Eli Lilly" }]
    },
    {
      "family_id": "62946586",
      "representative_title": "KRAS G12C INHIBITORS",
      "member_count": 2,
      "granted_count": 1,
      "earliest_priority_date": "2019-12-11",
      "has_live_member": true,
      "companies": [{ "company_id": 218, "short_name": "eli_lilly", "name": "Eli Lilly" }]
    }
  ],
  "pagination": { "limit": 3, "offset": 0, "total": 81 }
}
```

## Families that mention a drug

`q` matches titles and owner names, so it finds families from every owner,
including owners that are not Pav companies.

<CodeGroup>
  ```bash cURL theme={null}
  curl -G https://api.pav.bio/v1/patents \
    -H "Authorization: Bearer $PAV_API_KEY" \
    --data-urlencode "q=tirzepatide" \
    --data-urlencode "include_total=true" \
    --data-urlencode "limit=5"
  ```

  ```python Python theme={null}
  import os
  import requests

  resp = requests.get(
      "https://api.pav.bio/v1/patents",
      headers={"Authorization": f"Bearer {os.environ['PAV_API_KEY']}"},
      params={"q": "tirzepatide", "include_total": "true", "limit": 5},
  )
  resp.raise_for_status()
  for f in resp.json()["data"]:
      print(f["family_id"], "|", f["representative_title"], "|", ", ".join(f.get("owner_names", [])))
  ```

  ```javascript JavaScript theme={null}
  const params = new URLSearchParams({ q: "tirzepatide", include_total: "true", limit: "5" });
  const resp = await fetch(`https://api.pav.bio/v1/patents?${params}`, {
    headers: { Authorization: `Bearer ${process.env.PAV_API_KEY}` },
  });
  const { data } = await resp.json();
  for (const f of data) console.log(f.family_id, "|", f.representative_title, "|", (f.owner_names ?? []).join(", "));
  ```
</CodeGroup>

```json Example response (trimmed) theme={null}
{
  "data": [
    { "family_id": "63477734", "representative_title": "PROCESSES AND INTERMEDIATES FOR PREPARING TIRZEPATIDE", "owner_names": ["ELI LILLY AND COMPANY"] },
    { "family_id": "19062335", "representative_title": "MULTI-DOSE PEN OF TIRZEPATIDE", "owner_names": ["ORBICULAR PHARMACEUTICAL TECHNOLOGIES PRIVATE LIMITED"] },
    { "family_id": "63589289", "representative_title": "INTRANASAL DELIVERY OF TIRZEPATIDE TO TREAT OBESITY", "owner_names": ["THE TRUSTEES OF COLUMBIA UNIVERSITY IN THE CITY OF NEW YORK"] }
  ],
  "pagination": { "limit": 5, "offset": 0, "total": 7 }
}
```

## Get one family

```bash theme={null}
curl https://api.pav.bio/v1/patents/63477734 \
  -H "Authorization: Bearer $PAV_API_KEY"
```

```json Example response (trimmed) theme={null}
{
  "family_id": "63477734",
  "representative_title": "PROCESSES AND INTERMEDIATES FOR PREPARING TIRZEPATIDE",
  "member_count": 3,
  "granted_count": 1,
  "pending_count": 2,
  "earliest_priority_date": "2022-12-29",
  "latest_grant_date": "2025-05-20",
  "owner_names": ["ELI LILLY AND COMPANY"],
  "companies": [{ "company_id": 218, "short_name": "eli_lilly", "name": "Eli Lilly" }],
  "statutory_term_start": "2023-12-29",
  "statutory_term_end": "2043-12-29",
  "cpc_codes": ["C07K   1/061", "C07K  14/605"],
  "members": [
    {
      "application_number": "18806394",
      "patent_number": "12304938",
      "role": "continuation",
      "filing_date": "2024-08-15",
      "grant_date": "2025-05-20",
      "status_description": "Patented Case",
      "is_dead": false
    }
  ],
  "ownership": [
    {
      "recorded_date": "2025-10-29",
      "conveyance_kind": "assignment",
      "conveyance_text": "ASSIGNMENT OF ASSIGNOR'S INTEREST",
      "assignees": ["ELI LILLY AND COMPANY"],
      "application_numbers": ["19351688"]
    }
  ],
  "events": [
    { "event_date": "2026-09-24", "application_number": "19351688", "event_code": "WIDS", "description": "Information Disclosure Statement (IDS) Filed" }
  ],
  "events_total": 139
}
```

## Related

* [Patent and LOE check guide](/guides/patent-loe-check)
* [Companies](/datasets/companies): resolve an owner to `company_id`.
