For developers & agents

Prior-art search as a tool call

Patent-drafting agents, research assistants and internal IP tools all need the same primitive: “given this invention, what’s the closest prior art — cited?” Patent77 exposes the exact engine behind this site as a JSON API and a hosted MCP server, behind one key.

/docs/api · /api/openapi · /llms.txt · /api/v1

Quickstart

One key, one call

Get a key at /signup (API keys are a paid-plan feature; anonymous trial calls work without one), then POST a description. The engine runs live — expect a couple of minutes for a full search, not milliseconds.

request

curl -X POST https://www.patent77.com/api/v1/searches \
  -H "Authorization: Bearer p77_live_..." \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: idem_4f2a" \
  -d '{"description": "A bicycle helmet with a built-in
       crash-detection accelerometer that texts an
       emergency contact"}'

response 200 (abridged)

{
  "search_id": "sr_7d31c8",
  "status": "completed",
  "invention_title": "Crash-detecting helmet with emergency alert",
  "risk": "medium",
  "risk_note": "Close art exists for impact sensing in headgear; ...",
  "elements": [ { "id": "e1", "label": "impact sensor", ... } ],
  "queries": [ "helmet accelerometer crash detection", ... ],
  "refs": [
    {
      "pub_number": "US10123456B2",
      "title": "...",
      "score": 0.87,
      "overlap": "Teaches helmet-mounted accelerometer ...",
      "elements_hit": ["e1", "e2"],
      "url": "https://patents.google.com/patent/US10123456B2"
    }
  ],
  "ref_count": 12,
  "candidates_considered": 214,
  "request_id": "req_9f3ac1d0",
  "disclaimer": "..."
}

Fields are snake_case; every response carries request_id and the disclaimer. Full field-by-field detail in the API reference.

The contract

Six things you can rely on

01Single-key auth

One bearer key (p77_live_…) covers the REST API and the MCP server at your plan's quota. Generate and revoke keys in settings; send Authorization: Bearer or x-api-key.

02Anonymous trial

No key? POST /searches and GET /patents/{pub_number} still work, throttled to 4/min and 20/day per IP, with search results truncated to the top 3 references. Enough to evaluate the engine from the docs; not enough to build on.

03Idempotency keys

Searches and reports cost real compute and real money. Send an Idempotency-Key header and a retried request returns the original result instead of running - and billing - a second time.

04Structured errors

Every error is { error: { code, message } } with a stable code (rate_limited, upgrade_required, unprocessable, upstream_unavailable, …) plus request_id. Nothing to parse out of prose.

05Machine-readable pricing

GET /api/v1/pricing returns plans, quotas, overage and rate limits as JSON, so an agent can decide whether a call is worth making before it makes it.

06Request log

Every keyed call is logged with its endpoint, status, latency and request_id - inspectable in the dashboard and exportable on paid plans, so you can reconcile an agent's behaviour against what actually ran.

error envelope (402)

{
  "error": {
    "code": "upgrade_required",
    "message": "Monthly search allowance reached (50/50 on the pro plan). ..."
  },
  "request_id": "req_c21b44e7"
}

Rate limits

  • anonymous · 4/min · 20/day · top-3 refs
  • pro · 120/min · 50 searches + 10 reports/mo
  • scale · 600/min · 300 searches + 60 reports/mo

Limits ride on X-RateLimit-* headers; a 429 includes Retry-After. Reports return 402 upgrade_required without a paid key.

Start with the anonymous call

The fastest evaluation is one curl with no key: you’ll get real, truncated results from the live engine. If they’re good, the key is one signup away.