API Documentation
← API overview

Patents

Patent publications by company/CPC/date, pre-computed aggregate counts and year-over-year growth, and full patent records with citations and resolved assignees.

4 endpoints · every section below is generated from the API catalog

GET/api/v1/patents

Patent Search

Full reference →

Paginated, filterable listing of patent publications using direct indexed filters (company/assignee, CPC classification prefix, publication date range, country, legal status) - no graph traversal. include_total is declared required so every call computes the exact meta.total the agent quotes; never quote a page length as a total. Company filters accept an exact raw assignee string, 'organizations/<key>', 'ror:<id>' or 'lei:<id>' and resolve to the company's full graph id cluster (raw mentions + ROR/LEI entities); an unresolved company value or unknown CPC prefix returns HTTP 400 naming the value - the filter is never silently dropped, so an empty result always means the portfolio is truly empty. Requires a Pro workspace (returns HTTP 402 otherwise). Use patents.aggregate for counts, patents.yoy-growth for trends, and patents.details with a row's patent_id for the full enriched record.

Parameters

ParameterTypeRequiredDescription
company_idstringNoOrganization to filter on. Accepts an exact raw assignee string (as it appears in a patent's assignees array), 'organizations/<key>', 'ror:<id>', 'lei:<id>', or a bare ROR/LEI id. Takes precedence over company_name. Unresolved values return HTTP 400 (never silently ignored).
company_namestringNoResolved organization name, used as a fallback when company_id is not provided; the server resolves it to an organization.
cpc_codestringNoCPC classification code or prefix (e.g. 'A61K'). Combined with include_descendants to expand the prefix.
include_descendantsstringNoWhen true (default), a cpc_code prefix expands to every code starting with it; set false for exact-code matches only.
Allowed values: true, false
publication_date_fromstringNoYYYY-MM-DD; matches patents published on or after this date.
publication_date_tostringNoYYYY-MM-DD; matches patents published on or before this date.
countrystringNoCountry code (case-insensitive; the server uppercases it).
legal_statusstringNoLegal status filter (case-insensitive).
pageintegerNoPage number (default 1).
Range: 1 to ∞
limitintegerNoResults per page (1-100, default 20).
Range: 1 to 100
sortstringNoSort field (default publication_date).
Allowed values: publication_date, title
orderstringNoSort direction (default desc).
Allowed values: asc, desc
include_totalstringNoMust be true. Computes the exact result count (meta.total) which the agent must quote as the total; a page length must never be presented as a total.
Allowed values: true, false

Example request

curl -H "x-api-key: YOUR_API_KEY" \
  "https://app.caelrith.com/api/v1/patents"
GET/api/v1/patents/:patentId

Patent Full Record

Full reference →

Retrieve ONE patent's full record by its publication identifier (e.g. WO2021098789A1, EP3823456A1): abstract, inventors, classifications with CPC descriptions, family members, legal/priority/application dates, patent + NPL citations, graph-enriched citation counts, and resolved_assignees whose rows carry the full resolution chain (mention_id / direct_id / ultimate_id, with organization_id kept as the mention_id alias). Any of those ids is directly reusable as the company_id filter on patents.search / patents.aggregate / patents.yoy-growth - this closes the assignee -> portfolio chain. Responses use implicit 2xx (no success flag). Requires a Pro workspace (returns HTTP 402 otherwise).

Parameters

ParameterTypeRequiredDescription
patentId(path)stringYesPatent publication identifier, e.g. WO2021098789A1 or EP3823456A1. Copy it from a patents.search result's patent_id; never construct or guess it.

Example request

curl -H "x-api-key: YOUR_API_KEY" \
  "https://app.caelrith.com/api/v1/patents/{patentId}"
GET/api/v1/patents/aggregate

Patent Aggregates

Full reference →

Fast pre-computed aggregate patent counts (patent_agg_* tables), grouped by year, CPC code and/or company - group_by accepts a comma-separated subset of 'year','cpc','company'. IMPORTANT: country and legal_status are NOT supported here (HTTP 400) - use patents.search for those. The year range defaults to the current year and the two preceding calendar years; pass publication_date_from/to to widen it. Company filters accept an exact raw assignee string, 'organizations/<key>', 'ror:<id>' or 'lei:<id>'; unresolved company values and unknown CPC prefixes return HTTP 400 naming the value (never silently dropped). meta.total_buckets is the number of buckets returned, not the number of groups. Requires a Pro workspace (returns HTTP 402 otherwise). Use patents.search for listings and patents.yoy-growth for growth deltas.

Parameters

ParameterTypeRequiredDescription
group_bystringNoComma-separated subset of 'year', 'cpc', 'company' (e.g. 'year,company'; default 'year'). Each dimension produces one bucket per value with a 'count'.
company_idstringNoOrganization to filter on. Accepts an exact raw assignee string (as it appears in a patent's assignees array), 'organizations/<key>', 'ror:<id>', 'lei:<id>', or a bare ROR/LEI id. Takes precedence over company_name. Unresolved values return HTTP 400 (never silently ignored).
company_namestringNoResolved organization name, used as a fallback when company_id is not provided.
cpc_codestringNoCPC classification code or prefix (e.g. 'A61K').
include_descendantsstringNoWhen true (default), a cpc_code prefix expands to every code starting with it; set false for exact-code matches only.
Allowed values: true, false
publication_date_fromstringNoYYYY-MM-DD; restricts the counted window (defaults to the current year and the two preceding calendar years).
publication_date_tostringNoYYYY-MM-DD; restricts the counted window.
limitintegerNoMaximum number of buckets to return (1-500, default 100).
Range: 1 to 500
sort_by_countstringNoSort buckets by count (default desc).
Allowed values: desc, asc

Example request

curl -H "x-api-key: YOUR_API_KEY" \
  "https://app.caelrith.com/api/v1/patents/aggregate"
GET/api/v1/patents/yoy-growth

Patent YoY Growth

Full reference →

Year-over-year patent growth by CPC code or company (dimension is required). Returns one row per group with oldCount (year_start), newCount (year_end), absolute change and percent change, sorted by growth or percent; percent is a fraction (0.35 = +35%). min_old_count (default 50) hides small groups - narrow with cpc_code / company_id or lower it. Defaults compare 2024 against 2025; pass year_start/year_end for other windows. Company filters accept an exact raw assignee string, 'organizations/<key>', 'ror:<id>' or 'lei:<id>'; unresolved company values and unknown CPC prefixes return HTTP 400 naming the value (never silently dropped). Requires a Pro workspace (returns HTTP 402 otherwise). Use patents.aggregate for plain counts.

Parameters

ParameterTypeRequiredDescription
dimensionstringYesGrowth dimension (required): 'cpc' groups by CPC code, 'company' groups by company.
Allowed values: cpc, company
year_startintegerNoBaseline year (default 2024). oldCount is the patent count in this year.
Range: 1900 to 2026
year_endintegerNoComparison year (default 2025). newCount is the patent count in this year.
Range: 1900 to 2026
cpc_codestringNoOptional CPC restriction (e.g. 'A61K').
company_idstringNoOrganization to filter on. Accepts an exact raw assignee string (as it appears in a patent's assignees array), 'organizations/<key>', 'ror:<id>', 'lei:<id>', or a bare ROR/LEI id. Takes precedence over company_name. Unresolved values return HTTP 400 (never silently ignored).
company_namestringNoOrganization name fallback when company_id is not provided.
include_descendantsstringNoWhen true (default), a cpc_code prefix expands to every code starting with it; set false for exact-code matches only.
Allowed values: true, false
min_old_countintegerNoOnly include groups with at least this many patents in year_start (default 50).
Range: 0 to ∞
limitintegerNoMaximum number of groups to return (1-100, default 10).
Range: 1 to 100
sortstringNoSort order (default growth_desc).
Allowed values: growth_desc, growth_asc, percent_desc, percent_asc

Example request

curl -H "x-api-key: YOUR_API_KEY" \
  "https://app.caelrith.com/api/v1/patents/yoy-growth?dimension=cpc"