Developer documentation

Patent Intelligence API v1.1

Hybrid semantic search, publication lookup, and AI novelty analysis over the Indian patent corpus. Four REST endpoints, one MCP server for AI agents, one API key format, one set of quotas.


Base URL

https://patentnest.ai

Authentication

All requests authenticate with a bearer token in the Authorization header. API keys use the pn_live_ prefix and are provisioned per client. Do not embed keys in browser or mobile client code — this is a server-to-server API.

Header
Authorization: Bearer pn_live_your_key

A missing, invalid, revoked, or expired key returns 401 with error code INVALID_API_KEY or API_KEY_REVOKED. A suspended client returns 403 with CLIENT_SUSPENDED.



GET

/api/v1/patents/{'{publicationNumber}'}

Fetch a single Indian patent record by publication number. Case and separators are normalized automatically — IN/2028/2005/A, in20282005a, and IN-2028-2005-A all resolve to the same document.

Example request
curl "https://patentnest.ai/api/v1/patents/IN202211045678A" \
  -H "Authorization: Bearer pn_live_your_key"
Example response (abbreviated)
{
  "data": {
    "publicationNumber": "IN202211045678A",
    "applicationNumber": "202211045678",
    "kind": "A",
    "country": "IN",
    "title": "THERMAL MANAGEMENT SYSTEM FOR ELECTRIC VEHICLE BATTERY PACK",
    "abstract": "A battery thermal management system comprising...",
    "applicants": [
      { "name": "XYZ Technologies Pvt Ltd", "address": "Bengaluru, India", "sequence": 1 }
    ],
    "inventors": ["Rajesh Kumar", "Priya Sharma"],
    "classifications": ["H01M10/613", "H01M10/6568"],
    "filingDate": "2022-08-15",
    "publicationDate": "2023-02-17",
    "numberOfPages": 24,
    "numberOfClaims": 12,
    "extractionConfidence": 0.95,
    "source": {
      "name": "IP India Patent Journal",
      "document": "patent_journal_07_2023.pdf",
      "page": 142
    }
  },
  "meta": { "requestId": "b2c3d4e5-f6a7-8901", "durationMs": 48 }
}

Returns 404 with error code PATENT_NOT_FOUND if the number does not match any Indian patent in the corpus.


POST

/api/v1/analysis/features

AI analysis of a plain-English invention disclosure. Runs the same normalization stage as the PatentNest novelty pipeline and returns atomic technical features with per-feature detail, novelty-focus candidates, a search query built for patent retrieval, CPC/IPC classification hints, and confidence values.

This endpoint performs a full LLM analysis and typically responds in 10–30 seconds. Plan client timeouts accordingly. It draws on a separate daily analysis budget (see Rate limits).

Request body

FieldTypeRequiredDescription
titlestringNoInvention title, up to 300 characters.
descriptionstringYesPlain-English disclosure, 40–20,000 characters.
Example request
curl -X POST "https://patentnest.ai/api/v1/analysis/features" \
  -H "Authorization: Bearer pn_live_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Solar-powered cold-chain container",
    "description": "A shipping container with phase-change thermal storage panels charged by roof-mounted photovoltaic cells. A controller predicts door-opening events from a delivery schedule and pre-cools the buffer zone before each stop to hold the payload temperature within two degrees."
  }'
Example response (abbreviated)
{
  "data": {
    "features": [
      "phase-change thermal storage panels in a shipping container",
      "roof-mounted photovoltaic cells charging thermal storage",
      "controller that predicts door-opening events from delivery schedule",
      "pre-cooling of a buffer zone before each scheduled stop",
      "maintaining payload temperature within two-degree tolerance"
    ],
    "featureDetails": [
      {
        "feature": "phase-change thermal storage panels in a shipping container",
        "featureType": "core_technical",
        "disclosureSupport": "Directly stated: 'phase-change thermal storage panels'",
        "technicalRole": "Primary energy storage mechanism for cold-chain maintenance",
        "sourceExcerpt": "A shipping container with phase-change thermal storage panels",
        "confidence": 0.95
      }
    ],
    "noveltyFocus": [
      "controller that predicts door-opening events from delivery schedule",
      "pre-cooling of a buffer zone before each scheduled stop"
    ],
    "suggestedSearchQuery": "solar powered cold chain container phase change thermal storage photovoltaic predictive pre-cooling delivery schedule",
    "inventionTypes": ["apparatus", "system"],
    "classificationHints": {
      "cpc": ["F25D11/003", "B65D88/748", "H02S40/44"],
      "ipc": ["F25D11/00", "B65D88/74", "H02S40/44"]
    },
    "confidence": 0.88,
    "warnings": []
  },
  "meta": { "requestId": "c3d4e5f6-a7b8-9012", "durationMs": 14320 }
}

Feature types: core_technical (the technical mechanism), novelty_candidate (most likely to distinguish over prior art), implementation (how it is built), generic_weak (too broad to be distinctive). Use feature type and confidence to decide which features are worth mapping against prior art.

Suggested search query: retrieval-optimized phrasing built from the disclosure. Use it as the query parameter in the search endpoint. You can also use your own query — the suggestion is a strong starting point, not mandatory.


POST

/api/v1/analysis/feature-mapping

Element-wise novelty evidence. Each submitted feature is classified as present, partial, absent, or unknown against one patent record, with a verbatim quote and the field it came from (title, abstract, or claims).

Typical flow: extract features → search with the suggested query → map features against shortlisted publication numbers. This is the endpoint that produces the actual evidence for a novelty assessment.

Request body

FieldTypeRequiredDescription
featuresstring[]Yes1–12 features, each 3–300 characters.
publicationNumberstringYesPublication number of the patent to map against.
Example request
curl -X POST "https://patentnest.ai/api/v1/analysis/feature-mapping" \
  -H "Authorization: Bearer pn_live_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "features": [
      "phase-change thermal storage panels in a shipping container",
      "roof-mounted photovoltaic cells charging thermal storage",
      "controller that predicts door-opening events from delivery schedule"
    ],
    "publicationNumber": "IN202211045678A"
  }'
Example response (abbreviated)
{
  "data": {
    "publicationNumber": "IN202211045678A",
    "title": "THERMAL MANAGEMENT SYSTEM FOR ELECTRIC VEHICLE BATTERY PACK",
    "coverage": { "present": 1, "partial": 1, "absent": 1, "unknown": 0 },
    "featureFindings": [
      {
        "feature": "phase-change thermal storage panels in a shipping container",
        "status": "present",
        "evidence": {
          "quote": "a phase-change material encapsulated within thermally conductive panels arranged along the interior walls of the container",
          "field": "claims"
        },
        "confidence": 0.92,
        "reason": "Claim 1 describes phase-change thermal storage panels within a container structure."
      },
      {
        "feature": "roof-mounted photovoltaic cells charging thermal storage",
        "status": "partial",
        "evidence": {
          "quote": "an external energy source connected to the thermal regulation circuit",
          "field": "abstract"
        },
        "confidence": 0.65,
        "reason": "The patent mentions an external energy source but does not specify photovoltaic cells or roof mounting."
      },
      {
        "feature": "controller that predicts door-opening events from delivery schedule",
        "status": "absent",
        "evidence": null,
        "confidence": 0.88,
        "reason": "No mention of predictive control, door-opening events, or delivery schedule integration."
      }
    ],
    "evidenceBasis": { "title": true, "abstract": true, "claims": true },
    "qualityFlags": {
      "lowEvidence": false,
      "ambiguousAbstracts": false,
      "languageMismatch": false
    }
  },
  "meta": { "requestId": "d4e5f6a7-b8c9-0123", "durationMs": 18540 }
}

Evidence statuses: present means the feature is disclosed with a direct, attributable quote. partial means some elements match but others are missing or differ. absent means no evidence for the feature was found. unknown means the available text is insufficient to make a determination — treat it as an absence of evidence, not evidence of absence.

Quality flags: lowEvidence fires when fewer than two text fields were available. ambiguousAbstracts flags when the abstract is too vague to support reliable mapping. languageMismatch flags when the patent text and features appear to be in different languages.


MCP server for AI agents

POST /api/v1/mcp is a Model Context Protocol endpoint (streamable HTTP transport, JSON responses) exposing the same four operations as tools: search_patents, get_patent, extract_invention_features, and map_features_to_patent. Tool calls use the same bearer API keys and count against the same quotas as REST requests.

Compatible with Claude Desktop, Claude Code, Cursor, Windsurf, and any MCP-compatible client. Add this to your MCP configuration:

MCP configuration (Claude Desktop / Claude Code)
{
  "mcpServers": {
    "patentnest": {
      "type": "http",
      "url": "https://patentnest.ai/api/v1/mcp",
      "headers": {
        "Authorization": "Bearer pn_live_your_key"
      }
    }
  }
}

The server supports protocol versions 2025-06-18, 2025-03-26, and 2024-11-05. Sessions are stateless. tools/list returns the tool definitions with full JSON Schema input specifications.

Available tools

ToolDescription
search_patentsHybrid semantic + text search. Same as POST /api/v1/patents/search.
get_patentFetch one patent by publication number. Same as GET /api/v1/patents/{publicationNumber}.
extract_invention_featuresAI feature extraction from a disclosure. Same as POST /api/v1/analysis/features.
map_features_to_patentElement-wise evidence mapping. Same as POST /api/v1/analysis/feature-mapping.

Suggested agent workflow: call extract_invention_features on a disclosure, use the suggestedSearchQuery with search_patents, then call map_features_to_patent against shortlisted publication numbers. All quotes are verbatim from the patent record; treat unknown statuses as insufficient evidence, not as proof of novelty.


Rate limits and quotas

Every response includes rate-limit headers. Exceeding any limit returns 429 with a Retry-After header (seconds).

HeaderDescription
RateLimit-LimitPer-minute request limit.
RateLimit-RemainingRequests remaining in the current minute.
RateLimit-ResetUnix timestamp when the minute window resets.
X-RateLimit-Daily-LimitDaily request limit.
X-RateLimit-Daily-RemainingRequests remaining today (UTC).
X-RateLimit-Monthly-LimitMonthly request limit.
X-RateLimit-Monthly-RemainingRequests remaining this month (UTC).
X-RateLimit-Analysis-LimitDaily AI analysis credit limit (analysis endpoints only).
X-RateLimit-Analysis-RemainingAnalysis credits remaining today.
X-Request-IDUnique request identifier. Include in support requests.

The two /api/v1/analysis endpoints draw on a separate daily analysis budget. An analysis credit is charged only when a validated request reaches the model, so requests rejected with 400 or 404 never cost a credit. When the analysis budget is exhausted, these endpoints return 429 with error code ANALYSIS_QUOTA_EXCEEDED; search and lookup remain available.

Default limits are per client. Contact us if you need higher throughput — limits are configurable per client.


Error responses

All errors return a JSON body with a stable code, a human-readable message, and a requestId. Use the code for programmatic handling; the message may change between versions.

Error response format
{
  "error": {
    "code": "INVALID_REQUEST",
    "message": "query must contain between 2 and 2,000 characters.",
    "requestId": "a1b2c3d4-e5f6-7890"
  }
}
HTTPCodeDescription
400INVALID_REQUESTMissing or invalid request parameters.
401INVALID_API_KEYMissing, malformed, or unrecognized API key.
401API_KEY_REVOKEDThe API key has been revoked.
401API_KEY_EXPIREDThe API key has expired.
403CLIENT_SUSPENDEDThe API client account is suspended.
404PATENT_NOT_FOUNDNo patent matched the publication number.
404UNKNOWN_TOOLMCP tool name not recognized.
413PAYLOAD_TOO_LARGERequest body exceeds 256 KB.
429RATE_LIMIT_EXCEEDEDPer-minute request limit exceeded.
429DAILY_LIMIT_EXCEEDEDDaily request limit exceeded.
429MONTHLY_LIMIT_EXCEEDEDMonthly request limit exceeded.
429ANALYSIS_QUOTA_EXCEEDEDDaily AI analysis credit limit exceeded.
503SERVICE_UNAVAILABLEThe patent API is not currently enabled.
503SEMANTIC_SEARCH_UNAVAILABLEVector search or embedding service is down.
503CORPUS_NOT_READYEmbedding coverage below minimum threshold.
503ANALYSIS_UNAVAILABLEAI analysis endpoints are not enabled.
500INTERNAL_ERRORUnexpected server error. Include requestId in support requests.

Patent record fields

Every patent record — whether from search results or a direct lookup — contains the following fields. Search results additionally include a relevance object.

FieldTypeDescription
publicationNumberstringCanonical publication number (e.g. IN202211045678A).
applicationNumberstring | nullRaw application number as filed.
kindstring | nullKind code (A, B, etc.).
countrystringTwo-letter country code (IN for Indian patents).
titlestringFull patent title.
abstractstring | nullPatent abstract text.
applicantsobject[]Array of { name, address, sequence }.
inventorsstring[]Inventor names as published.
classificationsstring[]IPC and CPC classification codes.
filingDatestring | nullISO 8601 date (YYYY-MM-DD), where available.
publicationDatestring | nullISO 8601 publication date.
numberOfPagesinteger | nullPage count of the patent document.
numberOfClaimsinteger | nullNumber of claims.
extractionConfidencenumber | nullMachine extraction confidence score (0–1).
source.namestringSource corpus name.
source.documentstring | nullOriginal Journal PDF filename.
source.pageinteger | nullPage number in the source PDF.
relevance.scorenumber | nullComposite relevance score (search only).
relevance.semanticScorenumber | nullSemantic similarity score (search only).
relevance.textScorenumber | nullText match score (search only).
relevance.matchedFieldsstring[]Fields that contributed to the match (search only).

Confidentiality

Submitted invention disclosures are processed to produce the API response and are not retained or used to train models. Request logs store request metadata (endpoint, status code, duration, query hashes) — never the disclosure text. Request bodies are capped at 256 KB.

API keys should be treated as secrets. Rotate keys if compromised — contact us or use the admin panel to revoke and reissue.


Quick start

  1. Request API access — we'll provision a client and send your key.
  2. Call POST /api/v1/analysis/features with your invention disclosure.
  3. Use the suggestedSearchQuery to call POST /api/v1/patents/search.
  4. Call POST /api/v1/analysis/feature-mapping for each shortlisted patent.
  5. Read the evidence: status, verbatim quote, source field, confidence.

The OpenAPI 3.1 spec can be imported into Postman, Swagger UI, or any code generator to scaffold client code automatically.