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.
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.