patentgrepDocs

Search API

CPC titles

Titles for CPC codes, to label facets and classifications. Ask for up to 100 codes at once; unknown codes come back with null titles.

GET/v1/cpc/titles
codestring, repeatable

A subclass such as H01M or a group such as H01M50/457.

Each item has the compact code, a displayCode, the official title, a sentence-case shortTitle and the CPC edition.

Try itDemo key
GET /v1/cpc/titles?code=H01M
Response200Recorded 11 Oct 2026
{
  "items": [
    {
      "code": "H01M",
      "displayCode": "H01M",
      "title": "PROCESSES OR MEANS, e.g. BATTERIES, FOR THE DIRECT CONVERSION OF CHEMICAL ENERGY…",
      "shortTitle": "Processes or means, e.g. batteries, for the direct conversion of chemical energy…",
      "edition": "2026.08"
    }
  ]
}
curl -G https://api.patentgrep.com/v1/cpc/titles \
  -H "X-Api-Key: $PATENTGREP_KEY" \
  -d code=H01M \
  --data-urlencode "code=H01M50/457"
import os, requests

resp = requests.get(
    "https://api.patentgrep.com/v1/cpc/titles",
    headers={"X-Api-Key": os.environ["PATENTGREP_KEY"]},
    params=[("code", "H01M"), ("code", "H01M50/457")],
)
resp.raise_for_status()
data = resp.json()
print(data)
const params = new URLSearchParams([
  ["code", "H01M"],
  ["code", "H01M50/457"],
]);
const res = await fetch(`https://api.patentgrep.com/v1/cpc/titles?${params}`, {
  headers: {
    "X-Api-Key": process.env.PATENTGREP_KEY,
  },
});
if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`);
const data = await res.json();
console.log(data);
package main

import (
	"fmt"
	"io"
	"net/http"
	"net/url"
	"os"
)

func main() {
	params := url.Values{}
	params.Add("code", "H01M")
	params.Add("code", "H01M50/457")

	req, err := http.NewRequest(http.MethodGet, "https://api.patentgrep.com/v1/cpc/titles?"+params.Encode(), nil)
	if err != nil {
		panic(err)
	}
	req.Header.Set("X-Api-Key", os.Getenv("PATENTGREP_KEY"))

	res, err := http.DefaultClient.Do(req)
	if err != nil {
		panic(err)
	}
	defer res.Body.Close()

	data, err := io.ReadAll(res.Body)
	if err != nil {
		panic(err)
	}
	if res.StatusCode != http.StatusOK {
		panic(fmt.Sprintf("%s: %s", res.Status, data))
	}
	fmt.Println(string(data))
}
require "json"
require "net/http"

uri = URI("https://api.patentgrep.com/v1/cpc/titles")
uri.query = URI.encode_www_form([["code", "H01M"], ["code", "H01M50/457"]])

req = Net::HTTP::Get.new(uri)
req["X-Api-Key"] = ENV.fetch("PATENTGREP_KEY")

res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(req) }
raise "#{res.code}: #{res.body}" unless res.is_a?(Net::HTTPSuccess)
data = JSON.parse(res.body)
p data