PatentRef

Data version 20261027.2, as of 2026-10-27: the build these pages were checked against. API version 1.21.0.

/api/v1/inventor/

Upstream view InventorList (index inventors, response key inventors). Any field may be null where the bulk data has no value. Default fields (f): inventor_id, inventor_name_first, inventor_name_last. Default sort (s): [{"inventor_id": "asc"}]. Nested groups usable in q and f with dotted names: inventor_years. When the build in service does not carry this endpoint's data set it answers 501 with X-Status-Reason-Code ERR_NOT_IMPLEMENTED and X-Status-Reason naming the data set.

Routes
GET POST /api/v1/inventor/ GET POST /api/v1/inventor/{pk}/
Response key
inventors
Default f
inventor_id, inventor_name_first, inventor_name_last
Default s
[{"inventor_id": "asc"}]
Default o
{}
q
required on the list route
Detail key
inventor_id in the path; a "/" in a key is written ":"
Nested groups
inventor_years

Example

curl -s -G -H "X-Api-Key: $KEY" https://patentref.io/api/v1/inventor/ \
  --data-urlencode 'q={"_or": [{"_and": [{"inventor_name_first": "George"}, {"inventor_name_last": "Washington"}]}, {"_and": [{"inventor_name_first": "Abraham"}, {"inventor_name_last": "Lincoln"}]}]}'
import json, os, requests

base_url = "https://patentref.io"
headers = {"X-Api-Key": os.environ["PATENTREF_KEY"]}
params = {"q": {"_or": [{"_and": [{"inventor_name_first": "George"}, {"inventor_name_last": "Washington"}]}, {"_and": [{"inventor_name_first": "Abraham"}, {"inventor_name_last": "Lincoln"}]}]}}
r = requests.get(base_url + "/api/v1/inventor/", headers=headers,
                 params={k: json.dumps(v) for k, v in params.items()})
r.raise_for_status()
data = r.json()
print(data["total_hits"], data["inventors"][:3])

Fields

Kind is how q treats the field (grammar, Field kinds). Sortable fields go in s. Nested fields are named with a dot in q and f; naming the group returns its upstream fields, and a field whose note says it is present only when f names it comes back only then. The rows of a group come in the order of their source (grammar, the response and paging).

FieldTypeKindSortableNote
inventor_idstringkeywordyes
inventor_name_firststringtext with a keyword formyes
inventor_name_laststringtext with a keyword formyes
inventor_gender_codestringkeywordyes
inventor_lastknown_citystringtext
inventor_lastknown_statestringtext
inventor_lastknown_countrystringtextAn ISO 3166-1 alpha-2 country code in capitals, as PatentsView gives it: the United Kingdom is "GB", and "UK" matches nothing.
inventor_lastknown_latitudenumbernumberyes
inventor_lastknown_longitudenumbernumberyes
inventor_lastknown_locationstring (URL)keywordLink to the detail record: https://patentref.io/api/v1/location/<id>/, with a "/" in the id written ":"; null when the id is null. Kind: keyword: in q this name matches the id behind the link (for example "H01" for cpc_current.cpc_class), not the URL.
inventor_num_patentsnumbernumberyes
inventor_num_assigneesnumbernumberyes
inventor_first_seen_datestringdateyes
inventor_last_seen_datestringdateyes
inventor_years_activenumbernumberyes
inventor_yearsgroup (list of objects)Nested group: name it in f ("inventor_years") for every field of the group, or "inventor_years.<field>" for one; query its fields in q with the same dotted names.
inventor_years.yearintegernumber
inventor_years.num_patentsintegernumber

Machine-readable: this page's data as JSON, and the operation in openapi.json (operationId InventorList).